一、历史回顾
(一)、动态SQL
查询全部:
select * from person;
根据年龄查询:
select * from person where age = #{age}
根据姓名和年龄查询:
select * from person where name = #{name} and #{age}
看这些现象,前面的“select * from person”都一样,后面的内容可以动态拼接。
二、动态SQL以及各种类型的输入参数
(一)、动态SQL
1、<where>标签
老的方式:xxxMapper.xml配置文件:
配置这种方式不是很好,建议使用下面配置的方式,如下图所示:
这种where设置动态SQL方式<where>标签会自动处理第一个<if>标签中的and,但不会处理之后<if>中的and
例:
xxxMapper.xml配置:
xxxMapper.xml配置建议采取这种方式:
建议xxxMapper.xml配置方式xxxMapper接口:
xxxMapper接口测试类:
测试类2、<forEach>标签
例:查询id为1、2、5的信息
ids = {1,2,5}:select * from student where stuno in(1, 2, 5);
<forEach>迭代的类型:数组、对象数组、集合、属性(Grade类:List<Integer> ids)
(1)、属性(Grade类:List<Integer> ids):
xxxMapper.xml设置:
设置例:
实体类:
实体类xxxMapper.xml配置:
xxxMapper.xml配置xxxMapper接口:
xxxMapper接口测试类:
测试类(2)、简单类型数组
无论编写代码时,传递的是什么参数名,在mapper.xml中,数组的名称固定写法:array,具体xxxMapper.xml配置:
xxxMapper.xml配置例:
xxxMapper.xml配置:
xxxMapper.xml配置xxxMapper接口:
xxxMapper接口测试类:
测试类(3)、集合
无论编写代码时,传递的是什么参数名,在mapper.xml中,数组的名称固定写法:list,具体xxxMapper.xml配置:
xxxMapper.xml配置例:
xxxMapping.xml配置:
xxxMapping.xml配置xxxMapping接口:
xxxMapping接口测试类:
测试类(3)、对象数组
Person[] persons = {person1, person2, person3}; 使用这个数组里的各个对象的id。
注意几点:
a、parameterType="Object[]"
b、里面使用的数组是array
xxxMapper.xml配置:
xxxMapper.xml配置例:
xxxMapper.xml配置:
xxxMapper.xml配置xxxMapper接口:
xxxMapper接口测试类:
测试类3、Mybatis:SQL片段。
a、提取相同的SQL内容
b、引用
例:
SQL片段如果SQL片段和引用处不在同一个mapper.xml中,则refid引用时,需要的值为:namespace + 这个sql的id。例:refid="com.test.entity.objectArrayCondition"
网友评论