IT评测·应用市场-qidao123.com

标题: Java Mybatis 笔记 [打印本页]

作者: 我爱普洱茶    时间: 2023-3-14 19:56
标题: Java Mybatis 笔记
[url=https://so.csdn.net/so/search?q=MyBatis&spm=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
100<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1.2<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1.300<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1.7020]MyBatis[/url]


<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1、简介


<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1 什么是Mybatis


[img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
16463790.png[/img]
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1.2 持久化


数据持久化
为什么要持久化?
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1.3 持久层


Dao层、Service层、Controller层
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1.4 为什么需要MyBatis


2、第一个Mybatis程序

思路:搭建环境 --> 导入MyBatis --> 编写代码 --> 测试
2.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1 搭建环境


新建项目
[list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
1]
  • 创建一个普通的maven项目
  • 删除src目录 (就可以把此工程当做父工程了,然后创建子工程)
  • 导入maven依赖
    1. <dependencies>
    2.    
    3.     <dependency>
    4.         <groupId>mysql</groupId>
    5.         <artifactId>mysql-connector-java</artifactId>
    6.         <version>8.0.<setting name="cacheEnabled" value="true"/>
    7. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    8. 12</version>
    9.     </dependency>
    10.    
    11.     <dependency>
    12.         <groupId>org.mybatis</groupId>
    13.         <artifactId>mybatis</artifactId>
    14.         <version>3.5.4</version>
    15.     </dependency>
    16.    
    17.     <dependency>
    18.         <groupId>junit</groupId>
    19.         <artifactId>junit</artifactId>
    20.         <version>4.<setting name="cacheEnabled" value="true"/>
    21. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    22. 12</version>
    23.         <scope>test</scope>
    24.     </dependency>
    25. </dependencies>
    26. <setting name="cacheEnabled" value="true"/>
    27. <cache
    28.        eviction="FIFO"
    29.        flushInterval="60000"
    30.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    31. 12"
    32.        readOnly="true"/>
    33. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    34. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    35. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    36. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    37. 1<setting name="cacheEnabled" value="true"/>
    38. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    39. 12<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    40. 13<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    41. 14<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    42. 15<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    43. 16<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    44. 17<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    45. 18<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    46. 19202<setting name="cacheEnabled" value="true"/>
    47. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    48. 122
    复制代码
  • 创建一个Module
    2.2 创建一个模块

    2.3 编写代码

    可能会遇到的问题:
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 配置文件没有注册
  • 绑定接口错误
  • 方法名不对
  • 返回类型不对
  • Maven导出资源问题
    3、CURD

    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1. namespace


    namespace中的包名要和Dao/Mapper接口的包名一致
    2. select

    选择,查询语句;

    3. Insert

    4. update

    5. Delete

    6. 万能Map

    假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应该考虑使用Map!
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • UserMapper接口
    1. //用万能Map插入用户
    2. public void addUser2(Map<String,Object> map);
    3. <setting name="cacheEnabled" value="true"/>
    4. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    5. 12
    复制代码
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • UserMapper.xml
    1. <insert id="addUser2" parameterType="map">
    2.     insert into user (id,name,password) values (#{userid},#{username},#{userpassword})
    3. </insert>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 1234
    复制代码
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 测试
    1.     @Test
    2.     public void test3(){
    3.         SqlSession sqlSession = MybatisUtils.getSqlSession();
    4.         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    5.         HashMap<String, Object> map = new HashMap<String, Object>();
    6.         map.put("userid",4);
    7.         map.put("username","王虎");
    8.         map.put("userpassword",789);
    9.         mapper.addUser2(map);
    10.         //提交事务
    11.         sqlSession.commit();
    12.         //关闭资源
    13.         sqlSession.close();
    14.     }
    15. <setting name="cacheEnabled" value="true"/>
    16. <cache
    17.        eviction="FIFO"
    18.        flushInterval="60000"
    19.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    20. 12"
    21.        readOnly="true"/>
    22. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    23. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    24. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    25. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    26. 1<setting name="cacheEnabled" value="true"/>
    27. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    28. 12<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    29. 13<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    30. 14
    复制代码
    Map传递参数,直接在sql中取出key即可! 【parameter=“map”】
    对象传递参数,直接在sql中取出对象的属性即可! 【parameter=“Object”】
    只有一个基本类型参数的情况下,可以直接在sql中取到
    多个参数用Map , 或者注解!
    7. 模糊查询

    模糊查询这么写?
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • Java代码执行的时候,传递通配符% %
    1. List<User> userList = mapper.getUserLike("%李%");
    2. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 1
    复制代码
  • 在sql拼接中使用通配符
    1. select * from user where name like "%"#{value}"%"
    2. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 1
    复制代码
    4、配置解析

    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1. 核心配置文件


    2. 环境配置 environments

    MyBatis 可以配置成适应多种环境
    不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境
    学会使用配置多套运行环境!
    MyBatis默认的事务管理器就是JDBC ,连接池:POOLED
    3. 属性 properties

    我们可以通过properties属性来实现引用配置文件
    这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。【db.poperties】
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 编写一个配置文件
    db.properties
    1. driver=com.mysql.cj.jdbc.Driver
    2. url=jdbc:mysql://localhost:3306/mybatis?userSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    3. username=root
    4. password=root
    5. <setting name="cacheEnabled" value="true"/>
    6. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    7. 1234
    复制代码
  • 在核心配置文件中引入
    1. <properties resource="db.properties">
    2.     <property name="username" value="root"/>
    3.     <property name="password" value="root"/>
    4. </properties>
    5. <setting name="cacheEnabled" value="true"/>
    6. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    7. 12345
    复制代码

    4. 类型别名 typeAliases

    5. 设置 Settings

    这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16474822.png[/img]
    6. 其他配置

    7. 映射器 mappers

    MapperRegistry:注册绑定我们的Mapper文件;
    方式一:【推荐使用】
    1. <typeAliases>
    2.     <typeAlias type="com.kuang.pojo.User" alias="User"/>
    3. </typeAliases>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 1234
    复制代码
    方式二:使用class文件绑定注册
    1. <typeAliases>
    2.     <typeAlias type="com.kuang.pojo.User" alias="User"/>
    3. </typeAliases>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 1234
    复制代码
    注意点:
    方式三:使用包扫描进行注入
    1. <typeAliases>
    2.     <package name="com.kuang.pojo"/>
    3. </typeAliases>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 123
    复制代码
    8. 作用域和生命周期

    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    164809990.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70[/img]
    声明周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题
    SqlSessionFactoryBuilder:
    SqlSessionFactory:
    SqlSession:
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    164833872.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70[/img]
    5、解决属性名和字段名不一致的问题

    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1. 问题


    数据库中的字段
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    164845962.png[/img]
    新建一个项目,拷贝之前的,测试实体类字段不一致的情况
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    164853569.png[/img]
    测试出现问题
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16490<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    186<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1.png[/img]
    1. // select * from user where id = #{id}
    2. // 类型处理器
    3. // select id,name,pwd from user where id = #{id}
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 123
    复制代码
    解决方法:
    1. <select id="getUserById" resultType="com.kuang.pojo.User">
    2.     select id,name,pwd as password from USER where id = #{id}
    3. </select>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 123
    复制代码
    2. resultMap

    结果集映射
    id name pwd
    id name password
    1. <resultMap id="UserMap" type="User">
    2.    
    3.     <result column="id" property="id"></result>
    4.     <result column="name" property="name"></result>
    5.     <result column="pwd" property="password"></result>
    6. </resultMap>
    7. <select id="getUserList" resultMap="UserMap">
    8.     select * from USER
    9. </select>
    10. <setting name="cacheEnabled" value="true"/>
    11. <cache
    12.        eviction="FIFO"
    13.        flushInterval="60000"
    14.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    15. 12"
    16.        readOnly="true"/>
    17. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    18. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    19. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    20. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    21. 1
    复制代码
    6、日志

    6.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1 日志工厂


    如果一个数据库操作,出现了异常,我们需要排错,日志就是最好的助手!
    曾经:sout、debug
    现在:日志工厂
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    164920502.png[/img]
    在MyBatis中具体使用哪一个日志实现,在设置中设定
    STDOUT_LOGGING
    1. <typeAliases>
    2.     <package name="com.kuang.pojo"/>
    3. </typeAliases>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 123
    复制代码
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1649339<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70[/img]
    6.2 Log4j

    什么是Log4j?
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 先导入log4j的包
    1. <dependency>
    2.     <groupId>log4j</groupId>
    3.     <artifactId>log4j</artifactId>
    4.     <version><cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    5. 1.2.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 17</version>
    7. </dependency>
    8. <setting name="cacheEnabled" value="true"/>
    9. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10. 12345
    复制代码
  • log4j.properties
    1. #将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
    2. log4j.rootLogger=DEBUG,console,file
    3. #控制台输出的相关设置
    4. log4j.appender.console = org.apache.log4j.ConsoleAppender
    5. log4j.appender.console.Target = System.out
    6. log4j.appender.console.Threshold=DEBUG
    7. log4j.appender.console.layout = org.apache.log4j.PatternLayout
    8. log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
    9. #文件输出的相关设置
    10. log4j.appender.file = org.apache.log4j.RollingFileAppender
    11. log4j.appender.file.File=./log/rzp.log
    12. log4j.appender.file.MaxFileSize=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13. 10mb
    14. log4j.appender.file.Threshold=DEBUG
    15. log4j.appender.file.layout=org.apache.log4j.PatternLayout
    16. log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
    17. #日志输出级别
    18. log4j.logger.org.mybatis=DEBUG
    19. log4j.logger.java.sql=DEBUG
    20. log4j.logger.java.sql.Statement=DEBUG
    21. log4j.logger.java.sql.ResultSet=DEBUG
    22. log4j.logger.java.sq<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    23. 1.PreparedStatement=DEBUG
    24. <setting name="cacheEnabled" value="true"/>
    25. <cache
    26.        eviction="FIFO"
    27.        flushInterval="60000"
    28.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    29. 12"
    30.        readOnly="true"/>
    31. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    32. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    33. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    34. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    35. 1<setting name="cacheEnabled" value="true"/>
    36. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    37. 12<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    38. 13<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    39. 14<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    40. 15<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    41. 16<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    42. 17<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    43. 18<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    44. 19202<setting name="cacheEnabled" value="true"/>
    45. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    46. 122
    复制代码
  • 配置settings为log4j实现
  • 测试运行
    Log4j简单使用
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 在要使用Log4j的类中,导入包 import org.apache.log4j.Logger;
  • 日志对象,参数为当前类的class对象
    1. Logger logger = Logger.getLogger(UserDaoTest.class);
    2. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 1
    复制代码
  • 日志级别
    1. logger.info("info: 测试log4j");
    2. logger.debug("debug: 测试log4j");
    3. logger.error("error:测试log4j");
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 123
    复制代码
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • info
  • debug
  • error

    7、分页

    思考:为什么分页?
    7.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1 使用Limit分页

    1. SELECT * from user limit startIndex,pageSize
    2. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 1
    复制代码
    使用MyBatis实现分页,核心SQL
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 接口
    1. //分页
    2. List<User> getUserByLimit(Map<String,Integer> map);
    3. <setting name="cacheEnabled" value="true"/>
    4. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    5. 12
    复制代码
  • Mapper.xml
    1. <select id="getUserByLimit" parameterType="map" resultMap="UserMap">
    2.     select * from user limit #{startIndex},#{pageSize}
    3. </select>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 1234
    复制代码
  • 测试
    1.     @Test
    2.     public void getUserByLimit(){
    3.         SqlSession sqlSession = MybatisUtils.getSqlSession();
    4.         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    5.         HashMap<String, Integer> map = new HashMap<String, Integer>();
    6.         map.put("startIndex",<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    7. 1);
    8.         map.put("pageSize",2);
    9.         List<User> list = mapper.getUserByLimit(map);
    10.         for (User user : list) {
    11.             System.out.println(user);
    12.         }
    13.     }
    14. <setting name="cacheEnabled" value="true"/>
    15. <cache
    16.        eviction="FIFO"
    17.        flushInterval="60000"
    18.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    19. 12"
    20.        readOnly="true"/>
    21. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    22. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    23. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    24. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    25. 1<setting name="cacheEnabled" value="true"/>
    26. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    27. 12
    复制代码
    7.2 RowBounds分页

    不再使用SQL实现分页
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 接口
    1. //分页2
    2. List<User> getUserByRowBounds();
    3. <setting name="cacheEnabled" value="true"/>
    4. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    5. 12
    复制代码
  • mapper.xml
    1. <select id="getUserByLimit" parameterType="map" resultMap="UserMap">
    2.     select * from user limit #{startIndex},#{pageSize}
    3. </select>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 1234
    复制代码
  • 测试
    1.     public void getUserByRowBounds(){
    2.         SqlSession sqlSession = MybatisUtils.getSqlSession();
    3.         //RowBounds实现
    4.         RowBounds rowBounds = new RowBounds(<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    5. 1, 2);
    6.         //通过Java代码层面实现分页
    7.         List<User> userList = sqlSession.selectList("com.kaung.dao.UserMapper.getUserByRowBounds", null, rowBounds);
    8.         for (User user : userList) {
    9.             System.out.println(user);
    10.         }
    11.         sqlSession.close();
    12.     }
    13. <setting name="cacheEnabled" value="true"/>
    14. <cache
    15.        eviction="FIFO"
    16.        flushInterval="60000"
    17.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    18. 12"
    19.        readOnly="true"/>
    20. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    21. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    22. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    23. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    24. 1
    复制代码
    7.3 分页插件

    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    164958936.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70[/img]
    8、使用注解开发

    8.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1 面向接口开发


    三个面向区别
    8.2 使用注解开发

    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 注解在接口上实现
    1. @Select("select * from user")
    2. List<User> getUsers();
    3. <setting name="cacheEnabled" value="true"/>
    4. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    5. 12
    复制代码
  • 需要在核心配置文件中绑定接口
    1. <typeAliases>
    2.     <package name="com.kuang.pojo"/>
    3. </typeAliases>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 123
    复制代码
  • 测试
    本质:反射机制实现
    底层:动态代理
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1650<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    14965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70[/img]
    MyBatis详细执行流程
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    165030775.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70#pic_center[/img]
    8.3 注解CURD
    1. //方法存在多个参数,所有的参数前面必须加上@Param("id")注解
    2. @Delete("delete from user where id = ${uid}")
    3. int deleteUser(@Param("uid") int id);
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 123
    复制代码
    关于@Param( )注解
    #{} 和 ${}
    9、Lombok

    Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。
    使用步骤:
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 在IDEA中安装Lombok插件
  • 在项目中导入lombok的jar包
    1. <dependency>
    2.     <groupId>org.projectlombok</groupId>
    3.     <artifactId>lombok</artifactId>
    4.     <version><cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    5. 1.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 18.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    7. 10</version>
    8.     <scope>provided</scope>
    9. </dependency>
    10. <setting name="cacheEnabled" value="true"/>
    11. <cache
    12.        eviction="FIFO"
    13.        flushInterval="60000"
    14.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    15. 12"
    16.        readOnly="true"/>
    17. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    18. 123456
    复制代码
  • 在程序上加注解
    1. @Getter and @Setter
    2. @FieldNameConstants
    3. @ToString
    4. @EqualsAndHashCode
    5. @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
    6. @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
    7. @Data
    8. @Builder
    9. @SuperBuilder
    10. @Singular
    11. @Delegate
    12. @Value
    13. @Accessors
    14. @Wither
    15. @With
    16. @SneakyThrows
    17. @val
    18. <setting name="cacheEnabled" value="true"/>
    19. <cache
    20.        eviction="FIFO"
    21.        flushInterval="60000"
    22.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    23. 12"
    24.        readOnly="true"/>
    25. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    26. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    27. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    28. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    29. 1<setting name="cacheEnabled" value="true"/>
    30. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    31. 12<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    32. 13<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    33. 14<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    34. 15<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    35. 16<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    36. 17
    复制代码
    说明:
    1. @Data
    2. @AllArgsConstructor
    3. @NoArgsConstructor
    4. public class User {
    5.     private int id;
    6.     private String name;
    7.     private String password;
    8. }
    9. <setting name="cacheEnabled" value="true"/>
    10. <cache
    11.        eviction="FIFO"
    12.        flushInterval="60000"
    13.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    14. 12"
    15.        readOnly="true"/>
    16. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    17. 12345678
    复制代码
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    165052<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    167.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70[/img]
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10、多对一处理


    多个学生一个老师;
    1. alter table student ADD CONSTRAINT fk_tid foreign key (tid) references teacher(id)
    2. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 1
    复制代码
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1. 测试环境搭建


    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 导入lombok
  • 新建实体类Teacher,Student
  • 建立Mapper接口
  • 建立Mapper.xml文件
  • 在核心配置文件中绑定注册我们的Mapper接口或者文件 【方式很多,随心选】
  • 测试查询是否能够成功
    2. 按照查询嵌套处理
    1. <select id="getStudent" resultMap="StudentTeacher">
    2.     select * from student
    3. </select>
    4. <resultMap id="StudentTeacher" type="student">
    5.     <result property="id" column="id"/>
    6.     <result property="name" column="name"/>
    7.    
    8.     <collection property="teacher" column="tid" javaType="teacher" select="getTeacher"/>
    9. </resultMap>
    10. <select id="getTeacher" resultType="teacher">
    11.     select * from teacher where id = #{id}
    12. </select>
    13. <setting name="cacheEnabled" value="true"/>
    14. <cache
    15.        eviction="FIFO"
    16.        flushInterval="60000"
    17.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    18. 12"
    19.        readOnly="true"/>
    20. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    21. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    22. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    23. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    24. 1<setting name="cacheEnabled" value="true"/>
    25. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    26. 12<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    27. 13<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    28. 14<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    29. 15<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    30. 16<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    31. 17
    复制代码
    3.按照结果嵌套处理
    1.                 select s.id sid , s.name sname, t.name tname        from student s,teacher t        where s.tid=t.id                                                    <properties resource="db.properties">
    2.     <property name="username" value="root"/>
    3.     <property name="password" value="root"/>
    4. </properties>
    5. <setting name="cacheEnabled" value="true"/>
    6. <cache
    7.        eviction="FIFO"
    8.        flushInterval="60000"
    9.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10. 12"
    11.        readOnly="true"/>
    12. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    14. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    15. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16. 1<setting name="cacheEnabled" value="true"/>
    17. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    18. 12<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    19. 13<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    20. 14
    复制代码
    回顾Mysql多对一查询方式:
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1、一对多处理


    一个老师多个学生;
    对于老师而言,就是一对多的关系;
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1. 环境搭建


    实体类
    1. @Data
    2. public class Student {
    3.     private int id;
    4.     private String name;
    5.     private int tid;
    6. }
    7. <setting name="cacheEnabled" value="true"/>
    8. <cache
    9.        eviction="FIFO"
    10.        flushInterval="60000"
    11.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    12. 12"
    13.        readOnly="true"/>
    14. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    15. 123456
    16. @Data
    17. public class Teacher {
    18.     private int id;
    19.     private String name;
    20.     //一个老师拥有多个学生
    21.     private List<Student> students;
    22. }
    23. <setting name="cacheEnabled" value="true"/>
    24. <cache
    25.        eviction="FIFO"
    26.        flushInterval="60000"
    27.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    28. 12"
    29.        readOnly="true"/>
    30. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    31. 12345678
    复制代码
    2. 按照结果嵌套嵌套处理
    1.     SELECT s.id sid, s.name sname,t.name tname,t.id tid FROM student s, teacher t    WHERE s.tid = t.id AND tid = #{tid}                                    <properties resource="db.properties">
    2.     <property name="username" value="root"/>
    3.     <property name="password" value="root"/>
    4. </properties>
    5. <setting name="cacheEnabled" value="true"/>
    6. <cache
    7.        eviction="FIFO"
    8.        flushInterval="60000"
    9.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10. 12"
    11.        readOnly="true"/>
    12. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    14. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    15. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16. 1<setting name="cacheEnabled" value="true"/>
    17. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    18. 12<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    19. 13<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    20. 14<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    21. 15<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    22. 16<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    23. 17<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    24. 18
    复制代码
    小结

    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 关联 - association 【多对一】
  • 集合 - collection 【一对多】
  • javaType & ofType[list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • JavaType用来指定实体类中的类型
  • ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型

    注意点:
    面试高频
    <setting name="cacheEnabled" value="true"/>
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    12、动态SQL


    什么是动态SQL:动态SQL就是根据不同的条件生成不同的SQL语句
    所谓的动态SQL,本质上还是SQL语句,只是我们可以在SQL层面,去执行一个逻辑代码
    动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。
    搭建环境
    1. CREATE TABLE `mybatis`.`blog`  (
    2.   `id` int(<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 10) NOT NULL AUTO_INCREMENT COMMENT '博客id',
    4.   `title` varchar(30) NOT NULL COMMENT '博客标题',
    5.   `author` varchar(30) NOT NULL COMMENT '博客作者',
    6.   `create_time` datetime(0) NOT NULL COMMENT '创建时间',
    7.   `views` int(30) NOT NULL COMMENT '浏览量',
    8.   PRIMARY KEY (`id`)
    9. )
    10. <setting name="cacheEnabled" value="true"/>
    11. <cache
    12.        eviction="FIFO"
    13.        flushInterval="60000"
    14.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    15. 12"
    16.        readOnly="true"/>
    17. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    18. 12345678
    复制代码
    创建一个基础工程
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 导包
  • 编写配置文件
  • 编写实体类
    1. @Data
    2. public class Blog {
    3.     private int id;
    4.     private String title;
    5.     private String author;
    6.     private Date createTime;// 属性名和字段名不一致
    7.     private int views;
    8. }
    9. <setting name="cacheEnabled" value="true"/>
    10. <cache
    11.        eviction="FIFO"
    12.        flushInterval="60000"
    13.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    14. 12"
    15.        readOnly="true"/>
    16. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    17. 123456789
    复制代码
  • 编写实体类对应Mapper接口和Mapper.xml文件
    IF
    1.     select * from blog                        and title = #{title}                            and author = #{author}    <properties resource="db.properties">
    2.     <property name="username" value="root"/>
    3.     <property name="password" value="root"/>
    4. </properties>
    5. <setting name="cacheEnabled" value="true"/>
    6. <cache
    7.        eviction="FIFO"
    8.        flushInterval="60000"
    9.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10. 12"
    11.        readOnly="true"/>
    12. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    14. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    15. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16. 1
    复制代码
    choose (when, otherwise)

    trim、where、set

    SQL片段

    有的时候,我们可能会将一些功能的部分抽取出来,方便服用!
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 使用SQL标签抽取公共部分可
    1.             title = #{title}                and author = #{author}<typeAliases>
    2.     <typeAlias type="com.kuang.pojo.User" alias="User"/>
    3. </typeAliases>
    4. <setting name="cacheEnabled" value="true"/>
    5. <cache
    6.        eviction="FIFO"
    7.        flushInterval="60000"
    8.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    9. 12"
    10.        readOnly="true"/>
    11. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    12. 12345678
    复制代码
  • 在需要使用的地方使用Include标签引用即可
    1.     select * from blog        <properties resource="db.properties">
    2.     <property name="username" value="root"/>
    3.     <property name="password" value="root"/>
    4. </properties>
    5. <setting name="cacheEnabled" value="true"/>
    6. <cache
    7.        eviction="FIFO"
    8.        flushInterval="60000"
    9.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10. 12"
    11.        readOnly="true"/>
    12. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13. 123456
    复制代码
    注意事项:
    动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了
    建议:
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13、缓存


    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1 简介


    查询 : 连接数据库,耗资源
    一次查询的结果,给他暂存一个可以直接取到的地方 --> 内存:缓存
    我们再次查询的相同数据的时候,直接走缓存,不走数据库了
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 什么是缓存[Cache]?

  • 为什么使用缓存?

  • 什么样的数据可以使用缓存?

    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13.2 MyBatis缓存


    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13.3 一级缓存


    测试步骤:
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 开启日志
  • 测试在一个Session中查询两次记录
    1.     @Test
    2.     public void test<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 1() {
    4.         SqlSession sqlSession = MybatisUtils.getSqlSession();
    5.         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    6.         User user = mapper.getUserById(<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    7. 1);
    8.         System.out.println(user);
    9.         System.out.println("=====================================");
    10.         User user2 =  mapper.getUserById(<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    11. 1);
    12.         System.out.println(user2 == user);
    13.     }
    14. <setting name="cacheEnabled" value="true"/>
    15. <cache
    16.        eviction="FIFO"
    17.        flushInterval="60000"
    18.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    19. 12"
    20.        readOnly="true"/>
    21. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    22. 123456789<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    23. 10<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    24. 1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    25. 1<setting name="cacheEnabled" value="true"/>
    26. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    27. 12
    复制代码
  • 查看日志输出
    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    165<setting name="cacheEnabled" value="true"/>
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    129955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70[/img]
    缓存失效的情况:
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 查询不同的东西
  • 增删改操作,可能会改变原来的数据,所以必定会刷新缓存
  • 查询不同的Mapper.xml
  • 手动清理缓存
    1. sqlSession.clearCache();
    2. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 1
    复制代码
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13.4 二级缓存


    一级缓存开启(SqlSession级别的缓存,也称为本地缓存)
    步骤:
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 开启全局缓存
    1. <setting name="cacheEnabled" value="true"/>
    2. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 12
    复制代码
  • 在Mapper.xml中使用缓存
    1. <setting name="cacheEnabled" value="true"/>
    2. <cache
    3.        eviction="FIFO"
    4.        flushInterval="60000"
    5.        size="5<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    6. 12"
    7.        readOnly="true"/>
    8. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    9. 123456
    复制代码
  • 测试
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 问题:我们需要将实体类序列化,否则就会报错

    小结:
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13.5 缓存原理


    [img]https://img-blog.csdnimg.cn/20200623<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    165404<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RERERlbmdf,size_<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    16,color_FFFFFF,t_70#pic_center[/img]
    注意:
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    13.6 自定义缓存-ehcache


    Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存
    [list=<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    1]
  • 导包
    1.     org.mybatis.caches    mybatis-ehcache    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    2. 1.2.<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    3. 1<setting name="cacheEnabled" value="true"/>
    4. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    5. 12345
    复制代码
  • 在mapper中指定使用我们的ehcache缓存实现
    1. <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    2. 1
    复制代码

    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




    欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4