MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
了解 MyBatis
什么是 MyBatis?
MyBatis 是一个半自动化的持久层框架。它将 SQL 映射成 Java 对象,减少了数据库操作中繁琐的 JDBC 代码,使开发者可以更加专注于业务逻辑的实现。
MyBatis 的优势
- 易用性:MyBatis 提供了简单的 API 和强大的映射功能,使得开发更加高效。
- 灵活性:MyBatis 允许你自定义 SQL 映射,使得你的应用更加灵活。
- 性能:MyBatis 可以缓存 SQL 结果,减少数据库的访问次数,提高性能。
MyBatis 的核心组件
1. SQL 映射文件
SQL 映射文件是 MyBatis 的核心配置文件,它定义了 SQL 语句与 Java 对象的映射关系。
2. 接口
MyBatis 使用接口来定义数据库操作的方法,这些方法将映射到 SQL 映射文件中的 SQL 语句。
3. Mapper 对象
Mapper 对象是实现接口的类,它包含了数据库操作的方法实现。
MyBatis 的基本使用
1. 添加依赖
在项目的 pom.xml 文件中添加 MyBatis 的依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
2. 创建 SQL 映射文件
在 src/main/resources 目录下创建 mapper 文件夹,并在其中创建 SQL 映射文件。
<?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.example.mapper.UserMapper">
<select id="selectById" resultType="com.example.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
3. 创建接口
在 src/main/java 目录下创建接口,定义数据库操作的方法。
public interface UserMapper {
User selectById(Integer id);
}
4. 创建 Mapper 对象
在 src/main/java 目录下创建 Mapper 对象,实现接口中的方法。
public class UserMapperImpl implements UserMapper {
private SqlSession sqlSession;
public UserMapperImpl(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public User selectById(Integer id) {
return sqlSession.selectOne("com.example.mapper.UserMapper.selectById", id);
}
}
5. 使用 MyBatis
在 src/main/resources 目录下创建 mybatis-config.xml 文件,配置 MyBatis。
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
在 Java 代码中,使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory,然后通过 SqlSessionFactory 创建 SqlSession,最后通过 SqlSession 创建 Mapper 对象。
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = builder.build(new FileInputStream("src/main/resources/mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectById(1);
sqlSession.close();
高级特性
1. 动态 SQL
MyBatis 支持动态 SQL,允许你在 SQL 映射文件中使用 if、choose、when、otherwise 等标签,实现动态 SQL 的功能。
2. 缓存
MyBatis 提供了两种类型的缓存:一级缓存和二级缓存。一级缓存是本地缓存,二级缓存是分布式缓存。
3. 分页
MyBatis 支持分页功能,可以通过插件或自定义 SQL 实现分页。
总结
MyBatis 是一个功能强大、易用的 Java 开源框架,可以帮助开发者高效地构建企业级应用。通过学习 MyBatis,你可以提高数据库操作的效率,专注于业务逻辑的实现。
