zoukankan      html  css  js  c++  java
  • Mybatis学习总结三(动态SQL)

    通过mybatis提供的各种标签方法实现动态拼接sql。

    一、if 和 where

     1 <select id="findUserList" parameterType="user" resultType="user">
     2         select * from user 
     3         <where>
     4         <if test="id!=null and id!=''">
     5         and id=#{id}
     6         </if>
     7         <if test="username!=null and username!=''">
     8         and username like '%${username}%'
     9         </if>
    10         </where>
    11 </select>

    where能够自动去掉第一个and


    二、foreach

    向sql传递数组或List,mybatis使用foreach解析,如下:

    需求

    传入多个id查询用户信息,用下边两个sql实现: 

    SELECT * FROM USERS WHERE username LIKE '%张%' AND (id =10 OR id =89 OR id=16)

    SELECT * FROM USERS WHERE username LIKE '%张%'  id IN (10,89,16)

     

    1 <if test="ids!=null and ids.size>0">
    2             <foreach collection="ids" open=" and id in(" close=")" item="id" separator="," >
    3                 #{id}
    4             </foreach>
    5 </if>

    三、SQL片段

    Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,如下:

    <!-- 传递pojo综合查询用户信息 -->
        <select id="findUserList" parameterType="user" resultType="user">
            select * from user 
            <where>
            <if test="id!=null and id!=''">
            and id=#{id}
            </if>
            <if test="username!=null and username!=''">
            and username like '%${username}%'
            </if>
            </where>
        </select>
    
    <sql id="query_user_where">
        <if test="id!=null and id!=''">
            and id=#{id}
        </if>
        <if test="username!=null and username!=''">
            and username like '%${username}%'
        </if>
    </sql>
    
    <!--使用include引用-->
    <select id="findUserList" parameterType="user" resultType="user">
            select * from user 
            <where>
            <include refid="query_user_where"/>
            </where>
    </select>

     tips:如果引用其它mapper.xml的sql片段,则在引用时需要加上namespace,<include refid="namespace.sql片段”/>

  • 相关阅读:
    Java动态绑定和静态绑定-多态
    Java方法内联
    Java反射机制及原理
    Jvm-类加载机制
    Zookeeper 源码解析-环境准备
    SpringMvc源码解析
    Java虚拟机的意义
    起跑线
    js动态生成html,onclick事件失效解决方法
    虚拟机能ping通,但是telnet某个端口却不行
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/10480020.html
Copyright © 2011-2022 走看看