1.if标签

     <select id="queryByNameAndTelephone" parameterType="Customer"
resultType="Customer">
SELECT * FROM t_customer
WHERE 1=1
<if test="name!=null and name!=''">
AND NAME LIKE #{name}
</if>
<if test="telephone!=null and telephone!=''">
AND telephone LIKE #{telephone}
</if>
</select>

public List<Customer> queryByNameAndTelephone(Customer customer);

     /**
* if标签使用
*/
@Test
public void test1() {
SqlSession sqlSession = SessionUtils.getSession();
// getMapper(): 返回指定接口的动态代理的实现类对象
CustomerDao dao = sqlSession.getMapper(CustomerDao.class);
Customer c = new Customer();
//c.setName("%陈%");
c.setTelephone("%55%");
List<Customer> list = dao.queryByNameAndTelephone(c);
for (Customer customer : list) {
System.out.println(customer);
}
sqlSession.commit();
sqlSession.close();
}

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

     <select id="queryByNameAndTelephone" parameterType="Customer"
resultType="Customer">
SELECT * FROM t_customer
<!-- <where>:where条件,自动把第一个条件的and去掉 -->
<where>
<if test="name!=null and name!=''">
AND NAME LIKE #{name}
</if>
<if test="telephone!=null and telephone!=''">
AND telephone LIKE #{telephone}
</if>
</where>
</select>

3.sql片段

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

     <!-- sql片段 -->
<sql id="customerField">
id,name,gender,telephone
</sql>
     <select id="queryByNameAndTelephone" parameterType="Customer"
resultType="Customer">
SELECT
<include refid="customerField"/>
FROM t_customer
<!-- <where>:where条件,自动把第一个条件的and去掉 -->
<where>
<if test="name!=null and name!=''">
AND NAME LIKE #{name}
</if>
<if test="telephone!=null and telephone!=''">
AND telephone LIKE #{telephone}
</if>
</where>
</select>

4.foreach标签

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

public void deleteCustomerByIn(Customer customer);

     /**
* foreach标签
*/
@Test
public void test2() {
SqlSession sqlSession = SessionUtils.getSession();
// getMapper(): 返回指定接口的动态代理的实现类对象
CustomerDao dao = sqlSession.getMapper(CustomerDao.class);
Customer c = new Customer();
Integer[] ids = {23,24,25};
c.setIds(ids);
dao.deleteCustomerByIn(c);
sqlSession.commit();
sqlSession.close();
}

Customer.java:

 package cn.sm1234.domain;

 import java.util.Arrays;

 public class Customer {

     private Integer id;
private String name;
private String gender;
private String telephone; private Integer ids[]; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public Integer[] getIds() {
return ids;
}
public void setIds(Integer[] ids) {
this.ids = ids;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", gender=" + gender + ", telephone=" + telephone + ", ids="
+ Arrays.toString(ids) + "]";
} }

Mybatis进阶学习笔记——动态sql的更多相关文章

  1. Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)

    1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...

  2. Mybatis学习笔记-动态SQL

    概念 根据不同环境生成不同SQL语句,摆脱SQL语句拼接的烦恼[doge] 本质:SQL语句的拼接 环境搭建 搭建数据库 CREATE TABLE `blog`( `id` VARCHAR(50) N ...

  3. Mybatis进阶学习笔记——关系查询——一对多查询

    一个客户拥有多个订单 <resultMap type="User" id="UserOrderResultMap"> <id column=& ...

  4. Mybatis进阶学习笔记——关系查询——一对一查询

    用户和订单的需求 通过查询订单,查询用户,就是一对一查询 (1)自定义JavaBean(常用,推荐使用) <select id="queryOrderUser" result ...

  5. Mybatis进阶学习笔记——输出映射

    输出映射(例如一个方法的返回至使用什么类型去接收) 1.基本类型 <!-- 统计记录数 --> <select id="queryTotalCount" resu ...

  6. Mybatis进阶学习笔记——输入映射

    1.输入映射 输入映射支持的类型: 1) 基本的类型,int,String,double 等(*)2) JavaBean 类型(*)3) 包装JavaBean 类型(对象里面包含另一个对象) 1.1基 ...

  7. SQL反模式学习笔记21 SQL注入

    目标:编写SQL动态查询,防止SQL注入 通常所说的“SQL动态查询”是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. 反模式:将未经验证的输入作为代码执行 当向SQL查询的字符串中插入别 ...

  8. SSM框架之Mybatis(6)动态SQL

    Mybatis(6)动态SQL 1.动态SQL 出现原因:有些时候业务逻辑复杂时,我们的 SQL 是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了 1.1.if标签 我们根据实体类的不 ...

  9. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

随机推荐

  1. BZOJ2796[Poi2012]Fibonacci Representation——贪心+二分查找

    题目描述 给出一个正整数x,问x最少能由多少个Fibonacci数加减算出. 例如1070=987+89-5-1,因此x=1070时答案是4. 输入 第一行一个正整数q (q<=10),表示有q ...

  2. UOJ#192. 【UR #14】最强跳蚤

    题目链接 http://uoj.ac/problem/192 暑期课第二天 树上问题进阶 具体内容看笔记博客吧 题意 n个节点的树T 边有边权w 求满足(u, v)上所有边权乘积为完全平方数的路径有多 ...

  3. Powershell script to install Windows Updates (msu) from folder

    ######################################################### # # Name: InstallWindowsUpdates.ps1 # Auth ...

  4. 洛谷 P2774 方格取数问题 解题报告

    P2774 方格取数问题 题目背景 none! 题目描述 在一个有 \(m*n\) 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大. ...

  5. 设计模式 (二)——观察者模式(Observer,行为型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.观察者模式(Observer Pattern)属于行为型模式,在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都 ...

  6. 【学习笔记 边分树】【uoj400】【CTSC2018】暴力写挂

    题目 描述 ​ 有两棵树\(T\)和\(T'\),节点个数都为\(n\),根节点都为\(1\)号节点; ​ 求两两点之间 $$ \begin{align} depth(x) + depth(y) - ...

  7. 2018.10.19浪在ACM 集训队第一次测试赛

    2018.10.19浪在ACM 集训队第一次测试赛 待参考资料: [1]:https://blog.csdn.net/XLno_name/article/details/78559973?utm_so ...

  8. dijkstra 的优先队列优化

    既然要学习算法,就要学习到它的精髓,才能够使用起来得心应手. 我还是远远不够啊. 早就知道,dijkstra 算法可以用优先队列优化,我却一直不知道该怎样优化.当时,我的思路是这样的:假设有n个顶点, ...

  9. (erase) Mispelling4 hdu1984

    Mispelling4 Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  10. MUI 底部弹出的选择框

    大致是这样: 第一种方法:这种方法是使用5+的nativeUI原生动画 1)引入:mui.css或者mui.min.css mui.js或者mui.min.js也行 mui.picker.min.js ...