Open cccreator opened 5 years ago
一、select查询返回List/Map 1.查询多条数据返回List 如果使用的是自动映射 , resultType指定的是集合中元素的类型。或者说 理解为想让Mybatis将一条数据封装成哪种类型的java对象。就指定哪种类型 2.查询返回Map a.查询一条数据返回Map,MyBatis会自动使用表的列名作为key,列值作为value返回. b.查询多条数据返回Map,需要使用@MapKey("key")指定封装map的时候所使用的key Map中的value就是 一条数据封装成的java对象 二、resultMap 自定义映射 a. association 用来映射联合属性
association可以使用分步查询
association使用分步查询可以使用延迟加载
b. collection 用来映射集合类型的联合属性
collection使用分步查询
collection分步查询使用延迟加载
三、动态sql
if: 用于条件的判断. test中写的OGNL表达式.
where:用于解决拼装sql的时候where 以及 前面多出或者少and的问题.
trim: 用于解决拼装sql的时候前面或者后面 缺少或者多出某些字符的问题
set: 用于解决修改操作拼装sql的时候,的问题.
choose:类似于带了break的switch case语句. when可以出现多次 otherwise出现一次.
foreach:主要用于对集合的遍历 .
使用foreach完成Mysql的批量操作.
四、内置参数
a._parameter: 代表整个参数.
如果是单个参数,则代表整个参数
如果是多个参数,MyBatis会封装map,_parameter代表封装后的map。
b._databaseId:
如果配置了databaseIdProvider,_databaseId代表当前使用的数据库的别名.
五、抽取可重用的sql
可以使用
一、缓存机制
1.一级缓存
一级缓存(本地缓存)
SqlSession级别的缓存,本质上就是SqlSession级别的一个map。
每一个SqlSession对象都自己的一级缓存.互不共享.
一级缓存是默认开启的
工作机制: 与数据库的一次会话期间(通过一个SqlSession,查询到的数据会放在一级缓存中.
以后如果需要获取相同的数据,直接从缓存中获取,而不需要发送sql到数据库查询.
一级缓存失效的情况:
1.SqlSession不同.
2.SqlSession相同,但是查询条件不同.
3.SqlSession相同,但是在两次查询期间执行了增删改的操作.
4.SqlSession相同,手动清除了一级缓存.
2.二级缓存
二级缓存(全局缓存 基于namespace级别的缓存. 二级缓存默认是关闭的,必须手动配置开启.
工作机制:
1.一个会话(SqlSession),查询一条数据,这个数据就会被放在当前会话的一级缓存中.
2.如果会话提交或者关闭,一级缓存中的数据会被保存到二级缓存中.
使用步骤:
1.在全局配置文件中开启二级缓存:
<setting name="cacheEnabled" value="true"/>
2.在想要使用二级缓存的sql映射文件中配置使用二级缓存:
<cache></cache>
3.我们的POJO需要实现序列化接口.
3.缓存相关的设置
1. cacheEnabled=false:关闭的是二级缓存,一级缓存依旧可以使用.
2. 每一个select标签都useCache=true属性.
如果useCache=false: 不使用二级缓存,依旧使用一级缓存.
3. 每一个增删改标签都有flushCache=true属性:
在两次查询期间做了增删改操作,一二级缓存都会清除.
每一个查询标签都有flushCache=false,如果改为true,每次查询之后都会清除缓存,缓存是没被使用的.
4.sqlSession.clearCache(): 只会清空当前session的一级缓存.
5.localCacheScope:设置一级缓存(本地缓存)的作用域。
SESSION :会话期间
STATEMENT: 可以禁用一级缓存.
4.整合第三方的缓存 1.导入Ehcache的jar包 以及适配包 ehcache-core-2.6.8.jar mybatis-ehcache-1.0.3.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.2.jar 2.配置Ehcache的配置文件
3.在映射文件中配置使用Ehcache
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
MyBatis
MyBatis的xml配置
<properties>
的使用<properties resource="db.properties"></properties>
用properties标签来引入外部properties类型的文件,其中:resource引入类路径下的资源;url引入网络路径或者磁盘路径下的资源;<settings>
的使用settings包含很多重要的设置项,用setting来设置每一项,那么设置项的名称,value设置项的值
<environments>
的使用