当前位置: 首页 > news >正文

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>

image-20250414151443577

有个问题就是这样的话没有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>

完美解决

image-20250414151653623

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 官方支持的衍生项目,活跃度高需要关注版本兼容和扩展包更新

http://www.xdnf.cn/news/538867.html

相关文章:

  • 【vs2022的C#窗体项目】打开运行+sql Server改为mysql数据库+发布
  • React学习———Immer 和 use-immer
  • 编译zstd
  • 《垒球百科全书》垒球是什么·棒球1号位
  • `asyncio.gather()` 是什么
  • 深度强化学习框架DI-engine
  • Java大师成长计划之第27天:RESTful API设计与实现
  • 算法竞赛 Java 高精度 大数 小数 模版
  • MySQL故障排查域生产环境优化
  • IIR 巴特沃斯II型滤波器设计与实现
  • React Contxt详解
  • 孤立森林和随机森林主要区别
  • Java实现:如何在文件夹中查找重复文件
  • 如何从容应对面试?
  • vi实时查看日志
  • UA 编译和建模入门教程(zhanzhi学习笔记)
  • 基于大模型的脑出血全流程预测系统技术方案大纲
  • 物联网安全技术的最新进展与挑战
  • 深入理解pip:Python包管理的核心工具与实战指南
  • (1-5)Java 常用工具类、包装类、StringStringBuilderString
  • 计算机存储与数据单位的核心定义及换算逻辑
  • 学习黑客 PowerShell 详解
  • 相机Camera日志分析之十五:高通相机Camx 基于预览1帧的ConfigureStreams Usecase完整过程日志分析详解
  • 辅助驾驶平权与出海,Mobileye的双重助力
  • Cursor 模型深度分析:区别、优缺点及适用场景
  • IOS 创建多环境Target,配置多环境
  • GK的作用是什么?
  • C语言指针深入详解(三):数组名理解、指针访问数组、一维数组传参的本质、冒泡排序、二级指针、指针数组、指针数组模拟二维数组
  • opencascade如何保存选中的面到本地
  • 使用MCP驱动IDA pro分析样本