• mybatis缓存


    mybatis的延迟加载和缓存技术开始 
    mybatis一级缓存 
    这里写图片描述 
    mybatis的二级缓存

    mybatis默认是没有开启二级缓存的。 
    开启二级缓存需要在mybatis的全局配置文件sqlMapConfig.xml中加入 

    除了开启二级缓存开关外,还需要在各自的mapper.xml中开启二级缓存。 
    这里写图片描述

    原理图: 
    这里写图片描述 
    如上图:sqlsession1去查询id为1的用户信息,查询到用户信息就会查询数据存放在二级缓存区域(hashmap)中
    sqlsession2去查询id为1的用户信息,首先去缓存中查找是否存在数据,如果存在就直接从二级缓存中取出数据。 
    二级缓存和一级缓存的区别:二级缓存的范围更大,多个sqlsession 
    可以共享usermapper的二级缓存。 
    二级缓存是根据mapper的namespace来划分的,相同namaspace下的mapper共享二级缓存,反之 
    如果sqlsession3去执行相同mapper下sql,并执行commit()操作,则清空该命名空间下的二级缓存

    二级缓存的测试代码:

    这里写图片描述

    上面涂黄部分要特别注意,sqlsession关闭时才可以把数据写到二级缓存区域中,如果本namespace下的sqlsession执行了commit()操作,二级缓存就会清空

    禁用二级缓存 
    也可以禁用单个查询的二级缓存,这样要保证每次查询的都是最新数据。 
    这里写图片描述

    刷新二级缓存(就是清空缓存,切记) 
    这里写图片描述 
    总结:一般情况下,执行commit()操作之后,都要刷新缓存,因此flushCache都设为true,来避免数据的脏读。

    mybatis cache的参数设置 
    flushInterval(刷新间隔),可以为任意整数,单位为毫秒值,这个比较有用。

    整合方法 
    mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,实现cache接口即可 
    mybatis和ehcache整合,mybatis和ehcache整合包中提供了一个cache接口的实现类。 
    这里写图片描述

    二级缓存的应用场景(实际开发中用 刷新间隔) 
    这里写图片描述

    二级缓存额局限性 
    这里写图片描述 
    细粒度缓存,就是修改一个商品信息(即执行commit()方法),只修改缓存中这一个商品的信息,其余的信息不清空。

    mybatis的延迟加载和缓存技术结束

    mybatis和spring的整合(重点掌握)开始

    1、整合的思路: 
    (1)首先需要spring通过单例方式管理sqlSessionFactory 
    (2)spring和mybatis整合生成代理对象,使用SqlSessionFactory创建sqlSession会话(此步是由spring和mybatis整合自动完成) 
    (3)持久层的mapper,dao都需要由spring来管理 
    2、环境的搭建 
    这里写图片描述 
    上面的sqlmap目录下的User.xml是为了原始dao开发使用的。还要加载spring,mybatis,mybatis-srping等jar包。 
    3、在spring的配置文件中配置sqlSessionFactory和数据源 
    sqlSessionFactory在mybatis和spring的整合包下 
    这里写图片描述 
    上图中:使用C3P0配置数据库连接池,属性参数名要按照规定写,不能自己定义,否则会报错,而使用dbcp就可以自定义参数名,这点注意。 
    在加载配置文件时,都要加上类路径名classpath 
    在使用原始dao开发时,属性name值要与UserDaoImpl类中变量名一致(特别是大小写) 
    4、*原始Dao的开发(和spring整合后)* 
    4.1 User.xml(也称mapper.xml更准确) 
    这里写图片描述
    和spring整合后,需要使用spring来管理mapper,spring配置文件为applicationContext.xml 
    还有mybatis的配置文件来加载User.xml 
    这里写图片描述 
    4.2 UserDAO 
    这里写图片描述 
    基本上不用改变 
    4.3 UserDaoImpl(重点在Dao的实现类上) 
    这里写图片描述
    上图中的代码最重要的就是继承了SqlSessionDaoSupport通过this.getSqlSession()来得到SqlSession会话 
    这里也不需要写sqlSession的事务提交(更新操作不用写)和sqlSession关闭 
    4.4 测试代码 
    这里写图片描述

    5、使用mapper代理来开发 (mybatis和spring整合后) 
    和利用原始dao开发差不多,只是不需要dao接口的实现类 
    而是根据一个规范来实现dao接口生成代理对象

    5.1规范: 
    (1)mapper.xml中的namespace命名空间等于mapper.java的全路径名 
    这里写图片描述
    (2)mapper.xml和mapper.java应在同一个目录下 
    这里写图片描述 
    (3)mapper.xml中的statement语句的输入参数paramType类型应与mapper.java中方法中传递的参数类型一致
    这里写图片描述 
    这里写图片描述
    (4)mapper.xml中的statement语句的输出参数resultType类型应与mapper.java中方法返回值类型一致 
    这里写图片描述 
    这里写图片描述
    5.2 让spring来管理mapper,在配置文件中 
    这里写图片描述 
    重点在这里,使用mybatis和spring的整合包中MapperFactoryBean来实现mapper接口生成代理对象 
    属性值有mapperInterface和sqlSessionFactory 
    总结:此方法存在一个大问题,需要针对每个mapper进行配置,太麻烦 
    终极解决方案: 通过mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册 
    这里写图片描述

    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    • 1

    上面代码,不能使用ref而是使用value,刚开始用错了。 
    开发中推荐使用自动扫描, 
    mybatis和spring的整合(重点掌握)结束 
    mybatis的逆向工程(了解会用就行) 
    这里写图片描述
    generator.xml的配置,这里要记住,上图中最下边table后面的一长串值等于false的属性,是为了不生成其他与我们无关的example等代码 
    下面需要mybatis-generator-core-1.3.2.jar和generator.xml文件在同于目录下,并且建立src目录接收生成的文件
    这里写图片描述
    生成后的如下图 
    这里写图片描述 
    没有了example的无用类了,比较干净,推荐使用

     
    2
  • 相关阅读:
    《天才在左,疯子在右》
    MVC思想概述
    java文件读写
    HTTP协议简单笔记
    自学Python_Day01
    Linux基础介绍篇
    PHP学习 Day_01
    Linux中部分命令英语全拼
    Linux学习基础命令(三)
    Linux学习基础命令(二)
  • 原文地址:https://www.cnblogs.com/panxuejun/p/5851010.html
Copyright © 2020-2023  润新知