mybatis中的SQL映射文件

一、SQL映射文件的一些顶级元素:

1.mapper:映射文件的根元素节点,只有一个属性namespace(命名空间)
作用:
a.用于区分不同的mapper,全局唯一;
b.绑定DAO接口,即面向接口编程,当namespace绑定一个接口之后,可以不用写该接口的实现类,mybatis会通过接口的完整限定名查找到对应的mapper配置来执行语句,因此namespace的命名必须要跟接口同名。
2.cache:配置给定命名空间的缓存;
3.cache-ref:从其他命名空间引用缓存配置;
4.resultMap:用来描述数据库结果集和对象的对应关系;
5.sql:可以重用的SQL块,也可以被其他语句引用;
6.insert:映射插入语句;
7.update:映射更新语句;
8.delete:映射删除语句;
9.select:映射查询语句;

二、使用select完成单条查询:

<!-- 根据用户名查询用户列表(模糊查询) -->
<select id="getUserListByUserName" resultType="User" parameterType="string">
select * from smbms_user where username like CONCAT('%',#{username},'%')
</select>
//Id:命名空间的唯一标识符,可以被用来引用这条语句;
//ParameterType:表示查询语句传入参数类型的完全限定名或者别名,它支持基本参数类型和复杂参数类型
//reultType:查询语句返回结果集类型的完全限定名或者别名,别名的使用方式和parameterType是一样的

别名与java类型映射

别名 映射类型
double Double
long Long
byte Byte
boolean Boolean
short Short
date Date
int Int
map Map
integer Integer
hashmap HashMap
arraylist ArrayList
list List

三、使用resultMap查询结果

使用resultMap时的一些属性:
(1)constructor
- 用于在实例化类时,注入结果到构造方法中
- idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能
- arg - 将被注入到构造方法的一个普通结果
(2)id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
(3)result – 注入到字段或 JavaBean 属性的普通结果
(4)association
- 一个复杂类型的关联;许多结果将包装成这种类型
- 嵌套结果映射 – 关联可以指定为一个 resultMap 元素,或者引用一个
(5)collection – 一个复杂类型的集合
- 嵌套结果映射 – 集合可以指定为一个 resultMap 元素,或者引用一个
(6)discriminator
- 使用结果值来决定使用哪个 resultMap
- case – 基于某些值的结果映射
- 嵌套结果映射 – 一个 case 也是一个映射它本身的结果,因此可以包含很多相 同的元素,或者它可以参照一个外部的 resultMap。

1.id:唯一标识,此id值用于select元素resultMap属性的引用
2.type:表示该resultMap的映射结果类型
3.result:用于表示一些简单的属性,其中column属性表示从数据库中查询的字段名,property则表示查询出来的字段对应的值赋给试题对象的那个属性。

四、resultMap和resulttype区别:

1.resultType:直接表示返回类型,包括基础数据类型和复杂数据类型;
2.resultMap:对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果映射到哪一个resultMap上,它的应用场景一般是:数据库字段信息与对象属性不一致或者需要做复杂的联合查询以便自由控制映射结果。

五、resultMap和resulttype的联系:

其实mybatis的返回值都是Map类型的键值对存在,resultType用于简单的查询比较方便点,而resultMap用于较为复杂的联合查询使用就会比较的简单点。

六、resultMap的自动映射级别:

resultMap的默认映射级别为PARTIAL,若需要满足需求,则需要设置mybatis的自动映射级别(autoMappingBehavior)为NONE,即禁止自动匹配,修改mybatis-config.xml:

<settings>
  <!—设置resultMap的自动映射级别为NONE(禁止自动匹配)-->
  <setting name = “autoMappingBehavior” value=”NONE”/>
 </settings>

自动映射的前提是字段名和属性名需要一直,在默认映射级别下,若不一致,是不能完成自动映射的。

七、使用insert完成增加操作

例:

<insert id="add" parameterType="cn.smbms.pojo.user.User">
  insert into smbms_user (userid,user_name,userpassword,useremail,username,sex,brithday,usercode)
   values (#{userid},#{user_name},#{userpassword},#{useremail},#{username},
    #{sex},#{brithday},#{usercode})
</insert>

八、使用修改语句进行修改操作

例:

<update id="modify" parameterType="cn.smbms.user.dao.addUserMapper">
  update smbms_user set user_name=#{user_name},userpassword=#{userpassword},useremail=#{useremail},
   username=#{username},sex=#{sex},brithday=#{brithday},usercode=#{usercode}
    where  userid=#{userid}
</update>

九、使用@Param注解实现多参数的传入:

如@Param(“userpassword”)String pwd,相当于将该参数重新命名为userpassword,在映射的SQL中需要使用#{注解名称},如#{userpassword}
好处:不需要在进行对象的封装,直接进行两个参数的入参即可,清晰明了。

十、在mybatis中,怎么选择入参的方式了?

一般情况下,如果参数超过四个,我们将选择封装对象入参(特别是常规的封装和修改操作时,字段较多,封装成对象入参较为方便);
对于参数固定的业务方法,最好使用多参数入参,原因是这种方法比较灵活,代码的可读性较高,可以清晰的看出接口方法中需要传入的参数。

如果当传入的参数为进出数据类型时,不管是多参数入参还是单独的一个参数入参,都需要使用@Param注解来进行参数的传递。

十一、使用delete完成删除操作:

<delete id="deleteUserByUserid" parameterType="Integer">
  delete from smbms_user where userid = #{userid}
</delete>

十二、使用resultMap进行高级结果的映射:MybatisTest04

Association:映射JavaBean的某个“复杂类型”属性,仅处理一对一的关联映射。
Collection:处理一对多的映射关系

十三、resultMap的映射级别:

NONE:禁止自动映射;
PARTIAL:默认映射,自动匹配映射属性,内部嵌有association、collection除外;
FULL:自动匹配映射

十四、mybatis的缓存:

1.一级缓存:

是基于PerpetualCache(mybatis自带)的hashmap本地缓存,作用范围在session域内,当session被刷新或者关闭之后,就会清空;

2.二级缓存:

二级缓存就是global caching ,超出session,可以被所有的sqlsession共享,开启它只需要mybatis的配置文件的setting。
一级缓存的结果是SQL语句,二级缓存的结果是对象。
二级缓存的配置:
设置去全局配置,在mybatis中设置:

<settings>
 <setting name=”cacheEnabled” value=true/>
</settings>
<mapper namespace=”………………”>
 <cache
  Eviction = “FIFO”
  flushIntrval =6000”
  size =512”
  readOnly =true/>
 ………………
</mapper>
发布了15 篇原创文章 · 获赞 10 · 访问量 575

猜你喜欢

转载自blog.csdn.net/weixin_44439445/article/details/102991510
今日推荐