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>

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>

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. }

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. Luogu4782 【模板】2-SAT 问题(2-SAT)

    模板.注意若x=y不一定是废话,x=0或x=0表示x必须为0.以及数组开2n. #include<iostream> #include<cstdio> #include< ...

  2. 【GYM 102059】2018-2019 XIX Open Cup, Grand Prix of Korea

    vp了一场gym,我又开心地划水了. A. Coloring Roads 题意:给定一棵树,树边一开始都是无色的,每次操作可以把一个点到根的路径染成某个颜色,每次询问当前树上出现过某个次数的颜色种数. ...

  3. The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元

    题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Per ...

  4. 初探react(一)

    我们学习react首先是要了解react是什么,以及他的特点. React 是一个用于构建用户界面的 JAVASCRIPT 库,起源于 Facebook 的内部项目,用来架设 Instagram 的网 ...

  5. MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)

    图像二值化.反运算过程涉及到im2bw,imcomplement函数,反运算可以这么理解:原本黑的区域变为白的区域,白的区域变为黑的区域. 实现过程如下: close all; %关闭当前所有图形窗口 ...

  6. 02-HTML5新的input属性

    本节重点 HTML5 拥有多个新的表单输入类型.这些新特性提供了更好的输入控制和验证 本节介绍新的输入类型: date datetime datetime-local email month numb ...

  7. 2018.10.2浪在ACM 集训队第三次测试赛

    2018.10.26 浪在ACM 集训队第三次测试赛 今天是暴力场吗???????可怕 题目一览表 来源 考察知识点 完成时间 A 1275 珠心算测试 NOIP 普及组 2014 暴力??? 201 ...

  8. 继承之es5对比es6

    es5: 熟悉es5的童鞋们就知道es5的继承多么恶心~~ es5最经典的继承写法就是如下这样 1.写一个function,用this来扩展其值类属性 2.prototype添加其方法类属性 3.若整 ...

  9. WebLogic Server添加删除补丁操作【转】【补】

    WebLogic Server添加删除补丁操作 0 查看当前weblogic版本 [weblogic@localhost bin]$ cd /data/bea/weblogic11/wlserver_ ...

  10. fastreport报表中出现十字线

    问题描述:经常有十字线出现在报表中,出现在报表中不同的频带,在预览和运行时都会显示,不能点击和删除它. 解决方法:这是一个线控制,因太小而不能被渲染,所以fastreport使用十字线来表示其位置.通 ...