MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,简单的 Java 对象)映射成数据库中的记录。
MyBatis 简介
什么是ORM?
ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,它将对象模型表示的对象与关系数据库中的表格数据相对应,使得对象之间的关系与存储在数据库中的表之间的关系相映射。
MyBatis 的优势
- 简化数据库操作:MyBatis 可以减少数据库操作的手动代码,提高开发效率。
- 灵活的映射:MyBatis 提供了丰富的映射类型,支持复杂的 SQL 语句。
- 易上手:对于新手来说,MyBatis 的学习曲线相对较平缓。
MyBatis 的基本使用
环境搭建
- 添加依赖:在 Maven 项目中,添加 MyBatis 的依赖。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
- 配置文件:创建
mybatis-config.xml文件,配置数据库连接信息。
<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/test"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
</configuration>
- Mapper 接口:创建一个 Mapper 接口,定义 SQL 语句。
public interface UserMapper {
List<User> selectAll();
}
- Mapper XML:创建对应的 Mapper XML 文件,配置 SQL 语句。
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectAll" resultType="com.example.entity.User">
SELECT * FROM user
</select>
</mapper>
- Session 工厂:通过
SqlSessionFactoryBuilder创建SqlSessionFactory,然后通过SqlSessionFactory获取SqlSession。
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
- 执行 SQL:通过
SqlSession执行 SQL 语句。
List<User> users = sqlSession.selectList("com.example.mapper.UserMapper.selectAll");
- 关闭资源:关闭
SqlSession和SqlSessionFactory。
sqlSession.close();
sqlSessionFactory.close();
MyBatis 的核心概念
映射器(Mapper)
映射器是一个接口,它包含了 SQL 语句的定义。MyBatis 会根据接口的方法名称和参数类型,动态生成 SQL 语句。
映射文件(Mapper XML)
映射文件是一个 XML 文件,它包含了 SQL 语句的定义。映射文件中的 SQL 语句可以与映射器接口中的方法名称和参数类型相对应。
SQL 会话(SqlSession)
SQL 会话是 MyBatis 的核心接口,它提供了执行 SQL 语句的方法。
映射器代理(Mapper Proxy)
映射器代理是一个动态代理对象,它代理了映射器接口,并负责执行 SQL 语句。
MyBatis 的进阶使用
动态 SQL
MyBatis 支持动态 SQL,可以方便地编写复杂的 SQL 语句。
<select id="selectByCondition" resultType="com.example.entity.User">
SELECT * FROM user
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="password != null">
AND password = #{password}
</if>
</where>
</select>
关联映射
MyBatis 支持关联映射,可以方便地处理一对多、多对多等关系。
<resultMap id="userResultMap" type="com.example.entity.User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<collection property="orders" ofType="com.example.entity.Order">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="price" column="price"/>
</collection>
</resultMap>
总结
MyBatis 是一个功能强大的 ORM 框架,它可以帮助开发者简化数据库操作,提高开发效率。通过本文的介绍,相信你已经对 MyBatis 有了一定的了解。希望你能将 MyBatis 应用于实际项目中,发挥其强大的功能。
