myBatis介绍
总体来说MyBatis主要完成两件事情:
1、根据JDBC规范建立与数据库的连接;
2、通过Annotaion/XML+JAVA反射技术,实现Java对象与关系数据库之间相互转化。
原理介绍:
Mybatis的应用是围绕着一个SqlSessionFactory实例展开的。SqlSessionFactoryBuilder根据XML映射文件创建SqlSessionFactory,有了SqlSessionFactory我们就可以获取SqlSession,而SqlSession拥有执行sql语句的各种方法.
SqlSessionsession=sqlSessionFactory.openSession();
try{
BlogMappermapper=session.getMapper(BlogMapper.class);
Blogblog=mapper.selectBlog(101);
}finally{
session.close();
}
MyBatis的缓存:
缓存技术是一种“以空间换时间”的设计理念,利用内存空间资源来提高数据检索速度的有效手段之一。MyBatis默认情况下是没有开启缓存的,除了局部的session缓存。要开启二级缓存,你需要在你的SQL映射文件中添加一行:
1、<cache/>这样配置会开启二级缓存,并且加载缺省的缓存配置
2、跟新缓存配置<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>这个配置创建了一个FIFO缓存,并每隔60秒刷新,存取512个结果对象或列表的引用,而且返回的对象为只读,因此在不同线程中的调用者之间修改它们会导致冲突。
注意:二级缓存是支持事物的,这意味着只有在SqlSession结束和提交的时候,或者当回滚结束并且插入、删除、更新操作没有配置flushCache=true,才会更新缓存内容。
3、第三方缓存要实现mybatis的接口:
Mybatis的用法:
resultType=""paramType=""实现参数或返回值,而且还实现动态的sql:用if判断<where><include>等.<resultMap>1、用于返回一个对象,对象里面包括部分信息.
<resultMapclass="包.User"id="User">
<resultproperty="name"column="NAME"/>
</resultMap>
<selectid="getUserByID"resultMap="User">
SelectNAMEfromUserwhereid=#id#
</select>
2、用于返回一个复杂的对象:返回的一个User对象中包含一个List<Role>对象
<resultMaptype="User"id="resultUser">
<idproperty="id"column="id"/>
<collectionproperty="role_list"column="id"select="selectRoleList"></collection>
注:column="id"表示他是selectRoleList的参数
</resultMap>
<selectid="selectRoleList"paramType="User"resultType="Role">
select*fromrolerleftjoinuseruonr.userId=u.idwhereu.id=#{id}
</select>