zoukankan      html  css  js  c++  java
  • 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的二级缓存。

  • 相关阅读:
    【总结】图论算法
    【算法】Escape
    【算法】哈密顿环绕世界
    【算法】BFS+哈希解决八数码问题
    【算法设计】(综合)博弈树的了解与创建
    【搜索】Shuffle'm Up
    西邮linux兴趣小组2014纳新免试题(一)
    无线路由器入侵实战
    中国移动飞信WAP登陆分析及脚本
    WPA/WPA2加密破解
  • 原文地址:https://www.cnblogs.com/tushengadbm/p/5686494.html
Copyright © 2011-2022 走看看