每个基于mybatis的应用都是以一个sqlsessionfactory的实例为核心。sqlsessionfactory的实例可以通过sqlsessionfactorybuilder获得或者一个预先定制的configuration的实例构建出sqlsessionfactory的实例
sqlsessionfactorybuilder :一旦创建了sqlSessionFactory就不再需要他了
sqlSessionFactory:一旦被创建就应该在应用运行期间一直存在,在应用运行其次不要重复创建多次。因此最佳作用域是应用作用域,最简单的就是使用单例模式或者静态单例模式
sqlsession:不是线程安全的,因此不能被共享,所以最佳的作用域是请求或方法作用域。绝对不能讲sqlsession的实力引用放在一个类的静态域。每次收到http请求,就可以打开一个sqlsession,返回响应就关闭
sqlsession完全包含了面向数据库执行sql命令所需的所有方法
resultMap 返回集合
resultType 返回类型 resultType = "com.xxx.xxx.xxx "
mapper.xml系统是默认从resource中读取的,不用配置。如果文件不是放在resource中就要配置
maven由于约定大于配置,所以可能会产生无法导出或者生效的问题,解决方案
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
crud
namespace:对应mapper接口
id:对应namespace中的方法名
resultType:sql语句的返回值
parameterType:传参类型
#{}:参数的值
配置文件:
事务管理器有2种 JDBC、Managed
别名typeAliases:
<typeAliases type="com.xxx.xxx.User" alias="User"/>
扫描包可以使用注解@Alias()
常见的Java类型内建的相应的类型别名,是不区分大小写的
resultMap:
对于简单的语句不需要要配置显示的结果映射,对于复杂一点的语句只需要描述他们的关系就行了
分页:limit
集合和关联
一对多、多对一
javaType:用来指定实体类中属性的类型
ofType:用来指定映射到list或者集合中的pojo类型,泛型中的约束类型
一级缓存
1、默认开启,在一次sqlsession中有效,
2、增删改会刷新缓存
3、手动清理缓存sqlSession.clearCache();
二级缓存
1、开启全局二级缓存在setting中设置cacheEnable默认开启 ,mapper.xml 中添加<cache/>,查询语句上 useCache可关闭缓存
2、基于namespace级别的缓存,一个命名空间,对应一个二级缓存
3、所有数据都会先放在一级缓存中,在会话提交或关闭的时候提交到二级缓存中
整合spring
1、bean.xml 配置dataSource
2、sqlSessionFactory
3、sqlSession
既传承SqlSessionDaoSupport,获取mapper