映射文件是以
insert、update、delete、select(增删改查);
cache、cache-ref、resultMap、parameterMap、sql。
例子:
$返回结果要么用resultType,要么用自定义的resultMap,二选一
resultMap中:
例如:有一个员工,他有个属性叫部门,部门会关联一个部门表,我们希望查询员工信息的时候,把他部门相应的信息也带出来
1,级联属性
2,association -----关联对象
可以指定关联的对象(部门),然后下面的property就直接写部门里面的属性
3,association -----分步查询
select标签可以引用其他mapper映射文件的sql查询语句。
4, association 之延迟加载,在上一个的基础上,有时候我们不需要关联出部门的信息,全部关联的话就会给数据库造成负担,如果要按需加载查询的话,需要在mybatis的全局配置文件里面加这两个setting(懒加载和按需加载)就可以了。
1,运用场景,查询部门,部门下有很多员工,是一个集合list,需要把所有员工信息关联查询出来就可以写collection
注:得到员工的list结果集之后,然后再调用department类之中get方法getEmps(),将结果输出。
结果:
2,collection-------分步查询
接口:
sql:
sql1,按照部门id先查询出部门信息
sql2,按照部门id查出员工信息list(一个部门很多员工)
resultMap:select属性为sql2的id,column为传过来的查询参数(部门id)
注意:当遇到多个参数需要传递时,可以封装为Map,fetchType可以直接设置延迟加载
可以根据查询得到的结果,判断之后,执行不同的封装规则,case就是一个判断的条件,如果结果等于case的值,就执行下面的结果封装。
if , foreach ,trim , choose四个标签
1,if的用法
OGNL表达式:
判断和拼接:根据传过来的条件查询员工信息
如果满足test条件,就在sql上拼接上下面的语句
select * from tbl_employee where id=? and last_name like ? and email= ? and gender=?
注:如果第一个判断没有成功就会出现语法错误-------“后面开头以and开始”
解决办法1:在前面的sql写成 where 1=1
解决方法2:把所有的if判断都放在一个
2,trim标签
例子 :trim标签用法
https://blog.csdn.net/wt_better/article/details/80992014
3,choose标签的使用
具体文章:choose具体用法
4,set标签的使用-----由于更新,update
MyBatis在生成update语句时若使用if标签,如果前面的if没有执行,则可能导致有多余逗号的错误。
没有使用if标签时,如果有一个参数为null,都会导致错误,如下示例:
注意:set语句之后一定别忘记加逗号
5,foreach循环标签
传过来的是一个list集合
例子,细节参考文章:foreach使用
https://blog.csdn.net/qq_34107571/article/details/77834548
注:这两个参数是不需要我们定义也可以直接拿来使用的。
parameter:代表整个参数,如果传入的是单个参数或对象,那么_parameter就可以代表这个参数或对象,如果传入的是多
个参数,那么_parameter代表的就是一个map(MyBatis会默认将参数封装为map)
_datebaseId:代表我们当前使用的数据库别名,前提是我们在全局配置文件里面配置了databaseIDProvider标签
databaseIDProvider标签用于配置多个数据库
具体用法见文章:mybatis内置参数详解
https://blog.csdn.net/postersxu/article/details/79058626