mybatis中***Mapper.xml映射文件的配置细节

mapper映射文件9大元素

映射文件是以作为根节点,在根节点中支持9个元素,分别为

insert、update、delete、select(增删改查);

cache、cache-ref、resultMap、parameterMap、sql。

例子:







  

  

一,resultMap 自定义结果集映射

$返回结果要么用resultType,要么用自定义的resultMap,二选一

resultMap中:

  • type就是类的全名,一般是一个封装好的pojo,id就是引用这个结果集的标记
  •  id是配置主键的,  result是普通键的
  • column是数据库字段名字 ,property是类属性


  
    
    
    
    
  
  
  

resultMap的关联查询-------association

例如:有一个员工,他有个属性叫部门,部门会关联一个部门表,我们希望查询员工信息的时候,把他部门相应的信息也带出来

1,级联属性

mybatis中***Mapper.xml映射文件的配置细节_第1张图片

2,association -----关联对象

可以指定关联的对象(部门),然后下面的property就直接写部门里面的属性

mybatis中***Mapper.xml映射文件的配置细节_第2张图片

3,association -----分步查询

select标签可以引用其他mapper映射文件的sql查询语句。

mybatis中***Mapper.xml映射文件的配置细节_第3张图片

4, association 之延迟加载,在上一个的基础上,有时候我们不需要关联出部门的信息,全部关联的话就会给数据库造成负担,如果要按需加载查询的话,需要在mybatis的全局配置文件里面加这两个setting(懒加载和按需加载)就可以了。

mybatis中***Mapper.xml映射文件的配置细节_第4张图片

* resultMap------collection嵌套结果集

1,运用场景,查询部门,部门下有很多员工,是一个集合list,需要把所有员工信息关联查询出来就可以写collection

mybatis中***Mapper.xml映射文件的配置细节_第5张图片

mybatis中***Mapper.xml映射文件的配置细节_第6张图片

 

mybatis中***Mapper.xml映射文件的配置细节_第7张图片

 注:得到员工的list结果集之后,然后再调用department类之中get方法getEmps(),将结果输出。

mybatis中***Mapper.xml映射文件的配置细节_第8张图片

结果:

2,collection-------分步查询

接口:

sql:

sql1,按照部门id先查询出部门信息

sql2,按照部门id查出员工信息list(一个部门很多员工)

 

 resultMap:select属性为sql2的id,column为传过来的查询参数(部门id)

mybatis中***Mapper.xml映射文件的配置细节_第9张图片

注意:当遇到多个参数需要传递时,可以封装为Map,fetchType可以直接设置延迟加载

mybatis中***Mapper.xml映射文件的配置细节_第10张图片

 resultMap-----dicriminator鉴别器

可以根据查询得到的结果,判断之后,执行不同的封装规则,case就是一个判断的条件,如果结果等于case的值,就执行下面的结果封装。

mybatis中***Mapper.xml映射文件的配置细节_第11张图片

mybatis中***Mapper.xml映射文件的配置细节_第12张图片

二,动态sql

if  ,  foreach  ,trim  ,  choose四个标签

1,if的用法

OGNL表达式:

mybatis中***Mapper.xml映射文件的配置细节_第13张图片

 判断和拼接:根据传过来的条件查询员工信息

如果满足test条件,就在sql上拼接上下面的语句

select * from tbl_employee where id=? and last_name like ? and email= ? and gender=?

mybatis中***Mapper.xml映射文件的配置细节_第14张图片

mybatis中***Mapper.xml映射文件的配置细节_第15张图片

注:如果第一个判断没有成功就会出现语法错误-------“后面开头以and开始”

解决办法1:在前面的sql写成  where 1=1

解决方法2:把所有的if判断都放在一个标签中(并去掉sql的where,标签会自动加上),但是:只能解决and拼在前面,要用trim标签

2,trim标签

mybatis中***Mapper.xml映射文件的配置细节_第16张图片

例子 :trim标签用法

https://blog.csdn.net/wt_better/article/details/80992014

3,choose标签的使用

具体文章:choose具体用法

mybatis中***Mapper.xml映射文件的配置细节_第17张图片

 4,set标签的使用-----由于更新,update

 

  • MyBatis在生成update语句时若使用if标签,如果前面的if没有执行,则可能导致有多余逗号的错误。

  • 使用set标签可以将动态的配置SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。

没有使用if标签时,如果有一个参数为null,都会导致错误,如下示例:

mybatis中***Mapper.xml映射文件的配置细节_第18张图片

        注意:set语句之后一定别忘记加逗号 

5,foreach循环标签

传过来的是一个list集合

例子,细节参考文章:foreach使用

https://blog.csdn.net/qq_34107571/article/details/77834548

mybatis中***Mapper.xml映射文件的配置细节_第19张图片

三,mybatis的两个内置参数

  • _parameter
  • _databaseId

注:这两个参数是不需要我们定义也可以直接拿来使用的。

parameter:代表整个参数,如果传入的是单个参数或对象,那么_parameter就可以代表这个参数或对象,如果传入的是多

个参数,那么_parameter代表的就是一个map(MyBatis会默认将参数封装为map)

_datebaseId:代表我们当前使用的数据库别名,前提是我们在全局配置文件里面配置了databaseIDProvider标签

databaseIDProvider标签用于配置多个数据库

具体用法见文章:mybatis内置参数详解

https://blog.csdn.net/postersxu/article/details/79058626

四,sql标签----抽取可重用的sql片段

封装SQL语句简写select 和 insert语句, 根据id在查询和新增语句中调用标签中的语句

标签中的id 唯一对应标签中的refid

mybatis中***Mapper.xml映射文件的配置细节_第20张图片

 

你可能感兴趣的:(mybatis,java)