动态 SQL
Posted lxowz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态 SQL相关的知识,希望对你有一定的参考价值。
2.1.1 mapper : 映射文件的根元素节点 只有一个属性namespace(命名空间)
绑定DAO接口,即面向接口编程,namespace的命名必须要跟接口同名。
resultMap: 用来描述数据库结果集和对象的对应关系。
namespace的命名必须跟某个DAO接口同名,同属于DAO层包下,习惯命名以实体类+Mapper.xml命名。
<select id="getUserListByUserName" resultType="User" parameterType="string">
select * from smbms_user where userName like CONCAT (‘%‘,#userName,‘%‘)
<select>
id为 getUserListByUserName 的映射语句,参数类型为 string 返回结果类型是User; 数据库的字段名和属性名不一致的情况下需要手动映射
id: 命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType: 表示查询语句传入参数的类型的完全限定名或别名。
1.将查询条件封装成对象进行入参 parameterType="User 类对象"
2. 使用Map集合 存储查询条件 parameterType="Map" 返回集合
3. 使用@Param注解实现多参数入参 : public int updatePwd(@Param("id")Integer id,@param("userPassword") String pwd);
resultType 直接表示返回类型,包括基础数据类型和复杂数据类型。
resultMap 是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果映射到哪一个resultMap上,应用场景一般是:数据库字段信息与对象属性不一致或者需要做复杂的联合查询以便自由控制映射结果。
resultType 属性和 resultMap 属性绝对不能同时存在,只能二者选其以使用。
insert ,update ,delete 增,改,删,默认返回执行sql影响的行数,所以DAO层的接口方法的返回值一直设置为int类型,
insert,update,delete 元素中均没有resultType属性,只有查询操作需要对返回结果类型,进行相应的指定
MyBatis中参数入参,何时需要封装成对象入参,何时又需要使用多参数入参?
一般情况下,超过4个以上的参数最好封装成对象入参(特别是在常规的增加和修改操时字段较多,封装成对象比较方便)
1.association : 映射到JavaBean的某个 复杂类型 属性 仅处理一对一的关联关系
association的属性:javaType:完整java类名或者别名
property:映射数据库列的实体对象的属性
2. collection 这个属性是应该集合列表
<settings>
<setting name="autoMapperinigBehavior" value="FULL"/> //设置resultMap的自动映射级别为FULL(自动匹配所有)
</settings>
NONE : 禁止自动匹配
PARTIAL (默认): 自动匹配所有属性
FULL: 自动匹配所有
MyBatis缓存
1.一级缓存
一级缓存是基于PerpetualCache( MyBatis自带) 的HashMap本地缓存,作用范围为session域内当session flush 或者 close之后,该session中所有的cache就会被清空
2. 二级缓存
二级缓存就是global caching 它超出session范围之外,可以被所有sqlSession共享,开启它只需要在MyBatis的核心配置文件 settings 中设置即可
以上是关于动态 SQL的主要内容,如果未能解决你的问题,请参考以下文章