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

Mybatis动态SQL语句

1.if

使用动态SQL最常见情景是根据条件包含where子句的一部分

<select id="findByUser1" resultType="com.qcby.entity.User" parameterType="com.qcby.entity.User">select * from user<where><if test="username!=null">and  username=#{username}</if><if test="address!=null">and address = #{address}</if><if test="sex !=null">and sex = #{sex}</if></where>
</select>

 测试:

2.where

我们在写sql语句的where部分的时候为了保证sql语句的语法正确,我们会加上1=1的表达式,如果我们不想这么写的话,可以使用标签来代替

<select id="findByUser1" resultType="com.qcby.entity.User" parameterType="com.qcby.entity.User">select * from user<where><if test="username!=null">and  username=#{username}</if><if test="address!=null">and address = #{address}</if><if test="sex !=null">and sex = #{sex}</if></where>
</select>

测试:

 (1)不带条件:

(2)带条件:

 

 3.choose语句

有时候我们不想使用所有的条件而是想从多个条件中选择一个使用,针对这种情况MyBatis提供了choose元素,它有点像java中的Switch语句

<!--查询用户信息查询条件1.如果先根据sex查询2。如果sex为空就根据address查询3.如果address为空就根据id倒序输出-->
<select id="findByUser2" resultType="com.qcby.entity.User" parameterType="com.qcby.entity.User">select * from userwhere 1=1<choose><when test="sex!=null">and sex = #{sex}</when><when test="address!=null">and address=#{address}</when><otherwise>order by id desc</otherwise></choose>
</select>

 测试:

1.条件都不给(执行otherwise中的语句):

2.sex与address都不为空 

 3.sex为空,address不为空

 4.set

当我们需要是实现动态更新操作的时候,我们会使用set标签

<!--根据主键更新操作按需更新字段-->
<update id="update1" parameterType="com.qcby.entity.User">updateuser<set><if test="username!=null">username=#{username},</if><if test="sex!=null">sex=#{sex},</if><if test="address != null">address=#{address},</if></set>where id = #{id}
</update>

测试:

set标签会处理xml的更新语句

<select id="query" parameterType="com.qcby.entity.User" resultType="com.qcby.entity.User">select  * from  user<trim prefix="where" prefixOverrides="AND | OR"><if test="username!=null">and  username=#{username}</if><if test="address!=null">and address = #{address}</if><if test="sex !=null">and sex = #{sex}</if></trim>
</select>

 5.trim

trim标记是一个格式化标记,可以完成set或者where标记的功能

第一种使用:替代where标签

<trim>标签用于处理SQL语句的前缀和前缀覆盖:
  • prefix="where" 表示在内容前添加WHERE关键字
  • prefixOverrides="AND | OR" 表示自动去除内容开头多余的AND或OR
     
<select id="query" parameterType="com.qcby.entity.User" resultType="com.qcby.entity.User">select  * from  user<trim prefix="where" prefixOverrides="AND | OR"><if test="username!=null">and  username=#{username}</if><if test="address!=null">and address = #{address}</if><if test="sex !=null">and sex = #{sex}</if></trim>
</select>

 测试:

第二种使用方式:替代set标

prefixOverrides="AND | OR"

表示去掉内容末尾多于的","

<update id="update2" parameterType="com.qcby.entity.User">updateuser<trim prefix="set" suffixOverrides=","><if test="username!=null">username=#{username},</if><if test="sex!=null">sex=#{sex},</if><if test="address != null">address=#{address},</if></trim>where id = #{id}
</update>

测试结果:

 6.foreach

动态sql的另一个常用的使用场景是对集合的遍历

如: select * from user where id in (1,5,8,10)

<select id="query2" resultType="com.qcby.entity.User" parameterType="java.util.List">select*from userwhere 1=1<if test="list != null and list.size() > 0">and id in<foreach collection="list" open="(" close=")" separator="," item="id">#{id}</foreach></if>
</select>

 测试:

7.bind

bind元素允许在OGNL表达式以外创建一个变量,将该变量绑定到上下文中,可以后续使用

<select id="query1" parameterType="com.qcby.entity.User" resultType="com.qcby.entity.User"><bind name="usernameLike" value="'%'+username+'%'"/>select  * from  user<trim prefix="where" prefixOverrides="AND | OR"><if test="username!=null">and  username like #{usernameLike}</if><if test="address!=null">and address = #{address}</if><if test="sex !=null">and sex = #{sex}</if></trim>
</select>

 测试:

相关文章:

  • 学习路之php--性能优化
  • Redis 安装配置和性能优化
  • 解读《网络安全法》最新修订,把握网络安全新趋势
  • 【前端】vue3性能优化方案
  • 性能优化之SSR、SSG
  • K8S认证|CKS题库+答案| 2. Pod 指定 ServiceAccount
  • 基于SpringBoot和PostGIS的OSM时空路网数据入库实践
  • 从 ClickHouse、Druid、Kylin 到 Doris:网易云音乐 PB 级实时分析平台降本增效
  • Tensorborad
  • clickhouse常用语句汇总——持续更新中
  • 【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
  • HarmonyOS-ArkUI 自定义弹窗
  • echarts在uniapp中使用安卓真机运行时无法显示的问题
  • 第七十四篇 高并发场景下的Java并发容器:用生活案例讲透技术原理
  • 机器学习监督学习实战四:九种回归算法对波士顿房价数据进行回归预测和评估方法可视化
  • 如何轻松将视频从安卓设备传输到电脑?
  • 【机器学习】主成分分析 (PCA)
  • 视频汇聚平台EasyCVR“明厨亮灶”方案筑牢旅游景区餐饮安全品质防线
  • 新成果:GaN基VCSEL动态物理模型开发
  • Java Lambda表达式深度解析:从入门到实战
  • 深圳网站开发ucreator/南宁百度关键词推广
  • 工业园区管委会网站建设方案/网店推广实训系统
  • b2b2c商城开发/百度视频seo
  • iis7如何部署网站/数字营销
  • 西安注册网络公司/宁波seo搜索优化费用
  • 温州市建设工程管理网站/免费男女打扑克的软件