Mybatis进阶学习笔记——动态sql
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的更多相关文章
- Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)
1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...
- Mybatis学习笔记-动态SQL
概念 根据不同环境生成不同SQL语句,摆脱SQL语句拼接的烦恼[doge] 本质:SQL语句的拼接 环境搭建 搭建数据库 CREATE TABLE `blog`( `id` VARCHAR(50) N ...
- Mybatis进阶学习笔记——关系查询——一对多查询
一个客户拥有多个订单 <resultMap type="User" id="UserOrderResultMap"> <id column=& ...
- Mybatis进阶学习笔记——关系查询——一对一查询
用户和订单的需求 通过查询订单,查询用户,就是一对一查询 (1)自定义JavaBean(常用,推荐使用) <select id="queryOrderUser" result ...
- Mybatis进阶学习笔记——输出映射
输出映射(例如一个方法的返回至使用什么类型去接收) 1.基本类型 <!-- 统计记录数 --> <select id="queryTotalCount" resu ...
- Mybatis进阶学习笔记——输入映射
1.输入映射 输入映射支持的类型: 1) 基本的类型,int,String,double 等(*)2) JavaBean 类型(*)3) 包装JavaBean 类型(对象里面包含另一个对象) 1.1基 ...
- SQL反模式学习笔记21 SQL注入
目标:编写SQL动态查询,防止SQL注入 通常所说的“SQL动态查询”是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. 反模式:将未经验证的输入作为代码执行 当向SQL查询的字符串中插入别 ...
- SSM框架之Mybatis(6)动态SQL
Mybatis(6)动态SQL 1.动态SQL 出现原因:有些时候业务逻辑复杂时,我们的 SQL 是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了 1.1.if标签 我们根据实体类的不 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
随机推荐
- Luogu4782 【模板】2-SAT 问题(2-SAT)
模板.注意若x=y不一定是废话,x=0或x=0表示x必须为0.以及数组开2n. #include<iostream> #include<cstdio> #include< ...
- 【GYM 102059】2018-2019 XIX Open Cup, Grand Prix of Korea
vp了一场gym,我又开心地划水了. A. Coloring Roads 题意:给定一棵树,树边一开始都是无色的,每次操作可以把一个点到根的路径染成某个颜色,每次询问当前树上出现过某个次数的颜色种数. ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元
题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Per ...
- 初探react(一)
我们学习react首先是要了解react是什么,以及他的特点. React 是一个用于构建用户界面的 JAVASCRIPT 库,起源于 Facebook 的内部项目,用来架设 Instagram 的网 ...
- MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)
图像二值化.反运算过程涉及到im2bw,imcomplement函数,反运算可以这么理解:原本黑的区域变为白的区域,白的区域变为黑的区域. 实现过程如下: close all; %关闭当前所有图形窗口 ...
- 02-HTML5新的input属性
本节重点 HTML5 拥有多个新的表单输入类型.这些新特性提供了更好的输入控制和验证 本节介绍新的输入类型: date datetime datetime-local email month numb ...
- 2018.10.2浪在ACM 集训队第三次测试赛
2018.10.26 浪在ACM 集训队第三次测试赛 今天是暴力场吗???????可怕 题目一览表 来源 考察知识点 完成时间 A 1275 珠心算测试 NOIP 普及组 2014 暴力??? 201 ...
- 继承之es5对比es6
es5: 熟悉es5的童鞋们就知道es5的继承多么恶心~~ es5最经典的继承写法就是如下这样 1.写一个function,用this来扩展其值类属性 2.prototype添加其方法类属性 3.若整 ...
- WebLogic Server添加删除补丁操作【转】【补】
WebLogic Server添加删除补丁操作 0 查看当前weblogic版本 [weblogic@localhost bin]$ cd /data/bea/weblogic11/wlserver_ ...
- fastreport报表中出现十字线
问题描述:经常有十字线出现在报表中,出现在报表中不同的频带,在预览和运行时都会显示,不能点击和删除它. 解决方法:这是一个线控制,因太小而不能被渲染,所以fastreport使用十字线来表示其位置.通 ...