Mybatis的标签:if标签、where标签、choose,when标签、set标签
DAY24.1 Java核心基础
Mybatis的标签
if标签
<?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.shuwu.mapper.UserMapper" ><select id="getUser" parameterType="com.shuwu.entity.User" resultType="com.shuwu.entity.User">select * from user<if test="id !=null">id = #{id}</if><if test="name !=null">and name = #{name}</if><if test="pwd !=null">and pwd = #{pwd}</if><if test="email !=null">and email = #{email}</if></select>
</mapper>
有个问题就是这样的话没有id就会出现sql语法错误,我们发现在前面多了一个and,能否把and也设置为动态的呢,不出现在第一个参数的前面,可以用
where标签
<?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.shuwu.mapper.UserMapper" ><select id="getUser" parameterType="com.shuwu.entity.User" resultType="com.shuwu.entity.User">select * from user<where><if test="id !=null">id = #{id}</if><if test="name !=null">and name = #{name}</if><if test="pwd !=null">and pwd = #{pwd}</if><if test="email !=null">and email = #{email}</if></where></select>
</mapper>
完美解决
choose,when标签,和if标签的效果一样
<choose><when test="id!=null">id=#{id}</when><when test="name!=null">name=#{name}</when><when test="pwd != null">pwd=#{pwd}</when><when test="email != null">email=#{email}</when>
</choose>
等价于
<if test="id !=null">id = #{id}
</if>
<if test="name !=null">and name = #{name}
</if>
<if test="pwd !=null">and pwd = #{pwd}
</if>
<if test="email !=null">and email = #{email}
</if>
set标签,用于更新
<update id="updateUser" parameterType="com.shuwu.entity.User">update user<set><if test="name!=null">name= #{name},</if><if test="pwd!=null">pwd=#{pwd},</if><if test="email!=null">email=#{email}</if></set>where id=#{id}
</update>
MybatisPlus和Mybatis的优劣
特性/对比项 | MyBatis 优点 | MyBatis 缺点 | MyBatis-Plus 优点 | MyBatis-Plus 缺点 |
---|---|---|---|---|
SQL 控制力 | 手写 SQL,灵活可控,适合复杂查询 | SQL 需手动编写,重复工作多 | 支持自动 SQL(单表 CRUD),减少大量重复代码 | 对复杂查询或多表关联依赖手写 SQL |
学习成本 | 语法简单,配置清晰 | 动态 SQL 使用不当容易出错 | 入门更简单,封装更多功能,文档丰富 | 自动化程度高,对原理理解不足可能导致误用 |
开发效率 | 灵活但需大量 XML 或注解配置 | 增删改查都需手写 | 提供内建 CRUD、分页、Wrapper 条件构造器、代码生成器等,开发效率高 | 自定义操作仍需写 XML 或注解 SQL |
功能丰富性 | 原生支持基础功能 | 没有高级特性封装 | 内置分页、代码生成器、乐观锁、自动填充、审计字段等增强功能 | 封装特性过多,调试时可能不如原生直观 |
复杂查询处理能力 | 自定义 SQL 编写灵活,适合复杂查询 | 无内置支持,全部要自己维护 | 支持部分复杂查询封装,Wrapper 支持链式编程 | 超复杂场景仍需退回到原生 MyBatis 方式处理 |
社区和维护 | 成熟稳定,使用广泛 | 较少提供扩展能力 | 由 MyBatis 官方支持的衍生项目,活跃度高 | 需要关注版本兼容和扩展包更新 |