基于 MyBatis XML 配置方法完整攻略
1. 概述
MyBatis 是一款非常流行的 Java 持久化框架,它将 SQL 语句和 Java 对象之间的映射关系配置在 XML 文件中,极大地简化了数据库访问的开发工作。本文将介绍如何通过 XML 配置方式使用 MyBatis 进行数据库访问。
2. 准备工作
在开始使用 MyBatis 之前,需要进行以下准备工作:
2.1 引入 MyBatis 依赖
在项目的 pom.xml 文件中,引入 MyBatis 的依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
2.2 配置 MyBatis
在项目的 src/main/resources 目录下,创建 mybatis-config.xml 文件。在该文件中,可以配置 MyBatis 的一些全局参数,例如数据库连接池、类型转换器等。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mybatis/dao/MyBatisMapper.xml"/>
</mappers>
</configuration>
如上例所示,通过 dataSource 标签配置数据源,在 environment 标签中使用 transactionManager 标签配置事务管理器。最后,通过 mappers 标签指定 MyBatis 映射文件的路径。
3. 使用 MyBatis
3.1 创建数据源和 SQLSessionFactory
在 MyBatis 中,使用 SqlSessionFactory 来创建 SqlSession。SqlSession 是与数据库的一次会话,可以用来执行 SQL 语句。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
3.2 定义数据访问对象 (DAO)
在 MyBatis 中,可以通过 XML 配置文件或 Java 注解的方式定义 DAO 对象。在本例中,我们使用 XML 配置文件的方式定义 DAO 接口。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.5//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.dao.UserDao">
<select id="selectUserById" resultType="com.example.mybatis.entity.User">
SELECT *
FROM user
WHERE id = #{id}
</select>
</mapper>
如上例所示,在 DAO 接口中定义了一条查询语句,通过 XML 配置文件的方式指定 SQL 语句和映射对象。
3.3 使用 DAO 接口
创建 DAO 对象,可以直接注入 SqlSession 对象来进行数据库操作。
SqlSession sqlSession = sessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = userDao.selectUserById(1);
4. 示例
4.1 查询 User 对象
public class UserDaoTest {
private static SqlSessionFactory sessionFactory;
private static Logger LOGGER = LoggerFactory.getLogger(UserDaoTest.class);
/**
* 初始化 SqlSessionFactory
*/
@BeforeClass
public static void init() {
String resource = "mybatis-config.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
}
@Test
public void testSelectUserById() {
SqlSession sqlSession = sessionFactory.openSession();
try {
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = userDao.selectUserById(1);
LOGGER.info("user: {}", user);
assertEquals("张三", user.getUsername());
} finally {
sqlSession.close();
}
}
}
在 UserDaoTest 类中,创建了 SqlSessionFactory 对象并初始化。在 testSelectUserById 方法中,创建 SqlSession 对象,获取 UserDao 接口实例并通过该接口查询出 User 对象。
4.2 插入 User 对象
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.5//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.dao.UserDao">
<insert id="insertUser" parameterType="com.example.mybatis.entity.User">
INSERT INTO user (username, password, age)
VALUES (#{username}, #{password}, #{age})
</insert>
</mapper>
定义插入 User 对象的 SQL 语句。
public class UserDaoTest {
private static SqlSessionFactory sessionFactory;
private static Logger LOGGER = LoggerFactory.getLogger(UserDaoTest.class);
/**
* 初始化 SqlSessionFactory
*/
@BeforeClass
public static void init() {
String resource = "mybatis-config.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
}
@Test
public void testInsertUser() {
SqlSession sqlSession = sessionFactory.openSession();
try {
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = new User("小明", "123456", 18);
int result = userDao.insertUser(user);
LOGGER.info("result: {}", result);
assertTrue(result == 1);
} finally {
sqlSession.commit();
sqlSession.close();
}
}
}
创建插入 User 对象的 Unit Test 类,先创建 SqlSession 对象,然后通过 SqlSession 对象获取 UserDao 接口实例。最后,调用 UserDao 的 insertUser 方法,插入 User 对象。在最后必须注意,在执行完之后需要对事务进行提交,避免数据丢失。
5. 总结
XML 配置方式是 MyBatis 中最常用的方式,也是 MyBatis 最为经典的一种使用方式。通过本文的介绍,你已经可以实现简单到复杂的 DAO 对象操作,通过 Unit Test 对 Mybatis 做到轻松测试。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于MyBatis XML配置方法(全面了解) - Python技术站