一. Mapper 形式的 开发
前一章讲了 命名空间形式的CRUD 操作,会发现里面有一个不太友好的问题。 普通的一个单表 User ,需要写UserDao,UserDaoImpl, 与User.xml 三个文件,并且这三个文件之间并没有很明显的关联关系, 比较麻烦,所以MyBatis 推荐使用Mapper 的形式进行开发, 只需要创建 XxxMapper.java 接口和XxxMapper.xml 配置文件即可。 下面,讲解一下Mapper 形式的开发。 过程与前面的基本都是一样的。
二. Mapper 形式的开发过程
二.一 导入jar包
二.二 User 实体类
package com.yjl.pojo; /** @author:yuejl @date: 2019年6月15日 上午11:11:02 @Description Mybatis 使用的基本类 User */ public class User { /** * @param id id编号,自增 * @param name 姓名 * @param age 年龄 * @param sex 性别 * @param description 描述 */ private Integer id; private String name; private Integer age; private String sex; private String description; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", description=" + description + "]"; } }
二.三 创建包 mapper
二.四 在mapper 包下创建UserMapper.java 接口
package com.yjl.mapper; import java.util.List; import com.yjl.pojo.User; /** @atuhor:两个蝴蝶飞 @Description: User实体类所对应的接口 */ public interface UserMapper { public User getById(int id); public List<User> findAll(); }
二.五 在mapper 包下创建UserMapper.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yjl.mapper.UserMapper"> <select id="getById" parameterType="int" resultType="user"> select * from user where id=#{id} </select> <select id="findAll" resultType="user"> select * from user </select> </mapper>
二.六 SqlSessionFactoryUtils 工具类,创建SqlSession
package com.yjl.util; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; /** @author:两个蝴蝶飞 @date: 2019年6月15日 上午11:13:26 @Description 类的相关描述 */ public class SqlSessionFactoryUtils { /*创建SqlSession的工厂 SqlSessionFactory对象*/ private static SqlSessionFactory sqlSessionFactory=null; private SqlSessionFactoryUtils(){ } /** * 单例模式 获取实例 * @author 两个蝴蝶飞 * @return */ public static SqlSessionFactory getInstance(){ synchronized(SqlSessionFactoryUtils.class){ if(sqlSessionFactory==null){ InputStream input=null; // Mybatis 核心配置文件名 String resource_name="SqlMapConfig.xml"; try { input=Resources.getResourceAsStream(resource_name); sqlSessionFactory=new SqlSessionFactoryBuilder().build(input); } catch (IOException e) { e.printStackTrace(); } } } return sqlSessionFactory; } /** * * @author 两个蝴蝶飞 * @return 获取当前的Session */ public static SqlSession getSession(){ if(sqlSessionFactory==null){ getInstance(); } return sqlSessionFactory.openSession(); } }
二.七 mybatis 配置文件 SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 引入约束 --> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置别名 ,在UserMapper.xml 下的parameterType 和resultType 就可以用别名来替换了。--> <typeAliases> <typeAlias type="com.yjl.pojo.User" alias="user"/> </typeAliases> <!-- 开发环境 development --> <environments default="development"> <environment id="development"> <!-- 事务管理 --> <transactionManager type="JDBC"></transactionManager> <!-- 数据源 ,为pooled 连接池 --> <dataSource type="pooled"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="abc123"/> </dataSource> </environment> </environments> <mappers> <!-- 引入文件资源 --> <mapper resource="com/yjl/mapper/UserMapper.xml"/> </mappers> </configuration>
二.八 总的目录结构 如下
在UserTest 类下创建测试的方法。