MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。
在 MyBatis 中,XML 配置文件是用来定义 SQL 映射和结果的。它通常包含以下几个部分:
mapper
:定义 SQL 映射,包括 SQL 语句、参数类型、返回值类型等。resultMap
:定义结果集的映射规则,包括列名、属性名、类型等。typeAliases
:定义别名,用于简化 Java 类型名称。
下面是一个 MyBatis 的 XML 配置文件的例子:
<?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">
<!-- 插入数据 -->
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO user (username, password, email)
VALUES (#{username}, #{password}, #{email})
</insert>
<!-- 根据ID查询数据 -->
<select id="getUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- 查询所有数据 -->
<select id="getAllUsers" resultType="com.example.model.User">
SELECT * FROM user
</select>
<!-- 更新数据 -->
<update id="updateUser" parameterType="com.example.model.User">
UPDATE user SET username = #{username}, password = #{password}, email = #{email} WHERE id = #{id}
</update>
<!-- 删除数据 -->
<delete id="deleteUserById">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
在这个例子中,我们定义了一个 UserMapper,它包含了一些基本的 CRUD 操作。这些操作通过 XML 中的 <insert>
, <select>
, <update>
, <delete>
标签来定义。这些标签的属性如 id
、parameterType
和 resultType
是必要的。id
是唯一标识符,parameterType
是传入参数的类型,resultType
是返回结果的类型。其他一些属性如 parameterMap
、resultMap
、sql
等则是可选的。
1. 参数映射
在上述例子中,我们使用了parameterType
属性来指定传入参数的类型。MyBatis 支持多种类型的参数映射,包括:
- 基本类型:如 int, long, String 等。
- JavaBean 或 POJO(Plain Old Java Objects):可以为多个列映射到一个 JavaBean 属性。
- Map:传入一个包含键值对的 Map,其中键是列名,值是对应的数据。
- 数组或集合:可以传入数组或 List 类型的参数。
2. 结果映射
在 SQL 查询中,可以使用resultType
属性来指定返回结果的类型。MyBatis 支持多种结果映射方式:
- 单个列映射到单一属性:直接映射列名到属性。
- 单个列映射到多个属性:例如,将一个字符串列分割成多个部分并映射到多个属性。
- 多个列映射到单个属性:例如,将多个字符串列合并为一个长字符串。
- 多个列映射到多个属性:这是默认的结果映射方式,直接将列名映射到属性名。
3. 结果映射高级特性
- resultMap:更复杂的映射规则可以使用 resultMap 来定义,它可以包含列名、属性名、类型、结果类型等详细信息。
- association 和 collection:这些标签可以用于处理一对一、一对多或多对多关系。
4. XML 配置文件的位置
MyBatis 的 XML 配置文件通常放在项目的资源文件夹下,例如 src/main/resources
。文件名通常为 mybatis-config.xml
,但可以根据项目需要自定义。
5. 动态 SQL
MyBatis 还支持动态 SQL,允许根据条件构建不同的 SQL 语句。例如,可以使用 <if>
、<choose>
、<when>
、<otherwise>
等标签来根据条件动态生成 SQL 语句