MyBatis 教程
一、MyBatis介绍
MyBatis 是一种基于 Java 的持久层框架。它实现了 ORM(对象关系映射)技术,帮助开发者将 Java 对象与关系型数据库中的数据进行映射。MyBatis 将应用程序中的数据访问逻辑与 SQL 语句的编写和执行分离开来,从而更好地维护和优化应用程序。
MyBatis 的主要组成部分包括:SqlSessionFactory
、SqlSession
、Mapper
和 XML 映射文件。
二、MyBatis中Mapper详解
MyBatis 中的 Mapper 是用于定义 SQL 语句与 Java 接口方法之间的映射关系的。在 Mapper 中,我们可以使用 MyBatis 提供的标签来编写 SQL 语句,以及定义 Java 方法和 SQL 语句之间的映射关系。 Mapper 的创建一般有两种方式:基于 XML 的 Mapper 和基于注解的 Mapper。其中,基于 XML 的 Mapper 是最常见的方式,我们可以通过 XML 配置文件来定义 Mapper。 下面是一个基于 XML 的 Mapper 的代码示例:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.example.pojo.User">
select * from user where id = #{id}
</select>
</mapper>
在上面的代码中,我们定义了一个名为 getUserById
的 SQL 查询语句,并将它映射到 int
类型的参数 id
和 com.example.pojo.User
类型的返回值上。
三、MyBatis Collection标签
MyBatis 的 Collection 标签用于处理一对多或多对多的关系,它可以将一个 Java 集合中的元素作为 SQL 的参数,或者将查询结果映射为一个 Java 集合。
Collection 标签包括 foreach
和 where
两个子标签。其中,foreach
用于遍历 Java 集合,将集合中的元素作为 SQL 语句的参数进行传递;where
用于将多个条件语句组合成一个 SQL 语句的查询条件。
下面是一个基于 XML 的 Collection 标签的代码示例:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUsersByIds" parameterType="list" resultType="com.example.pojo.User">
select * from user where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>
在上面的代码中,我们使用 foreach
标签遍历了名为 list
的 Java 集合,并将每个集合元素 id
作为 SQL 语句的参数进行传递。
四、MyBatis框架详解
MyBatis 作为一个持久层框架,其主要作用是将 Java 对象与关系数据库中的数据进行映射。它的实现过程包括:
- 通过
SqlSessionFactoryBuilder
创建SqlSessionFactory
对象; - 通过
SqlSessionFactory
获取SqlSession
对象; - 通过
SqlSession
对象获取Mapper
接口的代理实例; - 调用
Mapper
接口方法,执行 SQL 语句。 下面是一个基于 XML 的 MyBatis 框架的代码示例:
<!-- mybatis-config.xml -->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<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/mapper/UserMapper.xml" />
</mappers>
</configuration>
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.example.pojo.User">
select * from user where id = #{id}
</select>
</mapper>
// Java代码
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
sqlSession.close();
五、MyBatis标签大全
MyBatis 提供了众多的标签来支持我们编写 SQL 查询语句,常用的标签包括:
select
:查询标签resultType
:查询结果类型标签parameterType
:参数类型标签insert
:插入标签update
:修改标签delete
:删除标签if
:条件判断标签where
:WHERE 查询条件标签set
:SET 更新字段标签foreach
:遍历集合标签choose
:多条件判断标签trim
:去除字符串首尾空格或逗号标签
六、MyBatis常用标签
下面是 MyBatis 中一些常用的标签及使用方法:
select
:常用于执行查询操作,一般与resultType
和parameterType
配合使用。
<!-- 查询用户信息 -->
<select id="getUserById" parameterType="int" resultType="com.example.pojo.User">
SELECT * FROM user WHERE id = #{id}
</select>
insert
:常用于插入数据操作,一般与parameterType
配合使用。
<!-- 插入用户信息 -->
<insert id="addUser" parameterType="com.example.pojo.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
update
:常用于更新数据操作,一般与parameterType
配合使用。
<!-- 更新用户信息 -->
<update id="updateUser" parameterType="com.example.pojo.User">
UPDATE user SET password = #{password} WHERE id = #{id}
</update>
delete
:常用于删除数据操作,一般与parameterType
配合使用。
<!-- 删除用户信息 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
if
:常用于条件判断语句中,可以根据参数来动态生成 SQL 语句。
<!-- 根据名称查询用户信息 -->
<select id="getUserByName" parameterType="java.lang.String" resultType="com.example.pojo.User">
SELECT * FROM user
<where>
<if test="name != null and name != ''">
AND name = #{name}
</if>
</where>
</select>
七、MyBatis源码详解
MyBatis 的源码是 Java 语言编写的,其结构包括:
org.apache.ibatis
:核心代码包org.apache.ibatis.mapping
:映射对象相关的代码包org.apache.ibatis.parsing
:解析 XML 文件相关的代码包org.apache.ibatis.session
:会话相关的代码包org.apache.ibatis.transaction
:事务相关的代码包org.apache.ibatis.type
:类型转换相关的代码包 MyBatis 源码中主要实现了以下功能:
- 通过配置对象
Configuration
,读取指定的 XML 配置文件并解析其内容; - 通过接口
SqlSession
,封装 JDBC 操作,并提供 SQL 语句的执行功能; - 通过接口
Executor
,管理SqlSession
与数据库连接的交互; - 通过
MapperProxyFactory
和MapperProxy
,为Mapper
接口生成代理实例,将 Java 接口与 XML 语句关联起来。