zoukankan      html  css  js  c++  java
  • 动态sql

    1、if

    需求:若有为空的字段,则不加入数据库查询语句

    mapper接口类:

    List<Address> queryByCountryCity(@Param("state") String state, @Param("city") String city);

    mapper xml文件:

     1 <select id="queryByCountryCity" resultType="com.th.pojo.Address">
     2     select * from address
     3     where
     4     1=1
     5     <if test="state != null and state != ''">
     6           and state = #{state}  //不为空,执行该句
     7     </if>
     8     <if test="city != null">
     9           and city = #{city}
    10     </if>
    11 </select>

    2、where

    需求:加入where元素,进行筛选,where元素可以自动过滤前置的多余的and

    mapper接口类:

    List<Address> queryByCountryCity(@Param("state") String state, @Param("city") String city);

    mapper xml文件:

     1  <select id="queryByCountryCity" resultType="com.th.pojo.Address">
     2         select * from address
     3         <where>
     4             <if test="state != null and state != ''">
     5                 and state = #{state}
     6             </if>
     7             <if test="city != null">
     8                 and city = #{city}
     9             </if>
    10         </where>
    11     </select>

    3、set

    需求:加入set元素,进行更新时的参数设置,set元素可以自动去除多余的后置“,”(逗号)

    mapper接口类:

    int update(Address address);

    mapper xml文件:

     1   <update id="update" parameterType="com.th.pojo.Address">
     2         update address
     3         <set>
     4             <if test = "name != null and name != ''">
     5                 name = #{name},
     6             </if>
     7             <if test = "city != null and city != ''">
     8                 city = #{city},
     9             </if>
    10             <if test = "state != null and state != ''">
    11                 state = #{state},
    12             </if>
    13             <if test = "zip != null and zip != ''">
    14                 zip = #{zip},
    15             </if>
    16             <if test = "country != null and country != ''">
    17                 country = #{country}
    18             </if>
    19         </set>
    20 
    21         <where>
    22             ADDSID = #{addsId}
    23         </where>
    24     </update>

    4、trim

    属性:prefix、prefixOverrides、suffix、suffixOverrides

    需求:可以综合处理前面或者后面的符号,只需要通过overrides去声明可能会多一个符号;prefix可以自动添加一个前缀

    mapper接口类:

     List<Address> queryTrim(Address address);

    mapper xml文件:

     1  <select id="queryTrim" resultType="com.th.pojo.Address">
     2       select * from address
     3         <trim prefix="where" suffixOverrides="AND">
     4             <if test="name != null and name != ''">
     5                    NAME = #{name} and
     6             </if>
     7             <if test="city != null and city != ''">
     8                   CITY = #{city} and
     9             </if>
    10             <if test="state != null and state != ''">
    11                        STATE = #{state} and
    12             </if>
    13             <if test="zip != null and zip != ''">
    14                  ZIP = #{zip} and
    15             </if>
    16             <if test="country != null and country != ''">
    17                   COUNTRY = #{country} and
    18             </if>
    19           </trim>
    20       </select>

    5、foreach

    需求:类似sql语句中的包含in的查询语句,在mybatis的动态sql语句中写法需要用到foreach遍历in中的数据

    mapper接口类:

    List<Address> queryByIds(List<Integer> list);

    对比mysql查询语句

    select * from address where ADDSID IN(1,3);

    mapper xml文件:

    1  <!--
     2         foreach
     3         collection 描述集合 list set map
     4         open 是in后面的sql语句的拼接以什么开头
     5         close 以什么结尾
     6         item 是具体的一个数据项
     7         separator item之间的分隔符
     8         index 标号,对应item在collection中的下标
     9     -->
    10     <select id="queryByIds" resultType="com.th.pojo.Address">
    11         select * from address
    12         <where>
    13             ADDSID in
    14             <foreach collection="list" open="(" close=")" item="item" separator="," index="index">
    15                 #{item} + #{index}
    16             </foreach>
    17         </where>
    18     </select>

    6、like、bind

    需求:模糊查询

    mapper接口类:

    List<Address> queryLike(@Param("city") String city);

    mapper xml文件:

     1  <!--
     2         模糊查询
     3         1、在应用程序层直接传入拼接好的,如%city%
     4         2、通过mysql的函数concat
     5         city like concat("%",#{city},"%")
     6         3、通过bind标签对参数重新进行绑定
     7         <bind name="_city" value="'%'+city+'%'"/>
     8         city like #{_city}
     9         4、city like "%"#{city}"%"
    10     -->
    11     <select id="queryLike" resultType="com.th.pojo.Address">
    12        
    13         select * from address
    14         <where>
    15             city like "%"#{city}"%"
    16         </where>
    17     </select>

    7、sql、include

    需求:查询指定列名

    mapper接口类:

    List<Address> listAll();

    mapper xml文件:

     1  <!--
     2         将常用的列抽取成一个sql片段,以便被引用
     3     -->
     4     <sql id="baseColumn">
     5         country,city,state
     6     </sql>
     7  <select id="listAll" resultType="com.th.pojo.Address">
     8         select
     9         <include refid="baseColumn"/>
    10         from address
    11     </select>
  • 相关阅读:
    poj 1511Invitation Cards
    hust 1608Dating With Girls
    sdibt 2128Problem A:Convolution Codes
    hdu 1325Is It A Tree?
    poj 2240Arbitrage
    hdu 2818Building Block
    poj 1789Truck History
    poj 1125Stockbroker Grapevine
    展望未来
    告别过去
  • 原文地址:https://www.cnblogs.com/slfh/p/10039675.html
Copyright © 2011-2022 走看看