第三章 动态SQL

使用动态SQL完成多条件查询
》if:利用if实现简单的条件选择。
》choose:相当于Java中的switch语句,通常与when和otherwise搭配。
》where:简化SQL语句中的where的条件判断。
》set:解决动态更新语句。
》trim:可以灵活地去除多余的关键字。
》foreach:迭代一个集合,通常用于in条件。

foreach的基本属性:
》item:表示集合中每一个元素进行迭代时的别名。
》index:指定一个名称,用于表示在迭代过程。
》open:表示该语句以什么开始。
》separator:表示每次进行迭代之间以什么符号作为分隔符。
》close:表示语句什么结束。
》collection:最关键并容易出错的属性,需格外注意,该属性必须指定,不同情况下,该属性的值是不一样的。主要有三种情况:
》若入参为单参数且参数类型是一个List的时候,collection属性值为list。
》若入参为单参数且参数类型是一个数组的时候,collection属性值为array。
》若传入参数为多参数,就需要把它们封装为一个Map进行处理。

resultType和resultMap的关联
在MyBatis进行查询印射的时候,其实查询出来的每个字段都放在一个对应的Map里面,其中键是字段名,值则是其对应的值。当select元素提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。当使用resultType的时候,直接在后台就能接收到其相应的对象属性值。其实MyBatis的每个查询印射的返回类型都是resultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis会自动把对应的值赋给resultType所指定对象的属性;当我们提供的返回类型是resultMap的时候,因为Map不能很好地表示领域模型,我们就需要通过进一步的定义把它转换为对应的实体对象。

Choose(when、otherwise)
choose元素的作用相当于Java中的switch语句,基本上跟JSTL中的choose的作用和用法是一样的,通常都是搭配when、otherwise使用。
根据条件查询用户表,具体要求:查询条件提供前三个(用户名称、用户角色、用户编号)中的任意一个即可,若前三个条件都不提供,那么默认提供最后一个条件(创建时间:在指定的年份内)来完成查询操作。

本章总结
》MyBatis在SQL印射文件中可以使用灵活、智能的动态SQL来实现SQL印射。
》if+set:完成更新操作。
》if+where:完成多条件查询。
》if+trim:完成多条件查询(代替where)或者更新操作(代替set)。
》choose:完成条件查询(多条件下,选择其一)。
》foreach:完成复杂查询,主要用于in条件查询中,迭代集合。其中最关键的部分就是collection属性,根据不同的入参类型,该属性值亦不同:
》若入参对象为一个List实例,collection属性值为list。
》若入参对象为一个数组,collection属性值为array。
》若入参对象为多个,就需要把它们封装为一个Map进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值