MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects)映射成数据库中的记录。
MyBatis 简介
MyBatis 允许你将 SQL 映射存储在 XML 文件中,也可以将它们直接放在 Java 接口中。这使得 MyBatis 更易于维护和扩展。它支持自定义 SQL、存储过程以及高级映射。
MyBatis 的特点
- 轻量级:MyBatis 的核心仅包含核心的 XML 映射和 SQL 映射文件,没有依赖其他任何东西。
- 灵活:MyBatis 可以灵活地与各种数据库交互,且易于扩展。
- 易于使用:MyBatis 的学习曲线相对较低,易于上手。
- 支持定制化:MyBatis 允许你自定义 SQL 映射,实现复杂的查询和操作。
MyBatis 快速入门
环境搭建
添加依赖:在你的项目中添加 MyBatis 和数据库的依赖。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency>配置数据源:在
mybatis-config.xml文件中配置数据源。<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/your_database"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments>编写映射文件:在
UserMapper.xml文件中编写 SQL 映射。<mapper namespace="com.example.mapper.UserMapper"> <select id="selectById" resultType="com.example.entity.User"> SELECT * FROM users WHERE id = #{id} </select> </mapper>编写接口:在
UserMapper.java文件中编写 MyBatis 映射接口。public interface UserMapper { User selectById(Integer id); }创建 Session:使用
SqlSessionFactoryBuilder创建SqlSessionFactory,然后通过SqlSessionFactory创建SqlSession。String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession();执行查询:通过
SqlSession执行查询。User user = sqlSession.selectOne("com.example.mapper.UserMapper.selectById", 1);关闭资源:执行完毕后,关闭
SqlSession。sqlSession.close();
MyBatis 实战解析
一、动态 SQL
MyBatis 支持动态 SQL,你可以使用 <if>、<choose>、<when>、<otherwise> 等标签来实现复杂的查询条件。
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
二、关联查询
MyBatis 支持复杂的关联查询,你可以使用 <resultMap> 来映射复杂的关联关系。
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="email" column="email"/>
<association property="address" javaType="Address">
<id property="id" column="address_id"/>
<result property="city" column="city"/>
<result property="street" column="street"/>
</association>
</resultMap>
<select id="selectUserById" resultMap="userMap">
SELECT u.id, u.username, u.email, a.id as address_id, a.city, a.street
FROM users u
LEFT JOIN addresses a ON u.id = a.user_id
WHERE u.id = #{id}
</select>
三、插件
MyBatis 插件可以扩展 MyBatis 的功能,例如拦截 SQL 执行、结果集处理等。
public class ExamplePlugin implementsInterceptor {
public Object intercept(Invocation invocation) throws Throwable {
// 拦截 SQL 执行
return invocation.proceed();
}
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
public void setProperties(Properties properties) {
// 设置插件属性
}
}
在 mybatis-config.xml 文件中注册插件。
<plugins>
<plugin interceptor="com.example.plugin.ExamplePlugin"/>
</plugins>
总结
MyBatis 是一个功能强大的持久层框架,它可以帮助你轻松地实现数据库操作。通过本文的介绍,相信你已经对 MyBatis 有了一定的了解。在实际项目中,你可以根据自己的需求灵活地使用 MyBatis,让你的项目更加强大。
