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)
随机推荐
- lambda 分类抽取N条
从每个分类中,按照比例抽取 lista中percent是比例,按照这个比例抽取. static List<A> lista = new List<A>() { new A(){ ...
- webapi返回泛型给easyui
由于之前遇到的easyui调用webapi的问题. 参见 :http://blog.csdn.net/hanjun0612/article/details/51144991 所以就考虑,封装一个泛型用 ...
- Web api dynamic
参考: ajax调用实例 <script> var user = { name_CN: "haha", pwd: "123" ...
- GO系列教程
1.介绍与安装 2.Hello World 3.变量 4. 类型 5.常量 6.函数(Function) 7.包 8.if-else 语句 9.循环 10.switch语句 11.数组和切片 12.可 ...
- MT【29】介绍向量的外积及应用举例
我们在学校教材里学到的数量积(内积)其实还有一个孪生兄弟向量积(外积),这个对参加自主招生以及竞赛的学生来讲是需要掌握的,这里稍作介绍: 原理: 例题: 应用:
- 自学Aruba4.3-Aruba AC基础配置(2)
点击返回:自学Aruba之路 自学Aruba4.3-Aruba AC基础配置(2) 网络配置: Vlan .IP address port IP route IP dhcp 1. 网络配置VLAN . ...
- 洛谷 P1582 倒水 解题报告
P1582 倒水 题目描述 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水量相同的瓶子,把 ...
- 百度地图API 循环向 marker 添加 click事件
使用百度地图API,循环向marker添加InfoWindow时,所有的marker点击弹出的inforwindow为最后一个添加的infowindow,百度后,使用js闭包解决此问题,直接贴代码: ...
- php redis在windows下的部署
1.下载php扩展 下载地址:https://github.com/phpredis/phpredis/downloads 2.将下载php扩展redis放到php的ext目录下,然后在php.ini ...
- 错误:分析 EntityName 时出错 web配置
会发生这种错误的环境:ASP.NET 或 XML情况:一个原本运行正常的C#页面,因为SQL的密码更改后一直出现“分析 EntityName 时出错”错误,验证过web.config的SQL Conn ...