1. MyBatis框架的条件映射
MyBatis框架允许在映射文件中使用动态SQL,以根据不同的条件生成不同的SQL语句。这主要通过<if>
、<choose>
、<when>
、<otherwise>
、<where>
、<set>
等元素实现。
示例
<select id="selectUsersByCondition" resultType="User"> | |
SELECT * FROM user | |
<where> | |
<if test="name != null and name != ''"> | |
AND name = #{name} | |
</if> | |
<if test="age != null"> | |
AND age = #{age} | |
</if> | |
</where> | |
</select> |
在上面的示例中,<where>
元素会智能地处理SQL语句中的AND
或OR
,当<where>
元素内的条件都不满足时,它会智能地省略WHERE
子句。<if>
元素用于判断传入的参数是否满足某个条件,如果满足则包含相应的SQL片段。
2. MyBatis框架的结果映射
结果映射是MyBatis框架中非常重要的一部分,它负责将数据库查询结果映射到Java对象上。MyBatis支持简单的类型映射(如int、String等)、复杂类型映射(如JavaBean)以及集合映射(如List、Set等)。
示例
<resultMap id="userResultMap" type="User"> | |
<id property="id" column="user_id"/> | |
<result property="name" column="user_name"/> | |
<result property="age" column="user_age"/> | |
<association property="address" column="address_id" javaType="Address" foreignColumn="id" resultMap="addressResultMap"/> | |
</resultMap> | |
<select id="selectUserWithAddress" resultMap="userResultMap"> | |
SELECT * FROM user u | |
LEFT JOIN address a ON u.address_id = a.id | |
WHERE u.id = #{userId} | |
</select> |
在上面的示例中,<resultMap>
元素定义了一个结果映射,将数据库中的列映射到Java对象的属性上。<association>
元素用于处理关联查询,它指定了如何加载关联对象(如Address)。
3. MyBatis框架的增删改查
MyBatis框架支持基本的CRUD(增删改查)操作。
示例
-
查询(使用
<select>
元素)
<select id="selectUserById" resultType="User"> | |
SELECT * FROM user WHERE id = #{id} | |
</select> |
-
插入(使用
<insert>
元素)
<insert id="insertUser" parameterType="User"> | |
INSERT INTO user (name, age) VALUES (#{name}, #{age}) | |
</insert> |
-
更新(使用
<update>
元素)
<update id="updateUser" parameterType="User"> | |
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} | |
</update> |
-
删除(使用
<delete>
元素)
<delete id="deleteUser" parameterType="int"> | |
DELETE FROM user WHERE id = #{id} | |
</delete> |
4. MyBatis框架的缓存
MyBatis提供了两级缓存:一级缓存(SqlSession级别的缓存)和二级缓存(Mapper级别的缓存)。
- 一级缓存:默认开启,每个SqlSession都有一个一级缓存。当执行相同的SQL语句时,会先从一级缓存中查找结果,如果找不到再从数据库中查询。当SqlSession关闭或清理时,一级缓存将被清空。
- 二级缓存:需要手动开启和配置,通常用于多个SqlSession之间共享数据。二级缓存是基于Mapper的,不同的Mapper使用不同的二级缓存。当某个Mapper执行查询操作时,会先从二级缓存中查找结果,如果找不到再从数据库中查询,并将结果存入二级缓存。
示例(二级缓存配置)
在mybatis-config.xml
中配置全局的二级缓存:
<settings> | |
<setting name="cacheEnabled" value="true"/> | |
</settings> |
在Mapper XML文件中启用二级缓存:
<mapper namespace="com.example.mapper.UserMapper"> | |
<cache/> | |
<!-- 其他SQL语句 --> | |
</mapper> |
注意:使用二级缓存时,需要确保查询的SQL语句和参数完全相同,否则无法从二级缓存中获取结果。此外,对于频繁更新的数据,不建议使用二级缓存