zoukankan      html  css  js  c++  java
  • MyBatis

    JPA:时ORM规范,不是ORM产品,面向JPA编程,就可以在各种ORM框架之间切换

    Hibernate:Jboss持久层解决方案

    MyBatis:不支持纯粹的面向对象操作,允许开发人员直接编写SQL语句,更加灵活

    MyBatis进行持久化操作步骤:

    1.开发持久化类PO和编写持久化操作的Mapper.xml,在xml中定义要执行的SQL语句

    2.获取SqlSessionFactory

    3.获取SqlSession

    4.用面向对象的方式操作数据库

    5.关闭事务,关闭SqlSession

    注意:

    每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心,其也是线程安全的,SqlSessionFactory一旦被创建,在运行期间不要重复创建,应该使用单例模式

    可以用SqlSession实例来直接执行已映射的SQL语句,每个线程都应该有他自己的SqlSession实例,SqlSession实例不能被共享,也是线程不安全的,绝对不能讲SqlSession实现的引用放在类的静态字段甚至是实例字段中,也不能方法任何类型的管理范围中

    初始化过程:

      InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //读取mybatis-config.xml文件

      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//初始化mybatis,创建SqlSessionFactory类的实例

      SqlSession session = sqlSessionFactory.openSession();//创建Session实例

    初始化步骤:

    1.调用SqlSessionFactoryBuilder对象的build(inputStream)方法

    2.SqlSessionFactoryBuilder根据输入流inputStream等信息创建XMLConfigBuilder对象

    3.SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法

    4.XMLConfigBuilder对象解析XML配置文件返回Configuration对象

    5.SqlSessionFactoryBuilder根据Configuration对象创建一个DefaultSessoinFactory对象

    6.SqlSessionFactoryBuilder返回DefaultSessionFactory对象给客户端,供客户端使用

    推荐使用mapper接口的代理对象访问mybatis:

    mapper接口的类名必须和xml文件中对应的mapper的namespace一致,方法名和参数也必须与<select.../>标签中的一致

    public interface PersonMapper{Persoin selectPersionById(Integer id);}

    通过SqlSession实例的getMapper(PersoinMapper.class)或者PersionMapper实例进行数据库操作

    关联:

    1对1:<association ... />

    1对多和多对多:<collection ... />

    动态SQL:

    常用的动态SQL元素:if, choose(when、otherwise),where,set,foreach,bind

    <if test="boolean语句">sql语句</if>

    MyBatis事务管理

    两种形式:

      使用JDBC的事务管理机制,即利用java.sql.Connection对象完成对事务的提交、回滚和关闭等操作

      使用MANGED的事务管理机制,MyBatis不会去实现事务管理,而是让容器如WebLogic、JBOSS等来实现对事务的管理

    通过<transactionMannager type = "JDBC/MANAGED"/>来配置

    通过TransactionFactory事务工厂来创建事务

    MyBatis的缓存机制:

    提供查询缓存,分为一级缓存-SqlSession级别的缓存,二级缓存-mapper级别的缓存,二级缓存是多个SqlSession共享的

    一级缓存(SqlSession级别):

      在SqlSession对象中有一个HashMap用于存储缓存数据,不同SqlSession之间的缓存区域(HashMap)互相不影响

      作用于是SqlSession范围,在同一个SqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写入缓存(内存),第二次会从缓存中获取

      如果执行了DML操作(insert,update,delete),并提交到数据库,MyBatis会晴空一级缓存

      一级缓存默认开启,不需配置

    二级缓存(mapper级别):

      多个SqlSession使用同一个Mapper的sql语句去操作数据库,得到的数据会存在二级缓存区域,也是使用HashMap进行数据存储。

      相比一级缓存SqlSession,二级缓存范围更大,多个SqlSession可以共用二级缓存,是跨SqlSession的

      二级缓存默认未开启,需要在setting全局参数中配置

      映射的java对象必须实现序列化和反序列化接口

      eviction:回收策略,有4个:

        LRU:最近最少使用策略,移除最长时间不被使用的对象

        FIFO:先进先出策略

        SOFT:软引用策略

        WEAK:弱引用策略

  • 相关阅读:

    模块
    序列化模块
    time模块、os模块、sys模块
    re模块、collections模块、random模块
    正则表达式
    递归函数和二分查找
    匿名函数
    推推导式和内置函数
    Java引用类型与值类型——Java面向对象基础(7)
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7301273.html
Copyright © 2011-2022 走看看