if+where: 用于查询操作,where标签可以智能判断是否添加and、or、where关键词
 示例:
 <select id="findByParam" resultType="com.accp.pojo.User">
  select * from user
  <where>
   <if test="gender!=null">
    gender=#{gender}
   </if>
   <if test="userName!=null">
    and userName like CONCAT('%',#{userName},'%')
   </if>
  </where>
 </select>

if+set: 用于更新操作,set标签可以智能判断每个if条件后是否添加","
 示例:
 <update id="updateUser" parameterType="com.accp.pojo.User">
  update user
  <set>
   <if test="userName != null">
    userName = #{userName},
   </if>
   <if test="phone != null">
    phone = #{phone},
   </if>
   <if test="address != null">
    address = #{address},
   </if>
   <if test="gender != null">
    gender = #{gender}
   </if>
  </set>
  where id = #{id}
 </update>

trim:
 prefix:前缀
 suffix:后缀
 prefixOverrides:自动判断子语句if前面的条件语句是否添加或不添加其值
    suffixOverrides:自动判断子语句if后边的条件语句是否添加或不添加其值
      示例:
 <update id="updateUser" parameterType="com.accp.pojo.User">
  update user
  <trim prefix="set " suffixOverrides="," suffix=" where id = #{id}" >
   <if test="userName != null">
    userName = #{userName},
   </if>
   <if test="phone != null">
    phone = #{phone},
   </if>
   <if test="address != null">
    address = #{address},
   </if>
   <if test="gender != null">
    gender = #{gender}
   </if>
  </trim>
 </update>

foreach: 更新操作,或者用在insql语句中
 collection:传进来的参数类型
     List集合写成:”list”;
    数组写成:”array”;
    其他复杂类型写成:参数使用map 这里写map的key
    item:临时变量(每一个迭代元素的别名)
    open:该语句以什么开始
    close:该语句以什么结束
    separator:多个迭代元素以什么分隔(符)
 示例:
 <select id="findByIds" resultType="com.accp.pojo.User">
  select * from user where id in
  <foreach collection="list" item="usreIds" open="(" separator="," close=")">
   #{usreIds}
  </foreach>
 </select>

<select id="getUserListById_array" resultType="com.accp.pojo.User">
  select * from  user where id in
  <foreach collection="array" item="ids" open="(" separator="," close=")">
   #{ids}
  </foreach>
 </select>

choose:一般使用在多个条件时只想查询其中一个
 when
 otherwise

示例:
 <select id="findByParams" resultType="com.accp.pojo.User">
  select * from user where 1=1
  <choose>
   <when test="userName!=null">
    and userName like CONCAT('%',#{userName},'%')
   </when>
   <when test="phone!=null">
    and phone = #{userName}
   </when>
   <otherwise>
    and address like CONCAT('%',#{address},'%')
   </otherwise>
  </choose>
 </select>

动态SQL查询的更多相关文章

  1. SQL Server-聚焦深入理解动态SQL查询(三十二)

    前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...

  2. SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?

    前言 之前我们已经讨论过动态SQL查询呢?这里为何再来探讨一番呢?因为其中还是存在一定问题,如标题所言,很多面试题也好或者有些博客也好都在说在执行动态SQL查询时sp_executesql的性能比ex ...

  3. 一步步学Mybatis-怎么样实现动态SQL查询(6)

    上一章我们已经讲完了关于Mybatis的分页用法,其实MyBatis 还具有的一个强大的特性之一通常是它的动态 SQL 能力. 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 S ...

  4. 获取动态SQL查询语句返回值(sp_executesql)

    在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可. 而今天的一个存储过程却需要获取动态SQL的查询结果. 需求描述:在某表中根据Id值 ...

  5. SQL Server 2012 - 动态SQL查询

    动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...

  6. Mybatis中多个参数的问题&&动态SQL&&查询结果与类的对应

    ### 1. 抽象方法中多个参数的问题 在使用MyBatis时,接口中的抽象方法只允许有1个参数,如果有多个参数,例如: Integer updatePassword( Integer id, Str ...

  7. ibatis 中动态SQL查询和动态标签嵌套的使用

    ibatis 动态查询对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系映射(O/R Mapping)解 ...

  8. mybatis 动态SQL查询总结

    背景 ××项目需要提供系统部分函数第三方调用接口,基于安全性和避免暴露数据库表信息的基础上进行函数接口的设计,根据第三方调用身份的权限提供某张表的自定义集合.本项目基于mybatis的持久层框架,支持 ...

  9. MyBatis 动态SQL查询,多条件,分页

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...

  10. SpringBoot中JPA使用动态SQL查询

    https://www.jianshu.com/p/f72d82e90948 可以重点关注方法二,把原生sql传入数据库去查询 好处是:更加灵活坏处是:拼接sql比较痛苦,也容易出问题,比如拼接的sq ...

随机推荐

  1. python generator与coroutine

    python  generator与coroutine 协程 简单介绍 协程,又称微线程,纤程,英文名Coroutine.协程是一种用户态的轻量级线程,又称微线程.协程拥有自己的寄存器上下文和栈,调度 ...

  2. 如何实现LRU算法?

    1.什么是LRU算法? LRU是一种缓存淘汰机制策略. 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新的内容腾位置.但是要删除哪些内容呢?我们肯定希望删掉那些没有用的缓存,而把有用的数据继续 ...

  3. 嵊州D3T1 山魔 烙饼问题

    嵊州D3T1 山魔 有n 座山,每座山有南北两面. 每一天,一些山的某一面(不一定相同) 会受到山魔的袭击. 但是山魔一天最多只会袭击k座山. 当每座山的每一面都被袭击过后,山魔就会离开. 那么至少要 ...

  4. Tomcat配置解析

    Tomcat文件配置 tomcat解压后目录 bin:可执行文件(startup.bat shutdown.bat) conf:配置文件(server.xml) lib:tomcat依赖的jar文件 ...

  5. springboot自动装配(2)---实现一个自定义自动装配组件

    对于springboot个人认为它就是整合了各种组件,然后提供对应的自动装配和启动器(starter),基于这个流程去实现一个定义的装配组件 还是这张图 一.创建自己的自动配置工程, spring.f ...

  6. springboot 整合mybatis,pagehelper。测试类。

    报名立减200元.暑假直降6888. 遇到的异常. 1.这是在使用mybatis成功连接数据库后,通过service层调用dao层出现的异常. 异常原因:在启动类上面的注解@MapperScan没有指 ...

  7. 教你发布vue+.netCore项目到服务器

    最近一直在做项目,发布部署的事情都是同事或者老大做的,无奈什么事都要自己尝试经历后才能记住,所以发布的事情轮到我了,由于是第一次发布部署项目到一个新的服务器环境,难免会遇到各种各样的问题,总结下来,希 ...

  8. Worker-Thread设计模式

    import java.util.Random; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent. ...

  9. py+selenium一个可被调用的登录测试脚本【待优化】

    大部分系统现在都有登录页面,本文主要尝试写一个登录的测试脚本,及另一个脚本调用它登录测试已登录的页面模块. 目标: 登录脚本:从excel里获取登录的测试数据(包括异常测试)→执行登录脚本→输出是否通 ...

  10. c++小游戏——贪吃蛇

    #include #include #include #include #include <conio.h> #include #include <windows.h> usi ...