Mysql动态查询
if条件查询
格式: <if test=”条件判断”> 添加到sql的语句 </if>
where标签
简化SQL语句中WHERE条件判断
智能处理and和or
如果使用几个if条件标签,如果第一个条件不成立,那么该sql语句就不成立了.
把所有的if条件语句加入到where标签内,则会根据if语句成立是否添加where条件,若标签返回的内容是以and或者or开头的,会自动剔除.
案例:
<!-- 分类后根据关键字进行搜索 -->
<select id="getUserListByClassify" resultMap="userList">
SELECT user.*,role.roleName
FROM smbms_user user
INNER JOIN smbms_role role ON user.userRole=role.id
<where>
<if test="userName != null">
AND userName like CONCAT('%',#{userName},'%')
</if>
<if test="userRole != null">
AND userRole=#{userRole}
</if>
</where>
</select>
trim标签
属性:
prefix:前缀 如果有返回值,在标签前加的语句
suffix:后缀 如果有返回值,在标签后加的语句
prefixOverrides:对于trim包含内容的首部进行指定内容的忽略
sufixOverrides:对于trim包含内容的尾部进行指定内容的忽略
可以去除多余的关键字(自定义) where只能去除多余的and/or
<!-- 分类后根据关键字进行搜索 -->
<select id="getUserListByClassify" resultMap="userList">
SELECT user.*,role.roleName
FROM smbms_user user
INNER JOIN smbms_role role ON user.userRole=role.id
<trim prefix="where" prefixOverrides="and | or">
<if test="userName != null">
userName like CONCAT('%',#{userName},'%')
</if>
<if test="userRole != null">
and userRole=#{userRole}
</if>
</trim>
</select>
if+set进行修改(在实际开发中很少使用)
如何只对有值得参数进行修改,而不必每次都要获取整个对象.
案例:
<!-- 更新用户属性 -->
<update id="update" parameterType="User">
UPDATE smbms_user
<set>
<if test="userCode != null">userCode=#{userCode},</if>
<if test="userName!= null">userName=#{userName},</if>
<if test="userPassword!= null">userPassword=#{userPassword},</if>
<if test="gender!= null">gender=#{gender},</if>
<if test="birthday!= null">birthday=#{birthday},</if>
<if test="phone!= null">phone=#{phone},</if>
<if test="address!= null">address=#{address},</if>
<if test="modifyDate!= null">modifyDate=#{modifyDate}</if>
</set>
where id=#{id}
</update>
if+trim进行修改
添加条件判断修改
<!-- 更新用户属性 -->
<update id="update" parameterType="User">
UPDATE smbms_user
<trim prefix="set" prefixOverrides="," resultMap="userList">
<if test="userCode != null">userCode=#{userCode},</if>
<if test="userCode != null">userName=#{userName},</if>
<if test="userCode != null">userPassword=#{userPassword},</if>
<if test="userCode != null">gender=#{gender},</if>
<if test="userCode != null">birthday=#{birthday},</if>
<if test="userCode != null">phone=#{phone},</if>
<if test="userCode != null">address=#{address},</if>
<if test="userCode != null">modifyDate=#{modifyDate}</if>
</trim>
where id=#{id}
</update>
使用foreach进行复杂查询
迭代一个集合,通常用于in条件
属性:
item:表示集合中每一个元素进行迭代时候的别名
index:指定一个名称,表示迭代过程中,每次迭代到的位置.(可省略...)
open:表示语句以什么开始 例:open=”(”
separator:表示每次进行迭代之间以什么作为分隔符.
close:表示该语句以什么结束.
collection:最关键并最容易出错的属性,该属性必须指定,不同情况下,该属性的值也不一样,主要分三种:
- 若传入的参数为单参数且参数类型是一个List的时候,collection属性值为list.
- 若入参为单参数且参数类型为数组的时候,collection属性值为array
- 若传入的参数为多参数,就需要把他们封装为一个Map处理,属性值为Map的key.
案例:使用foreach实现 全选 删除
<!-- 删除用户 -->
<delete id="delete" parameterType="map">
DELETE FROM smbms_user WHERE id IN
<!-- 传入的参数为map集合时 collection=为map的key -->
<foreach collection="id" item="userId" open="(" separator="," close=")">
#{userId}
</foreach>
<!-- 传入的参数为数组时候 collection="array" -->
<foreach collection="array" item="userId" open="(" separator="," close=")">
#{userId}
</foreach>
<!-- 传入的参数为List时候 collection="list" -->
<foreach collection="list" item="userId" open="(" separator="," close=")">
#{userId}
</foreach>
</delete>
choose(when,otherwise)
类似于java的switch --case语句,跟JSTL的choose使用方式一样.
when元素:当test属性中条件满足的时候.就会输出when元素的内容.跟java中switch一样,依次向下执行,当有一个when中的test条件成立后,执行该语句立马跳出choose,所以choose中只有一个条件会输出.
MyBatis分页
获取数据的页数
<!-- 获取数据的总记录数 -->
<select id="getAllPages" resultType="Integer">
SELECT COUNT(`id`) AS pages FROM smbms_user
<trim prefix="where" prefixOverrides="and | or">
<if test="userRole != null">
userRole=#{userRole};
</if>
</trim>
</select>
注:if或when标签是针对JAVABEAN或者MAP的,进行判断的参数要么使用注解进行封装,或传入对象,或添加进map在进行传参数.
分页
<!-- 查询所有用户 并进行分页 -->
<select id="getAllUser" resultType="User">
SELECT user.*,role.roleName
FROM smbms_user user
INNER JOIN smbms_role role ON user.userRole=role.id
ORDER BY creationDate DESC LIMIT #{from},#{pageSize}
</select>
获取最后一条插入数据的id(自增主键)

Mysql动态查询的更多相关文章
- MYSQL动态查询拼接的表名的SQL脚本实现(MYSQL动态执行SQL脚本)
可以使用MYSQL的预处理逻辑:https://dev.mysql.com/doc/refman/8.0/en/sql-syntax-prepared-statements.html 例如: pr ...
- Mybatis动态查询
需要导入的jar包: 实体类User: package com.bjsxt.pojo; import java.io.Serializable; public class User implement ...
- JDBC动态查询MySQL中的表(按条件筛选)
动态查询实现按条件筛选.PreparedStatement 准备语句指定要查询的表头列,.setString()通过赋值指定行,.executeQuery()执行语句 在数据库test里先创建表sch ...
- 浅析Entity Framework Core2.0的日志记录与动态查询条件
前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core2.0的日志记录与动态查询条件 去 ...
- mysql死锁-查询锁表进程-分析锁表原因【转】
查询锁表进程: 1.查询是否锁表 show OPEN TABLES where In_use > 0; 2.查询进程 show processlist 查询到相对应的进程===然 ...
- WinForm动态查询
WinForm 动态查询 1. 使用场景 在对数据进行筛选, 包含多个筛选字段时适用. 2. 接口设计 /// <summary> /// 定义可作为追加到 WHERE 子句的控件接口 / ...
- Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm
这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了 ...
- springboot整合spring data jpa 动态查询
Spring Data JPA虽然大大的简化了持久层的开发,但是在实际开发中,很多地方都需要高级动态查询,在实现动态查询时我们需要用到Criteria API,主要是以下三个: 1.Criteria ...
- JDBC实现动态查询
一 概述 1.什么是动态查询? 从多个查询条件中随机选择若干个组合成一个DQL语句进行查询,这一过程叫做动态查询. 2.动态查询的难点 可供选择的查询条件多,组合情况多,难以一一列举. 3.最终查询语 ...
随机推荐
- Java线程:Callable和Future
接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果. Callable接口类似于Runnable,从名字就可以看出来了,但 ...
- scp、paramiko、rsync复制文件的区别
1.paramiko只能复制文件,而不能复制目录,复制时,已经存在的会被覆盖;要想复制目录,只能把目录里的文件一个一个复制过去 2.scp可以复制文件.目录,复制时,已经存在的会被覆盖:可以模糊匹配: ...
- chassis & power
机箱电源 ★ Main board ★ Voltage, connector ★ Hole ★ Ports ★ AT:12``*13.8`` or 12``*13`` 30.5cm*33cm ★ B ...
- POJ2773 Happy 2006【容斥原理】
题目链接: http://poj.org/problem?id=2773 题目大意: 给你两个整数N和K.找到第k个与N互素的数(互素的数从小到大排列).当中 (1 <= m <= 100 ...
- ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析
ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析 IoC框架最本质的东西:反射或者EMIT来实例化对象.然后我们可以加上缓存,或者一些策略来控制对象的生命周期,比如是否 ...
- WebSphere报错指南
看了下面的文章,泥坑会叫我标题党,没错我就是啊. 1.was日志路径 ${WebSphere根路径}/AppServer/profiles/AppSrv01/logs/,比如说我的路径就是/opt/I ...
- cmd启动Oracle服务和监听服务
启动数据库服务 net start oracleserviceorcl 启动数据库监听 lsnrctl start
- web 开发之js---js获取select标签选中的值
var obj = document.getElementByIdx_x(”testSelect”); //定位id var index = obj.selectedIndex; // 选中索引 va ...
- 如何理解scrapy Selector
1 scrapy Selector是什么 Selector对象本质上是对DOM tree的子树的抽象,这种抽象的目的是用于定位我们感兴趣的node.比如某次http response是一棵完整的DOM ...
- Yaf的性能
http://www.laruence.com/manual/yaf.bench.html 之前团队代码在ip的根下 http://192.168.6.212:83/js/common.js ; cd ...