![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Mybatis
OneTask
这个作者很懒,什么都没留下…
展开
-
【Mybatis源码分析 15】mybatis整合redis做二级缓存
目录MyBatis二级缓存出现的原因使用mybatis自带的二级缓存mybatis配置文件中settings开启二级缓存@CacheNameSpace使用二级缓存@Cacheable添加缓存@CacheEvict清除指定区域的缓存测试debug打印日志PerpetualCache的实现原理外接第三方缓存pom.xml中添加mybatis-redis依赖resource资源文件夹下配置redis.properties二级缓存的应用场景二级缓存缺点.原创 2020-07-05 13:45:26 · 280 阅读 · 0 评论 -
【Mybatis源码分析 14】mybatis连接池源码分析
什么是连接池存储连接的容器为什么要使用连接池由于每次执行sql语句都去创建connection和使用完销毁耗时,使用连接池来管理连接,提高连接的使用率(跟java线程池的概念类似)源码分析mybatis提供三种数据库连接池的选择配置文件的enviroment节点的datasource子标签1. type="POOLED",对应org.apache.ibatis.datasource.pooled.PoolDataSource连接池;2. type="UNPOOLED, 对应o原创 2020-06-26 21:18:16 · 348 阅读 · 0 评论 -
【Mybatis源码分析 13】mybatis核心思想-动态代理,由此梳理一下反射、动态代理及其和静态代理的区别
代理代理类的作用就是隐藏具体的被代理对象,可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。静态代理运行前就定义好了静态代理类和被代理类之间的关系,并且静态代理类和被代理类应该共同实现同一个接口。静态代理实现了目标对象的所有方法,一旦目标接口增加方法,代理对象和目标对象都要进行相应的修改,增加维护成本。动态代理通过代理对象将被代理对象的方法和参数传递给InvocationHandler的invoke方法统一执行。其中涉及三个重要的内容:反射、Pr.原创 2020-06-03 22:12:43 · 210 阅读 · 0 评论 -
【Mybatis源码分析 12】mybatis的一级缓存和二级缓存,@CachNamespace注解开启mapper接口的二级缓存
1. 一级缓存默认开启,属于SqlSession级别同一个SqlSession执行查询,结果存储在缓存中,下次查询直接从缓存中取,直到进行了插入、修改或删除等操作或手动清空缓存。2. 二级缓存,属于mapper级别1)全局配置文件中settings设置开启二级缓存2)映射文件中使用cache标签3)pojo对象实现Serializable(二级缓存的只读属性设置为false,每次从缓存中拿到查询结果的副本,就是通过对象反序列化得到的,所以要求pojo对象实现序列化接口)mapper.原创 2020-06-03 00:41:57 · 795 阅读 · 0 评论 -
【Mybatis源码分析 11】多表查询一对一、多对一、一对多、多对多,@One和@Many实现分步查询,fetchType控制延迟加载
当某个字段比较占内存,但不常用时,比如存储一本书book,分很多章节,章节内容不需要在浏览的时候就查询获取到,只需要章节标题标识即可,这中情况下多进行分表存储,采用分布查询的方式获取章节内容。数据库准备:bookbody 记录章节标题(title)和章节内容(booy),book记录章节(chapter)、章节标题(title)、该章节是否免费(isfree)和该章节内容是否下载(loaded)#建表CREATE TABLE bookbody (title VARCHAR(255) NOT N原创 2020-06-02 17:53:55 · 716 阅读 · 0 评论 -
【Mybatis源码分析 10】多条件组合查询又不想写很多@Select+dao方法,通过SqlProvider实现动态sql增强dao方法的复用性
目录@Select、@Insert、@Update、@Delete指定sql@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider引用SqlProvider类的方法根据参数生成动态sqlSqlProvider实现动态sql源码分析,关键对象ProviderSqlSource@Select、@Insert、@Update、@Delete指定sql数据库准备:假设体育比赛项目报名,添加form表格,记录报名学生的..原创 2020-06-02 15:07:24 · 436 阅读 · 0 评论 -
【Mybatis源码分析 9】@Param命名参数源码详解
【Mybatis源码分析 8】mybatis的mapper接口中dao方法并没有具体实现类,是怎么通过mapper动态代理运行的中讲到mybatis使用mapper接口方法,通过MapperProxy动态代理去执行MapperMethod的execute方法,从而执行CRUD操作。在MapperMethod对象创建的时候,初始化它的MethodSignature子类的实例成员时,会实例化一个ParamNameResolver参数名解析器,作用时将接口方法的注解描述的sql语句中的参数名解析为接口方法入参原创 2020-06-01 16:42:30 · 425 阅读 · 0 评论 -
【Mybatis源码分析 8】mybatis的mapper接口中dao方法并没有具体实现类,是怎么通过mapper动态代理运行的
准备工作1. 定义UserDAO接口,提供一个SelectByName抽象方法package DAO;import Entity.User;import org.apache.ibatis.annotations.*;@Mapperpublic interface UserDAO { @Select("select * from manage where name = #{name}") List<User> selectByName(String nam原创 2020-06-01 14:48:31 · 559 阅读 · 0 评论 -
【Mybatis源码分析 7】mapper.xml获取参数的两种方式源码分析:${}和#{},两种传参方式的差别
【Mybatis源码分析 6】XMLConfigBuilder将Mybatis全局配置文件.xml中设置的节点提取赋给Configuration对象中讲到SqlSessionFactoryBuilder创建SqlSessionFactory对象时,SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);将mybatis的全局配置文件中的11个节点提取并处理后赋给Configuration对象,其中就有map原创 2020-05-31 23:58:34 · 627 阅读 · 0 评论 -
【Mybatis源码分析 6】XMLConfigBuilder将Mybatis全局配置文件.xml中设置的节点提取赋给Configuration对象
mybatis的全局配置文件mybatis的全局配置文件中引用了mybatis-3-config.dtd<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration原创 2020-05-30 23:58:03 · 253 阅读 · 0 评论 -
【Mybatis源码分析 5】基于Mybatis整合Spring管理Sqlsession使用注解实现CRUD操作
【Mybatis 源码分析 3】基于Mybatis使用注解实现CRUD操作pom.xml中需要添加spring的依赖包 <dependencies> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactI原创 2020-05-29 22:30:36 · 227 阅读 · 0 评论 -
【Mybatis源码分析 4】Sqlsession进行CRUD操作的实现原理
SqlSession提供select/insert/update/delete方法,在旧版本中使用使用SqlSession接口的这些方法,但是新版的Mybatis中就会建议使用Mapper接口的方法。映射器其实就是一个动态代理对象,进入到MapperMethod的execute方法就能简单找到SqlSession的删除、更新、查询、选择方法,从底层实现来说:通过动态代理技术,让接口跑起来,之后采用命令模式,最后还是采用了SqlSession的接口方法(getMapper()方法等到Mapper)执行SQ原创 2020-05-28 23:54:55 · 339 阅读 · 0 评论 -
【Mybatis 源码分析 3】基于Mybatis使用注解实现CRUD操作
目录1. 定义数据库接口,定义接口方法,对应mapper.xml中的方法2. 修改myabtis-conf.xml配置文件中mappers映射器中的引用3. 通过Sqlsession对象getMapper方法实例化myabtis-conf.xml配置文件中mappers映射器引用的包下指定的接口对象,通过接口对象调用接口方法进行CRUD操作【Mybatis 源码分析 2】基于Mybatis使用mapper.xml实现CRUD操作使用.xml写sql方法还是比较麻烦的mybati.原创 2020-05-28 20:20:23 · 277 阅读 · 0 评论 -
【Mybatis 源码分析 2】基于Mybatis使用mapper.xml实现CRUD操作
接【Mybatis 源码分析 1】使用maven配置mybatis,之后,我们就可以开始增删查改数据库了。1. mapper.xml映射文件中添加增删查改的sql语句<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.d原创 2020-05-26 22:33:39 · 258 阅读 · 1 评论 -
【Mybatis 源码分析 1】使用maven配置mybatis
创建一个空maven项目pom.xml中导入相关的依赖包。为了帮助程序快速从远端仓库下载依赖包,可以去http://maven.apache.org/download.cgi下载Apache Maven这个软件项目管理及自动构建工具,然后在File->Settings->Build,Execution,Deployment->Maven中替换本地的settings.xml接着在pom.xml中配置mybatis、mysql 数据库连接以及测试用的jar包h.原创 2020-05-26 21:29:16 · 612 阅读 · 1 评论