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. pip download 只下载不安装命令的使用方法

    比如下载 django 1.8.11版本和simplejson 3.14.0版本的包 那么就将所需的包写入  requirement.txt 那么我的requirement.txt内容就是: djan ...

  2. JSP 和 Servlet 的工作原理和生命周期

    JSP的英文名叫Java Server Pages,翻译为中文是Java服务器页面的意思,其底层就是一个简化的Servlet设计,是由sum公司主导参与建立的一种动态网页技术标准.Servlet 就是 ...

  3. MT【191】阿波罗尼乌斯圆

    已知$f(x)=2\sqrt{(\cos x+\frac{1}{2})^2+\sin^2 x}-\sqrt{\cos^2 x+(\sin x-\frac{1}{2})^2}$,若$m\ge f(x)$ ...

  4. BZOJ 1195: [HNOI2006]最短母串

    1195: [HNOI2006]最短母串 Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 1346  Solved: 450[Submit][Status ...

  5. Mysql的命令总结

    Mysql常用命令 启动 net start mysql 关闭 net stop mysql 连接mysql mysql -uroot -ppssword mysql -uroot -P3307 -p ...

  6. 洛谷P3195 玩具装箱TOY

    题目大意: 有n个数,要将他们分成若干段,每一段的cost定义为: cost=r-l+ΣCk (k∈[r,l]) 该段的最终花费是:(cost-L)^2; 给出L,n,C(1~n),总共的最小花费. ...

  7. ReactNative系列组件用法(一)

    首先我们来认识view 改变一些特性,再来看看项目的变化 我们新增flex布局的一些属性,再来看看项目的变化 接下来我们来看看如果获取屏幕的分辨率 关于图片的用法,reactNative这里也是很神奇 ...

  8. 中文参考文献如何导入到endnote中

    比如我想在文献中插入“2型糖尿病患者并发脑卒中的前瞻性研究”这篇参考文献,在主题里面输入文献标题,勾选我们要找的文献,点击“导出/参考文献” 导出来以后,点击屏幕右下角界面的“导出/参考文献”,下图红 ...

  9. Linux下Shell去除空行的方法

    1.用grep命令 grep -v “^$” 文件名 2.用sed命令 cat 文件名 | sed ‘/^$/d' 3.用awk命令 cat 文件名 | awk ‘{if($0!=”")pr ...

  10. win10重复安装

    使用大白菜启动盘装win10的时候,一直循环的重启然后设置,然后再重启,再设置.陷入了死循环. 解决办法:在自定义快捷键那个界面按 Ctrl+Shift+F3 .这是直接进入桌面的快捷键.