SQL映射文件的常用元素
sql映射文件的几个顶级元素(按照定义的顺序)
mapper -namespace
--namespace(命名空间)
--绑定Dao接口
--namespace的命名必须跟某个接口同名
--接口中的方法与映射文件中的语句id一一对应
cache -配置给定命名空间的缓存
cache-ref -从其他命名空间引用缓存配置
resultMap -用来描述数据库结果集和对象的对应关系
sql -可以重用的SQL块,也可以被其他语句引用
insert -映射插入语句
id:命名空间中唯一的标识符
parameterType:传入sql语句的参数类型的完全限定名或别名
提供开启了事务控制,一定要进行conmit提交事务.
update -映射更新语句
id:命名空间中唯一的标识符
parameterType:传入sql语句的参数类型的完全限定名或别名
提供开启了事务控制,一定要进行conmit提交事务.
如果只是更新单个值,每次都传入对象影响速度,可以传两个参数
但是参数必须使用注解 @Param
映射SQL中的参数:#{注解名称}
超过4个以上的参数最好使用封装成对象入参
参数固定的业务方法,最好直接使用多参数入参.
delete -映射删除语句
id:命名空间中唯一的标识符
parameterType:传入sql语句的参数类型的完全限定名或别名
提供开启了事务控制,一定要进行conmit提交事务.
select -映射查询语句
-select属性详细配置
-id
命名空间中唯一的标识符
接口中的方法与映射文件中的sql语句id一一对应
-parameterType
传入sql语句的参数类型的完全限定名或别名
基础数据类型
-int String Date等
-只能传入一个,通过#{参数名}即可获取传入的值
复杂数据类型
-Java实体类,Map等
-通过#{属性名}或者#{Map的key}即可获取传入的值
-resultType
sql语句返回值类型的完整类名或别名
返回基本数据类型
复杂数据类型(对象等)
-resultMap:对外部redultMap的引用
设置resultMap为返回值:
在mapper文件里面创建resultMap标签, 设置type为返回值类型,设置id的值跟查询表设置的值相同
格式:
<resultMap type="User" id="userList">
<result property="类属性名" column="数据库查询的属性名"/>
</resultMap>
应用场景:
数据库字段信息与对象属性不一致
负责的联合查询,自由控制映射效果
连表查询:参考内连接查询
自动映射:
自动映射的前提:字段名与属性名一致
自动映射级别:PARTIAI(默认),自动匹配所有属性
resultMap实现高级结果映射
语法:
<association property=”实体类对面名” javaType=”对象所对应的类名或别名” 或引用外部resultMap>
<id property=”实体类的属性” column=”数据库列名或别名” />
<result property=”...” column=”...” />
<result property=”...” column=”...” />
......
</association>
语法:
<collection property=”集合类对面名” ofType=”对象所对应的类名或别名” 或引用外部resultMap>
<id property=”实体类的属性” column=”数据库列名或别名” />
<result property=”...” column=”...” />
<result property=”...” column=”...” />
......
</collection>
提高association/collection的可重用性,则提取成一个resultMap标签对象出来即可.
reslultMap自动映射(autoMappingBehavior)三个级别
如果存在内部嵌套(association/collection),那么就不会自动映射所有字段,如果存在内部嵌套要实现自动映射所有字段,那么必须根据条件设计全局属性:
<settings>
<!-- 禁止自动匹配 -->
<setting name=”autoMappingBehavior” value=”NONE”/>
<!-- 自动匹配所有属性 内部嵌套除外 -->
<setting name=”autoMappingBehavior” value=”PARTIAL”/>(默认)
<!-- 自动匹配所有属性 -->
<setting name=”autoMappingBehavior” value=”FULL”/>
</settings>
MyBatis缓存-性能较低(常用第三方缓存)
一级缓存:基于MyBatis自带的HashMap本地缓存,作用范围为session域内,当session flush或者close之后,该session中所有的cache都会被清空.
二级缓存(全局缓存):超出session范围之外,可以被所有SqlSession共享,开启它只需要在MyBatis的核心配置文件中设置即可,
二级缓存配置:
1.MyBatis的全局cache配置
<settings>
<!-- 设置全局缓存 -->
<setting name=”cacheEnabled” value=”true”/>
</settings>
2.在mapper文件中设置缓存,默认情况下是没有开启缓存的,二级缓存的作用域只针对mapper的namespace而言,即,只有在此namespace下的查询才能共享cache,
mapper内配置信息
<cache eviction=”FIFO” flushInyerval=”60000” size=”512” readOnly=”true” />
3.在查询语句标签内添加属性
<select useCache=”true”>
</select>
总结:MyBatis对于缓存并不是擅长的,它只专心做的是SQL映射,所以采用OSCache,Merncachaed,Redis,Ehcache等专门的缓存服务器来做更合理
.