mybatis

一、持久层封装包括JDBC的连接封装和SQL语句的封装,而mybatis只对JDBC进行了封装,是一种半自动的持久层封装。

  1、行数据思想,即对象----(映射)----sql语句

  2、一些类:(1)、SqlSessionFactory 用于生产SqlSession对象的工厂,SqlSession类即JDBC连接类。

public class DBUtil {

  private static SqlSessionFactory sqlSessionFactory;

  static{

  InputStream in = null;

  try {
    in = Resources.getResourceAsStream("mybatis.cfg.xml");//从配置文件中读取配置信息,将配置信息读入到输入流中
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//根据工厂的创建类来创建Session工厂
    } catch (Exception e) {
    // TODO: handle exception
      e.printStackTrace();
       }
    }

  public static SqlSession getSession(){
    return sqlSessionFactory.openSession();
  }

}

      (2)、Configuration  配置类----数据源配置信息(写在“mybatis.cfg.xml”里),sql 映射配置信息;

<environments default="first">
  <!-- 一个数据源对应一个环境配置 -->
  <environment id="first">

    <!-- 配置事务管理器,type="JDBC"表示使用JDBC事务处理机制来处理事务,MANAGED表示什么都不干,等待外部容器或者其他应用程序来处理事务 -->
    <transactionManager type="JDBC"></transactionManager>

    <!-- 配置数据源,type="POOLED"表示使用JDBC连接池;
    UNPOOLED表示不使用JDBC连接池,也就是说每次请求就分别对应一个连接 ;
    JNDI表示需要依赖外部容器提供连接池-->

    <dataSource type="POOLED">
      <property name="driver" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost:3306/user?useUnicode=true&amp;characterEncoding=UTF-8"/>
      <property name="username" value="root"/>
      <property name="password" value="tusheng"/>
    </dataSource>
   </environment>
</environments>

二、mybatis中动态拼接语句:

  1、where--if  当需要判断参数的状态时使用,如用户输入查询,可能为空,需要用if标签判断是否为空;

  2、foreach  在批量操作时使用,遍历参数集合或数组,批量进行操作;

  3、include--SQL 在有好几个SQL语句有相同部分的时候,用SQL标签将重复部分提出来,引用使用include标签的refid属性,值为需要引用SQL标签的ID;

  4、set--if  在修改信息需要判断参数状态时使用;

  5、trim--if 与where--if用法基本一致;

  6、choose--when  等同于Java中的switch--case

三、mybatis缓存

  1、缓存可以放置的数据:(1)、数据量小;(2)、数据变化很少;(3)、数据的并发访问较少。

  2、分类:缓存对象、缓存SQL查询语句与对象集合的一个map键值对;

  3、范围:事务级缓存(一级缓存):通过session维护,基于session生命周期实现;在同一个事务缓存中,每一个持久化类的对象是唯一的。

        应用级缓存(二级缓存):由SessionFactory实现,所有用一个SessionFactory创建的session对象共享此缓存。

        分布式(集群)缓存:适用于大型项目。

  4、在mybatis中使用缓存

    (1)、开启缓存机制,要求所有映射器都支持缓存  <settings>

    (2)、为需要缓存的.xml映射器配置缓存  <cache/>

    (3)、在某个需要缓存的select标签添加useCache属性值为true

    (4)、同一个session对象,如果不关闭,那么后续直接从session对象中抽取对象,若关闭一级缓存(即关闭session),数据被推送到SessionFactory里。

    (5)、现在一般不使用mybatis的二级缓存。

原文地址:https://www.cnblogs.com/tushengadbm/p/5686494.html