丹调生活 发表于 2016-11-24 03:26:10

myBatis介绍

总体来说 MyBatis 主要完成两件事情:
    1、根据 JDBC 规范建立与数据库的连接;
    2、通过Annotaion/XML+JAVA反射技术,实现 Java对象与关系数据库之间相互转化。

原理介绍:
    Mybatis的应用是围绕着一个SqlSessionFactory实例展开的。SqlSessionFactoryBuilder根据XML映射文件创建SqlSessionFactory,有了SqlSessionFactory我们就可以获取SqlSession,而SqlSession拥有执行sql语句的各种方法.
    SqlSession session = sqlSessionFactory.openSession();
    try {
       BlogMapper mapper = session.getMapper(BlogMapper.class);
       Blog blog = 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、用于返回一个对象,对象里面包括部分信息.
   <resultMap class="包.User" id="User">
       <result property="name" column="NAME" />
   </resultMap>

<select id="getUserByID" resultMap="User">
       Select NAME from User where id =#id#
</select>

2、用于返回一个复杂的对象:返回的一个User对象中包含一个List<Role>对象
<resultMap type="User" id="resultUser">
      <id property="id" column="id"/>
      <collection property="role_list" column="id" select="selectRoleList"></collection>
      注:column = "id" 表示他是selectRoleList的参数
</resultMap>

   <select id="selectRoleList" paramType="User" resultType="Role">
       select * from role r left join user u on r.userId = u.id where u.id = #{id}
   </select>
页: [1]
查看完整版本: myBatis介绍