mybatis最推荐用xml映射文件写复杂动态sql,需合理组合、、、、/标签;xml路径和namespace必须与mapper接口严格一致,并包含标准xml声明和doctype。

用 XML 映射文件写复杂动态 SQL 是 MyBatis 最推荐、最稳定的方式。核心在于合理组合 <if></if>、<where></where>、<set></set>、<foreach></foreach> 和 <sql>/<include></include></sql> 这几类标签,避免手拼字符串带来的语法错误和 SQL 注入风险。
XML 文件位置与基础结构要对
Mapper 接口是 com.example.mapper.UserMapper,对应 XML 文件必须放在 src/main/resources/com/example/mapper/UserMapper.xml,且 <mapper namespace="com.example.mapper.UserMapper"></mapper> 必须严格一致。开头声明不能少:
多条件查询:用 + 组合
不用写 WHERE 1=1,<where></where> 会自动处理首尾 AND/OR —— 条件全空时连 WHERE 都不生成。
-
test表达式要严谨:字符串判空用username != null and username != '',集合判非空用ids != null and ids.size() > 0 - 模糊查询直接写
LIKE CONCAT('%', #{keyword}, '%'),别用字符串拼接 - 数值或日期比较可直接写
age >= #{minAge}或createTime >= #{beginTime}
示例:
动态更新:用 自动处理逗号和 SET 关键字
<set></set> 只有内部至少一个 <if></if> 为 true 时才生成 SET,并自动去掉末尾逗号。
- 每个字段更新都包在独立
<if></if>中,避免无条件覆盖 - 主键或不可更新字段(如 createTime)不要放进
<set></set>块里 - 建议配合
useGeneratedKeys="true"处理自增 ID
示例:
UPDATE users
WHERE id = #{id}
批量操作与代码复用: 和 /
批量插入/删除/IN 查询靠 <foreach></foreach>;重复字段列表、通用 WHERE 片段用 <sql></sql> 抽取。
-
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>生成(1,2,3) -
<sql id="userColumns">id, username, email, status, create_time</sql>定义公共字段 - 引用时写
<include refid="userColumns"></include>,改字段只需动一处
示例(批量删除):
DELETE FROM users WHERE id IN
#{id}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











