MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
初识MyBatis
什么是MyBatis?
MyBatis 是一个半自动化的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis 的特点
- 简单易用:MyBatis 可以简化数据库操作,使得开发者可以更专注于业务逻辑的实现。
- 灵活可扩展:MyBatis 支持自定义 SQL 映射,满足不同的业务需求。
- 支持多种数据库:MyBatis 支持多种数据库,如 MySQL、Oracle、SQL Server 等。
MyBatis 入门
环境搭建
- 添加依赖:在 Maven 项目中添加 MyBatis 的依赖。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> - 配置 MyBatis:创建
mybatis-config.xml文件,配置数据库连接、事务管理等。<configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_db"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration> - 编写实体类:定义一个实体类,例如
User。public class User { private Integer id; private String name; private Integer age; // 省略 getter 和 setter } - 编写 Mapper 接口:定义一个 Mapper 接口,例如
UserMapper。public interface UserMapper { List<User> selectAll(); } - 编写 Mapper XML:创建一个 Mapper XML 文件,例如
UserMapper.xml。<mapper namespace="com.example.mapper.UserMapper"> <select id="selectAll" resultType="com.example.User"> SELECT * FROM user </select> </mapper>
运行测试
- 创建 MyBatis 的 SqlSessionFactory。
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); - 获取 SqlSession。
SqlSession session = sqlSessionFactory.openSession(); - 执行 Mapper 接口方法。
UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectAll(); System.out.println(users); - 关闭 SqlSession。
session.close();
MyBatis 高级使用
动态 SQL
MyBatis 支持动态 SQL,可以使用 <if>、<choose>、<when>、<otherwise> 等标签实现动态 SQL。
<select id="selectUserByCondition" resultType="com.example.User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
缓存
MyBatis 支持一级缓存和二级缓存。
- 一级缓存:在同一个 SqlSession 中,同一个 Mapper 接口方法内部多次查询相同的数据时,会使用一级缓存。
- 二级缓存:在同一个 SqlSessionFactory 中,不同的 Mapper 接口方法查询相同的数据时,会使用二级缓存。
插件
MyBatis 支持自定义插件,可以实现拦截器、动态 SQL、参数处理等功能。
MyBatis 实战案例
案例 1:用户登录
- 创建 User 实体类。
public class User { private Integer id; private String username; private String password; // 省略 getter 和 setter } - 创建 UserMapper 接口。
public interface UserMapper { User login(String username, String password); } - 创建 UserMapper.xml。
<mapper namespace="com.example.mapper.UserMapper"> <select id="login" resultType="com.example.User"> SELECT * FROM user WHERE username = #{username} AND password = #{password} </select> </mapper> - 测试登录功能。
案例 2:分页查询
- 创建 User 实体类。
public class User { private Integer id; private String name; private Integer age; // 省略 getter 和 setter } - 创建 UserMapper 接口。
public interface UserMapper { List<User> selectByPage(int offset, int limit); } - 创建 UserMapper.xml。
<mapper namespace="com.example.mapper.UserMapper"> <select id="selectByPage" resultType="com.example.User"> SELECT * FROM user LIMIT #{offset}, #{limit} </select> </mapper> - 测试分页查询功能。
总结
MyBatis 是一个功能强大、易用的持久层框架,它可以帮助开发者简化数据库操作,提高开发效率。通过本文的学习,相信你已经对 MyBatis 有了一定的了解,并能够将其应用到实际项目中。
