1.在已有类中只查询部分属性
如果Car类中有很多属性car_id、car_type、car_number、car_color、car_price等等很多属性,可是我们要查的只有car_id、car_number 应该如何去做
可以在mapper中直接写方法
List
然后通过stream-map等方法遍历出来
但是这样会比较麻烦,如果属性很多是个宽表,那么每次会造成很多的浪费;
可以新建一个类PartCar只有两个属性car_id和car_number
public class PartCar{
carId
carNumber
}
(mapper中想直接点到xml文件可以下载 free mybatis plugin )
同样mapper中写查询的方法 方法名比如是 findPartInfo(@param......)
xml中需要新建一个resultMap,它的意思是如果你想在这个xml中查点什么,你得有一个返回的“类”,这个类如何定义,就是resultMap的功能;
id:给这个resultMap起一个名字
type:这个返回类的全路径
接下来就是他的
column:意思就是数据库中的列 一般用下划线这种方式定义;
property:这个和你的类中定义的属性一样;到这里可以看出mapResult就是一个映射关系
jdbcType:数据库中他的属性,一定要看看表里面定义的是啥再写
2.查询函数生成的属性
select car_id , car_number , count(car_number) as car_count from car where ....
比如这种里面有一个函数生成的属性 ,我要统计有多少次,然后我还要返回这个;
那么PartCar这个类中需要增加一个属性,这个属性记录的就是as后面 car_count的值
同样的它也需要写到
这里可以看出刚才说的是和数据库列名一一对应是不完全的,应该是和查询语句中要返回的字段名称的一种映射关系;
public class PartCar{
carId
carNumber
carCount
}
3.查询语句的Xml文件如何写
3.1 select标签
id:和mapper中的方法名称一致 如果装了插件,会帮你检测;
resultMap:这里当然是填写,刚才定义好的resultMap的id;
其他属性还没有用到比如parameterType 这个好像是规定入参的类型,但是我遇到的查询是入参是一个List,后边带一个Integer ,比如是这样 List
如果遇到这种情况不知道type填什么,直接没写,也没出问题;
3.2 for循环如何写
利用
where id in
#{item}
collection;需要对应入参时想传入的list ,注解param中气的名字
item:这个相当于java中for(Car car : carList)中的小car
open和close相当于循环前后加的字符,正常写sql是where car_id in (1,2,3,4),这里填的就是这俩括号
separator:就是上边正常写的分隔符 这里用逗号;
#{item}:这个好理解,相当于循环出来的东西;
大于小于 这里建议用 #lt; 和 #gt; 用<编译器分不出来这个是标签开头开始小于,有时报错有时不报错;