![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mybatis
文章平均质量分 77
Cry丶
/*有些梦虽然遥不可及, 但却并不是不可以实现*/<br>
写博客的原因(告戒自己):
1.记录自己的成长, 是非对错10年后回望;
2.我踩过的坑,同仁们就不要再迈了;
3.开源精神 理想主义 利他主义。
展开
-
【Mybatis源码解析】Mybatis源码中涉及的设计模式总结
虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;工厂模式,例如SqlSessionFactory、ObjectFact原创 2022-02-07 17:26:46 · 207 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis执行Sql的流程分析
本章着重介绍MyBatis执行Sql的流程,关于在执行过程中缓存、动态SQl生成等细节不在本章中体现还是以之前的查询作为例子:public class App { public static void main(String[] args) { String resource = "mybatis-config.xml"; Reader reader; try { //将XML配置文件构建为Configuration配置类原创 2022-02-07 11:55:06 · 245 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis插件原理
MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。那么拦截器拦截MyBatis中的哪些内容呢?我们进入官网看一看:MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:1.Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)2.ParameterHandler原创 2022-02-07 11:40:48 · 91 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis的二级缓存源码解析
1、二级缓存的定义二级缓存也称作是应用级缓存,与一级缓存不同的是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改比较少的数据。2、二级缓存扩展性需求二级缓存的生命周期是整个应用,所以必须限制二级缓存的容量,在这里mybatis使用的是溢出淘汰机制。而一级缓存是会话级的生命周期非常短暂是没有必要实现这些功能的。相比较之下,二级缓存机制更加完善。3、二级缓存的结构二级缓存在结构设计上采用装饰器+责任链模式1)二级缓存是如何组装这些装饰器的呢?这里我们先介原创 2022-02-07 09:49:06 · 374 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis解析Mapper.xml(以动态sql为例)
我们在使用mybatis的时候,会在xml中编写sql语句。比如这段动态sql代码:<update id="update" parameterType="org.format.dynamicproxy.mybatis.bean.User"> UPDATE users <trim prefix="SET" prefixOverrides=","> <if test="name != null and name != ''">原创 2022-02-07 09:35:17 · 811 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis解析全局配置文件
MyBatis介绍MyBatis是一个持久层的ORM框架,使用简单,学习成本较低。可以执行自己手写的SQL语句,比较灵活。但是MyBatis的自动化程度不高,移植性也不高,有时从一个数据库迁移到另外一个数据库的时候需要自己修改配置,所以称只为半自动ORM框架传统JDBC和Mybatis相比的弊病传统JDBC@Testpublic void test() throws SQLException { Connection conn=null; PreparedStatement ps原创 2022-02-07 01:00:56 · 133 阅读 · 0 评论 -
【Mybatis源码解析】Mybatis源码体系结构
总览图Mybatis架构分层在基础支撑层,Mybatis通过XMLConfigBuilder、XMLMapperBuilder等功能类把mybatis-config.xml、mapper.xml等配置文件中的数据全部解析到Configration类中,供API接口层中的SqlSession接口调用,从而在数据处理层实现具体的处理Mybatis有四大核心组件,负责具体SQL查找、SQL解析和执行结果映射处理等。接下来几篇专栏会依次从:解析全局配置文件、解析Mapper.xml、二级缓存解析、原创 2022-02-07 00:37:59 · 391 阅读 · 0 评论 -
【10·24征文】Java优化sql出现多个join关联表的处理方案
一、场景查询sql出现多表join关联,根本原因是数据库表设计的冗余度跟不上业务发展的需求复杂度。二、思路比如现在有一个需求是查询表具(meter)抄表记录,其中meter_info表中有着这么几个外键: corp_id(厂家id) , branch_id(分公司id), organization_id(所属组织id), customer_id(客户id),查询需要显示对应的名称,这些名称都在其他表里,如果用一条sql关联需要left join4张表,数据量上到百万级别,接口返回时间就很可能超过1秒甚原创 2021-11-05 16:03:41 · 1101 阅读 · 0 评论 -
【mybatis】出现There is no getter for property named ...的原因及解决办法
环境<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.1</version></dependency><dependency> <groupId>org.mybatis</groupId> <art原创 2021-11-04 16:36:37 · 19936 阅读 · 0 评论 -
MyBatis中的JdbcType映射
Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate、Mybatis等这些持久化支持。项目中用到了MyBatis,和JDBC最显著的区别,就是SQL语句配置化,通过xml文件定义SQL语句,当然JDBC也可以将SQL配置化,需要定制开发,MyBatis则直接支持这种方法。官方对于MyBatis的介绍,MyBatis is a first class persistence framework with support for custom SQL, stored pro原创 2021-05-14 11:44:50 · 360 阅读 · 0 评论 -
MyBatis中的where标签
<sql id="selectSql"> SELECT * FROM bill as b</sql><select id="select" resultType="bill"> <include refid="selectSql"/> WHERE <if test="typeId !=null"> b.type_id_ = #{typeId}原创 2020-12-01 20:25:06 · 1611 阅读 · 0 评论 -
【MyBatis框架】MyBatis使用lombok插件和generator自动化简化开发
一、lombok插件1.1 lombok的安装<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <scope>provided</scope></dependency>1.2 lomb原创 2020-11-25 04:45:04 · 1003 阅读 · 0 评论 -
【MyBatis框架】MyBatis的一级缓存、二级缓存
在mybatis中可以本地缓存数据库返回的数据,避免第二次访问时还需要重新访问数据库,提升效率又降低数据库负载。缓存有两种方式:一、一级缓存一级缓存指的是SqlSession的缓存,这一缓存功能是自动开启的,其声明周期从得到SqlSession对象起,至关闭SqlSession对象时结束。SqlSession session = factory.openSession();----------------------------------------session.close();第二次重原创 2020-11-25 01:42:23 · 291 阅读 · 0 评论 -
【MyBatis框架】MyBatis实现复杂CRUD:多表查询、动态sql等
接上篇博客:O、必要的一些准备Bean类,这里略写Dao:这里定义了之后要实现的操作数据库的方法public interface StudentDao2 { //in 查询 public List<Student> finda(List list); public List<Student> findb(int[] ids); public List<Student> findc(Map map); //模糊查询, 根据学生原创 2020-11-24 10:32:46 · 670 阅读 · 0 评论