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

mapper映射文件9大元素

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

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

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

例子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace必须和所描述接口的全类名保持一致  -->
<mapper namespace="com.imooc.dao.MessageDao">
<!-- 
数据库的字段和java类的属性对应:
      1,type就是类的全名
      2,id是配置主键的  result是普通键的 ,column是数据库字段名字 ,property是类属性
 -->
  <!--  
  <resultMap type=" pojo.Message" id="MessageResult">
    <id column="ID" jdbcType="INTEGER" property="id"/>
    <result column="COMMAND" jdbcType="VARCHAR" property="command"/>
    <result column="DESCRIPTION" jdbcType="VARCHAR" property="description"/>
    <result column="CONTENT" jdbcType="VARCHAR" property="content"/>
  </resultMap>
   -->
<!--
	1,select的id必须和当前接口里面的方法名字保持一致 
	2,resultMap必须和返回结果的全类名保持一致
 -->
  <select id="selectMessage"  resultMap="  com.imooc.pojo.Message">
    select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE WHERE ID=#{id}
  </select>
</mapper>

一,resultMap 自定义结果集映射

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

resultMap中:

  • type就是类的全名,一般是一个封装好的pojo,id就是引用这个结果集的标记
  •  id是配置主键的,  result是普通键的
  • column是数据库字段名字 ,property是类属性
<!--
数据库的字段和java类的属性对应:
      1,type就是类的全名
      2,id是配置主键的  result是普通键的 ,column是数据库字段名字 ,property是类属性
 -->

  <resultMap type=" pojo.Message" id="MessageResult">
    <id column="ID" jdbcType="INTEGER" property="id"/>
    <result column="COMMAND" jdbcType="VARCHAR" property="command"/>
    <result column="DESCRIPTION" jdbcType="VARCHAR" property="description"/>
    <result column="CONTENT" jdbcType="VARCHAR" property="content"/>
  </resultMap>
  <!--
	1,select的id必须和当前接口里面的方法名字保持一致 
	2,resultMap必须和返回结果的全类名保持一致
 -->
  <select id="selectMessage"  resultMap="MessageResult">
    select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE WHERE ID=#{id}
  </select>
</mapper>

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

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

1,级联属性

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

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

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

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

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

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

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

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

结果:

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

接口:

sql:

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

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

 

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

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

 resultMap-----dicriminator鉴别器

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

二,动态sql

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判断都放在一个<where></where>标签中(并去掉sql的where,标签会自动加上),但是:只能解决and拼在前面,要用trim标签

2,trim标签

例子 :trim标签用法

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

3,choose标签的使用

具体文章:choose具体用法

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

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

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

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

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

5,foreach循环标签

传过来的是一个list集合

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

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

三,mybatis的两个内置参数

  • _parameter
  • _databaseId

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

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

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

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

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

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

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

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

<sql> 和 <include>

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

<sql>标签中的id 唯一对应<include>标签中的refid

猜你喜欢

转载自blog.csdn.net/weixin_42724467/article/details/84339274