zoukankan      html  css  js  c++  java
  • Mybatis进阶学习笔记——动态sql

    1.if标签

     1     <select id="queryByNameAndTelephone" parameterType="Customer"
     2         resultType="Customer">
     3         SELECT * FROM t_customer
     4         WHERE 1=1
     5         <if test="name!=null and name!=''">
     6             AND NAME LIKE #{name}
     7         </if>
     8         <if test="telephone!=null and telephone!=''">
     9             AND telephone LIKE #{telephone}
    10         </if>
    11     </select>

     1 public List<Customer> queryByNameAndTelephone(Customer customer); 

     1     /**
     2      * if标签使用
     3      */
     4     @Test
     5     public void test1() {
     6         SqlSession sqlSession = SessionUtils.getSession();
     7         // getMapper(): 返回指定接口的动态代理的实现类对象
     8         CustomerDao dao = sqlSession.getMapper(CustomerDao.class);
     9         Customer c = new Customer();
    10         //c.setName("%陈%");
    11         c.setTelephone("%55%");
    12         List<Customer> list = dao.queryByNameAndTelephone(c);
    13         for (Customer customer : list) {
    14             System.out.println(customer);
    15         }
    16         sqlSession.commit();
    17         sqlSession.close();
    18     }

    2.where标签:自动把第一个条件的and去掉

     1     <select id="queryByNameAndTelephone" parameterType="Customer"
     2         resultType="Customer">
     3         SELECT * FROM t_customer
     4         <!-- <where>:where条件,自动把第一个条件的and去掉 -->
     5         <where>
     6             <if test="name!=null and name!=''">
     7                 AND NAME LIKE #{name}
     8             </if>
     9             <if test="telephone!=null and telephone!=''">
    10                 AND telephone LIKE #{telephone}
    11             </if>
    12         </where>
    13     </select>

    3.sql片段

    作用:把相同的sql片段抽取出来

    1     <!-- sql片段 -->
    2     <sql id="customerField">
    3         id,name,gender,telephone
    4     </sql>
     1     <select id="queryByNameAndTelephone" parameterType="Customer"
     2         resultType="Customer">
     3         SELECT
     4         <include refid="customerField"/>
     5         FROM t_customer
     6         <!-- <where>:where条件,自动把第一个条件的and去掉 -->
     7         <where>
     8             <if test="name!=null and name!=''">
     9                 AND NAME LIKE #{name}
    10             </if>
    11             <if test="telephone!=null and telephone!=''">
    12                 AND telephone LIKE #{telephone}
    13             </if>
    14         </where>
    15     </select>

    4.foreach标签

     1     <delete id="deleteCustomerByIn" parameterType="Customer">
     2         DELETE FROM t_customer WHERE 
     3         <!-- 
     4             collection: 需要遍历的属性
     5             item: 遍历的变量
     6             open: 循环前面的 sql语句
     7             close: 循环后面的 sql语句
     8             separator:分隔符
     9             
    10             id IN(1,2,3)
    11          -->
    12          <!-- id为ids数组中的每个元素 -->
    13         <foreach collection="ids" item="id" open="id IN (" close=")" separator=",">
    14             #{id}
    15         </foreach>
    16     </delete>

     1 public void deleteCustomerByIn(Customer customer); 

     1     /**
     2      * foreach标签
     3      */
     4     @Test
     5     public void test2() {
     6         SqlSession sqlSession = SessionUtils.getSession();
     7         // getMapper(): 返回指定接口的动态代理的实现类对象
     8         CustomerDao dao = sqlSession.getMapper(CustomerDao.class);
     9         Customer c = new Customer();
    10         Integer[] ids = {23,24,25};
    11         c.setIds(ids);
    12         dao.deleteCustomerByIn(c);
    13         sqlSession.commit();
    14         sqlSession.close();
    15     }

    Customer.java:

     1 package cn.sm1234.domain;
     2 
     3 import java.util.Arrays;
     4 
     5 public class Customer {
     6 
     7     private Integer id;
     8     private String name;
     9     private String gender;
    10     private String telephone;
    11     
    12     private Integer ids[];
    13     
    14     public Integer getId() {
    15         return id;
    16     }
    17     public void setId(Integer id) {
    18         this.id = id;
    19     }
    20     public String getName() {
    21         return name;
    22     }
    23     public void setName(String name) {
    24         this.name = name;
    25     }
    26     public String getGender() {
    27         return gender;
    28     }
    29     public void setGender(String gender) {
    30         this.gender = gender;
    31     }
    32     public String getTelephone() {
    33         return telephone;
    34     }
    35     public void setTelephone(String telephone) {
    36         this.telephone = telephone;
    37     }
    38     public Integer[] getIds() {
    39         return ids;
    40     }
    41     public void setIds(Integer[] ids) {
    42         this.ids = ids;
    43     }
    44     @Override
    45     public String toString() {
    46         return "Customer [id=" + id + ", name=" + name + ", gender=" + gender + ", telephone=" + telephone + ", ids="
    47                 + Arrays.toString(ids) + "]";
    48     }
    49     
    50     
    51 }
  • 相关阅读:
    Python 集合
    Python sorted()
    CodeForces 508C Anya and Ghosts
    CodeForces 496B Secret Combination
    CodeForces 483B Friends and Presents
    CodeForces 490C Hacking Cypher
    CodeForces 483C Diverse Permutation
    CodeForces 478C Table Decorations
    CodeForces 454C Little Pony and Expected Maximum
    CodeForces 313C Ilya and Matrix
  • 原文地址:https://www.cnblogs.com/116970u/p/10164632.html
Copyright © 2011-2022 走看看