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)
随机推荐
- pip download 只下载不安装命令的使用方法
比如下载 django 1.8.11版本和simplejson 3.14.0版本的包 那么就将所需的包写入 requirement.txt 那么我的requirement.txt内容就是: djan ...
- JSP 和 Servlet 的工作原理和生命周期
JSP的英文名叫Java Server Pages,翻译为中文是Java服务器页面的意思,其底层就是一个简化的Servlet设计,是由sum公司主导参与建立的一种动态网页技术标准.Servlet 就是 ...
- 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)$ ...
- BZOJ 1195: [HNOI2006]最短母串
1195: [HNOI2006]最短母串 Time Limit: 10 Sec Memory Limit: 32 MBSubmit: 1346 Solved: 450[Submit][Status ...
- Mysql的命令总结
Mysql常用命令 启动 net start mysql 关闭 net stop mysql 连接mysql mysql -uroot -ppssword mysql -uroot -P3307 -p ...
- 洛谷P3195 玩具装箱TOY
题目大意: 有n个数,要将他们分成若干段,每一段的cost定义为: cost=r-l+ΣCk (k∈[r,l]) 该段的最终花费是:(cost-L)^2; 给出L,n,C(1~n),总共的最小花费. ...
- ReactNative系列组件用法(一)
首先我们来认识view 改变一些特性,再来看看项目的变化 我们新增flex布局的一些属性,再来看看项目的变化 接下来我们来看看如果获取屏幕的分辨率 关于图片的用法,reactNative这里也是很神奇 ...
- 中文参考文献如何导入到endnote中
比如我想在文献中插入“2型糖尿病患者并发脑卒中的前瞻性研究”这篇参考文献,在主题里面输入文献标题,勾选我们要找的文献,点击“导出/参考文献” 导出来以后,点击屏幕右下角界面的“导出/参考文献”,下图红 ...
- Linux下Shell去除空行的方法
1.用grep命令 grep -v “^$” 文件名 2.用sed命令 cat 文件名 | sed ‘/^$/d' 3.用awk命令 cat 文件名 | awk ‘{if($0!=”")pr ...
- win10重复安装
使用大白菜启动盘装win10的时候,一直循环的重启然后设置,然后再重启,再设置.陷入了死循环. 解决办法:在自定义快捷键那个界面按 Ctrl+Shift+F3 .这是直接进入桌面的快捷键.