3、创建 Mybatis 核心配置文件
MyBatis 核心配置文件主要用于配置数据库连接和 MyBatis 运行时所需的各种特性,包含了设置和影响 MyBatis 行为的属性。
为了方便管理以后各框架集成所需的配置文件,故需在项目工程下新建 Source Folder 类型的 resources 目录,并在此目录下添加 MyBatis 的核心配置文件,默认文件名为 " configuration.xml"。但需要注意的是,为了方便在框架集成时更好地区分各个配置文件,我们一般将此文件名命名 "mybatis - config.xml"。该文件需要配置数据库连接信息和 MyBatis 的参数。
说明:mybatis-config.xml 文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么 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"> <!-- 配置 mybatis 核心文件,通过这个配置文件完成 mybatis 与数据库的连接 --> <configuration> <!-- 引入 database.properties 文件--> <properties resource="database.properties"/> <settings> <!-- 配置 mybatis 的日志实现为 LOG4J --> <setting name="logImpl" value="LOG4J" /> <!-- Mybatis 对 resultMap 自动映射的匹配级别 NONE:关闭自动映射 PARTIAL:默认值,会自动映射没有嵌套的结果集 FULL:会自动映射 嵌套的也会映射 --> <setting name="autoMappingBehavior" value="PARTIAL"/> </settings> <typeAliases> <!-- 配置类型别名,减少输入多余的完整类名(类名不区分大小写)--> <package name="" /> </typeAliases> <!--配置运行环境(可配置多套但只能选其中一套) --> <environments default="development"> <environment id="development"> <!--配置事务管理,采用 JDBC 的事务管理 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源,POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 将mapper文件加入到配置文件中,指路径映射文件路径 --> <mappers> <mapper resource="cn/mybatis/dao/UserMapper.xml"/> </mappers> </configuration>
4、创建持久化类 POJO(即实体类)
持久化类是指其实例状态需要被 mybatis 持久化到数据库中的类。在应用的设计中,持久化类通常对应需求中的业务实体。MyBatis 一般采用 POJO 编程模型来实现持久化类, 与 POJO 类配合完成持久化工作是 MyBatis 最常见的工作模式。
POJO ( Plain Ordinary Java Object),从字面上来讲就是普通 Java 对象。POJO 类可以简单地理解为符合 JavaBean 规范的实体类,它不需要继承和实现任何特殊的 Java 基类或者接口。 JavaBean 对象的状态保存在属性中,访问属性必须通过对应的 getter 和 setter 方法。
以用户表(smbms_user)为例,定义用户 POJO 类,User.java 代码如下:
package cn.mybatis.pojo; import java.util.Date; public class User { private Integer id; //id private String userCode; //用户编码 private String userName; //用户名称 private String userPassword; //用户密码 private Integer gender; //性别 private Date birthday; //出生日期 private String phone; //电话 private String address; //地址 private Integer userRole; //用户角色 private Integer createdBy; //创建者 private Date creationDate; //创建时间 private Integer modifyBy; //更新者 private Date modifyDate; //更新时间 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public Integer getGender() { return gender; } public void setGender(Integer gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Integer getUserRole() { return userRole; } public void setUserRole(Integer userRole) { this.userRole = userRole; } public Integer getCreatedBy() { return createdBy; } public void setCreatedBy(Integer createdBy) { this.createdBy = createdBy; } public Date getCreationDate() { return creationDate; } public void setCreationDate(Date creationDate) { this.creationDate = creationDate; } public Integer getModifyBy() { return modifyBy; } public void setModifyBy(Integer modifyBy) { this.modifyBy = modifyBy; } public Date getModifyDate() { return modifyDate; } public void setModifyDate(Date modifyDate) { this.modifyDate = modifyDate; } @Override public String toString() { return "User [id=" + id + ", userCode=" + userCode + ", userName=" + userName + ", userPassword=" + userPassword + ", gender=" + gender + ", birthday=" + birthday + ", phone=" + phone + ", address=" + address + ", userRole=" + userRole + ", createdBy=" + createdBy + ", creationDate=" + creationDate + ", modifyBy=" + modifyBy + ", modifyDate=" + modifyDate + "]"; } }
说明:
在 MyBatis 中,不需要 POJO 类名与数据库表名一致,因为 MyBatis 是 POJO 与 SQL 语句之间的映射机制,一般情况下,保证 POJO 对象的属性与数据库表的字段名一致即可。
数据库中数据表的字段命名按照 Java 的驼峰命名规则,这样在进行实体映射的时候,一是方便开发者的工作,二是使用 Mybatis 框架开发,也方便数据表字段与 POJO 的属性进行自动映射。
5、创建 DAO 接口
在 DAO 层创建 UserMapper 接口,编写与 User 用户有关的功能,以查询用户记录数为例。
package cn.mybatis.dao; public interface UserMapper { /** * 查询用户表记录数 * @return */ public int count(); }
6、创建 SQL 映射文件
创建 SQL 映射文件,完成与 POJO (实体类)的映射,该文件也是一个 XML 文件,命名为 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="cn.mybatis.dao.UserMapper"> <!-- 查询用户表记录数 --> <select id="count" resultType="int"> select count(1) as count from smbms_user </select> </mapper>
经验:SQL 映射文件一般都对应于相应的 POJO,所以一般都是采用 POJO 的名称+Mapper 的规则来进行命名。当然该 mapper 文件属于 DAO 层的操作,应该放置在 dao 包下,并根据业务功能进行分包放置。
注意点:不要忘记将 SQL 映射文件加入 Mybatis 核心配置文件中。
7、创建测试类
在工程中加入 JUnit4,创建测试类 UserMapperTest.java 进行功能测试,并在后台打印出用户表的记录数,具体实现步骤如下。
package cn.mybatis.test; 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; import org.junit.Test; import cn.mybatis.dao.UserMapper; public class UserMapperTest { @Test public void testCount() { int count = 0; SqlSession sqlSession = null; try { // 1.读取全局配置文件: mybatis-config.xml String resource = "mybatis-config.xml"; // 2.获取 mybatis-config.xml 文件的输入流 InputStream is = Resources.getResourceAsStream(resource); // 3.创建 SqlsessionFactory 对象,此对象可以完成对配置文件的读取 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); // 4.创建 SqlSession 对象,此对象的作用是调用 mapper 文件进行数据操作,需要注意的是必须先把 mapper 文件引入到 mybatis-config.xml 中才能起效 sqlSession = factory.openSession(); // 第一种方式:调用selectOne方法执行查询操作,MyBatis 通过 mapper 文件的 namespace 和子元素的 id 来找到相应的 SQL,从而执行查询操作(此方式不需要编写DAO接口) // count = sqlSession.selectOne("cn.mybatis.dao.UserMapper.count"); // 第二种方式:调用getMapper(Mapper.class)执行dao接口方法来实现对数据库的查询操作(推荐使用) count = sqlSession.getMapper(UserMapper.class).count(); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭 SqlSession 对象 sqlSession.close(); } System.out.println(count); } }