MyBatis XML映射配置

MyBatis XML映射配置的作用

MyBatis的XML映射文件(通常为Mapper.xml)用于定义SQL语句、结果映射、缓存规则等,实现Java方法与数据库操作的解耦。核心功能包括:

  • SQL定义:编写动态SQL语句,支持条件分支、循环等逻辑。
  • 结果映射:将查询结果自动映射为Java对象(POJO)。
  • 参数绑定:将Java方法参数传递到SQL中。
  • 二级缓存:配置缓存策略提升性能。

XML映射配置代码详解

1. 基础结构示例
<?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">
    <!-- 查询用户 -->
    <select id="selectUserById" resultType="com.example.entity.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    
    <!-- 插入用户 -->
    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO user(name, email) VALUES(#{name}, #{email})
    </insert>
</mapper>

2. 核心标签说明
  • <select>/<insert>/<update>/<delete>:定义CRUD操作,id对应Java方法名,resultType指定返回类型。
  • #{param}:参数占位符,防止SQL注入。
  • 动态SQL:使用<if>, <foreach>等标签实现条件查询。
<select id="findUsers" resultType="User">
    SELECT * FROM user 
    <where>
        <if test="name != null">AND name = #{name}</if>
        <if test="email != null">AND email = #{email}</if>
    </where>
</select>

3. 结果映射(ResultMap)

处理复杂对象关系(如一对一、一对多):

<resultMap id="userResultMap" type="User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <collection property="orders" ofType="Order">
        <result property="orderId" column="order_id"/>
    </collection>
</resultMap>


面试常见问题与解答

问题1:MyBatis中#{}${}的区别?
  • #{}:预编译处理,参数以占位符?形式传入,防止SQL注入。
  • ${}:字符串拼接,直接替换到SQL中,可能引发注入风险,通常用于动态表名、列名。
问题2:如何实现分页查询?
  • XML配置:结合limit语句或分页插件(如PageHelper)。
<select id="selectByPage" resultType="User">
    SELECT * FROM user LIMIT #{offset}, #{pageSize}
</select>

问题3:ResultMap的作用?

解决数据库字段名与Java属性名不一致问题,支持嵌套对象映射(如关联查询)。

问题4:MyBatis的一级/二级缓存?
  • 一级缓存:SqlSession级别,默认开启。
  • 二级缓存:Mapper命名空间级别,需在XML中配置<cache/>,跨SqlSession共享。
问题5:动态SQL的常用标签?
  • <if>:条件判断。
  • <foreach>:遍历集合(如IN查询)。
  • <choose>/<when>/<otherwise>:多分支选择。

最佳实践建议

  • 复杂查询优先使用ResultMap而非resultType
  • 避免过度使用${},防止安全风险。
  • 分页场景推荐集成PageHelper等插件简化逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值