mybatis
文章平均质量分 90
mybatis基础到源码解析
冬天vs不冷
Java开发工程师,热衷于分享记录当下热门常用的技术,从基础使用到源码解析
展开
-
MyBatisPlus新版代码生成器(Velocity模板引擎详解)
Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据 ,填充到模板中,从而实现界面和java代码的分离。应用场景Web应用程序 : 作为为应用程序的视图, 展示数据源代码生成 : Velocity可用于基于模板生成Java源代码自动电子邮件 : 网站注册 , 认证等的电子邮件模板网页静态化 : 基于velocity模板 , 生成静态网页只需要关注.vm结尾模板即可(属于velocity引擎模板),其他模板是其他模板引擎的模板,这里不做过多介绍。原创 2024-03-25 07:08:52 · 3263 阅读 · 98 评论 -
MyBatis-Plus(实用篇)
Wrapper:条件构造抽象类,最顶端父类AbstractWrapper:用于查询条件封装,生成sql的where条件QueryWrapper:查询条件封装UpdateWrapper:update条件封装AbstractLambdaWrapper:使用Lambda语法LambdaQueryWrapper:用于Lambda语法使用的查询WrapperLambdaUpdateWrapper:用于Lambda语法更新WrapperUserMapper中定义接口方法。原创 2022-12-22 23:41:47 · 8518 阅读 · 15 评论 -
jdbc基础
一、获取连接import org.junit.Test;import java.io.File;import java.io.InputStream;import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;import java.util.Properties;public class ConnectionTest { /** * 方式一 */ @Tes原创 2021-09-11 22:12:52 · 195 阅读 · 0 评论 -
Mybatis源码解析(十):一级缓存和二级缓存
Mybatis源码解析(六):缓存执行器操作流程-此篇讲了一级缓存和二级缓存的数据类型HashMap,key的组成部分以及一二级缓存与查询数据库的顺序本篇讲解下一级缓存和二级缓存的作用范围、执行流程底层实现原理作用范围一级缓存放在执行器里,每次创建sqlSession都会创建执行器,所以一级缓存的作用范围在sqlSession里。原创 2022-12-09 18:24:46 · 1089 阅读 · 0 评论 -
Mybatis源码解析(九):插件机制
Mybatis源码系列文章手写源码(了解源码整体流程及重要组件)Mybatis源码解析(一):环境搭建Mybatis源码解析(二):全局配置文件的解析Mybatis源码解析(三):映射配置文件的解析Mybatis源码解析(四):sql语句及#{}、${}的解析Mybatis源码解析(五):SqlSession会话的创建Mybatis源码解析(六):缓存执行器操作流程Mybatis源码解析(六):查询数据库主流程Mybatis源码解析(七):Mapper代理原理Mybatis源码解析(八):插件机制@Si原创 2022-12-03 21:36:39 · 977 阅读 · 0 评论 -
Mybatis源码解析(八):Mapper代理原理
文章主要围绕着如下几个点,展开源码解析:是如何进行解析的?是如何生成的代理对象?是怎么完成的增删改查操作?标签配置的包名下的Mapper接口文件都会被加载成对应的代理类工厂通过Mapper接口获取同包同名的xml文件,并解析Mapper接口通过jdk代理创建代理类,接口方法匹配xml中标签的id值,执行增删改查。原创 2022-12-02 22:55:49 · 2011 阅读 · 0 评论 -
Mybatis源码解析(七):查询数据库主流程
上个文章讲到了查询入口,先查二级缓存,再查一级缓存,最后才会查询数据库本篇文章围绕mybatis如何封装底层jdbc的查询操作之后的源码对照的下图结合看,在源码中都能看到相同的代码Mybatis查询数据库的流程就是jdbc底层流程的封装,jdbc每一步都会能在mybatis封装的对象中找到对应的步骤mybatis为了扩展性强,几乎所有流程组件都是接口,然后不同的实现类,做不同的操作(先创建xxx处理器,再通过xxx处理器创建x1、x2、x3)原创 2022-11-26 23:37:39 · 1062 阅读 · 0 评论 -
Mybatis源码解析(六):缓存执行器操作流程
之前篇章讲了配置文件的解析与SqlSession的创建,可以说都是在为执行增删改查操作主流程做铺垫接下来让我们进入SqlSession的selectOne实现方法一级缓存和二级缓存就是一个Map集合对象:key:Cache对象(statementId、分页参数、带?的sql、参数值、环境id)value:数据库查询结果一级缓存默认开启,二级缓存需要添加 标签开启都开启情况下:先从二级缓存获取,没有则从一级缓存获取,还没有则查询数据库(查询结果后先添加到一级缓存,再添加到二级缓存)原创 2022-11-19 22:27:58 · 817 阅读 · 0 评论 -
Mybatis源码解析(五):SqlSession会话的创建
之前篇幅讲解核心配置文件和实体映射配置文件的解析,当这两者都准备就绪,则需如下第三步创建sql会话对象,为之后执行sql流程做准备本文内容也只围绕openSession方法源码来说基础执行器,封装了子类的公共方法,包括一级缓存、延迟加载、回滚、关闭等功能简单执行器,每执行一条 sql,都会打开一个 Statement,执行完成后关闭(默认执行器)原创 2022-11-13 22:53:01 · 1408 阅读 · 0 评论 -
Mybatis源码解析(四):sql语句及#{}、${}的解析
本文主要讲解标签内将sql语句替换#{}和${}为?、并保存下来属性值、入参对象(字符串|对象|Map)组装成BoundSql,后续执行JDBC操作需要的值从此对象中获取承接上一篇文章Mybatis源码解析(三):映射配置文件的解析,映射配置文件会解析成MappedStatement对象,而BoundSql只是其中一部分本文的核心就是创建BoundSql对象,后续需要带?原创 2022-11-12 23:22:14 · 657 阅读 · 0 评论 -
Mybatis源码解析(三):映射配置文件的解析
Mybatis框架中有两种类型xml文件,核心配置文件以及实体类映射配置文件映射配置文件的路径在核心配置的标签中配置(这样就可以只解析一个核心配置文件即可)从本系列Mybatis源码解析(二):全局配置文件的解析第四章节可知,解析标签的子标签即使解析映射配置文件映射配置文件的解析是全局配置文件解析的一部分,本篇内容只是将其单独拎出来了。原创 2022-11-09 22:21:50 · 806 阅读 · 0 评论 -
Mybatis源码解析(二):全局配置文件的解析
Mybatis入口从加载配置文件→输入流→Document对象→XNode对象从创建XMLConfigBuilder→Configuration→解析核心xml填充Configuration对象。原创 2022-11-01 23:49:42 · 637 阅读 · 0 评论 -
Mybatis源码解析(一):环境搭建
mybatis源码地址(有注释):源码目录介绍。原创 2022-10-30 00:36:13 · 1019 阅读 · 0 评论 -
手写Mybatis源码(原来真的很简单!!!)
主要分两部分,项目使用端:平常写代码所说的后台服务;持久层框架:即项目使用端引入的jar包类名定义角色定位分工协作Resources资源辅助类负责读取配置文件转化为输入流数据库资源类负责存储数据库连接信息SQL与结果集资源类负责存储SQL映射定义、存储结果集映射定义会话工厂构建者负责解析配置文件,创建会话工厂SqlSessionFactory会话工厂负责创建会话SqlSessionSqlSession会话指派执行器ExecutorExecutor执行器。原创 2022-10-25 23:40:00 · 5050 阅读 · 86 评论 -
Mybatis源码解析-执行流程(旧)
mybatis版本:3.5.2二、SqlSessionFactory初始化SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);建造者模式,SqlSessionFactoryBuilder 类中都是通过不同的入参重载方法返回SqlSessionFactory2)创建XMLConfigBuilder对象,根据配置文件输入流创建Document对象3)解析mybatis配置文件,原创 2021-10-19 21:00:35 · 239 阅读 · 0 评论 -
Mybatis源码解析-接口方法参数绑定(旧)
1、MapperMethod类内部类SqlCommand command。封装方法全限定名,以及sql标签枚举类型 insert,update,delete,select。2、MapperMethod类内部类MethodSignature method。封装方法的返回值和参数信息。不满足以上条件,则会变成arg0、arg1…获取name值,相当于key,后续会用到。原创 2021-10-14 21:40:26 · 341 阅读 · 0 评论 -
spring整合mybatis
一、第一种方法实体、接口、xml-sql都一样@Datapublic class User { private int id; private String name;}public interface UserMapper { List<User> getUserList();}<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//myba原创 2021-07-31 01:13:55 · 80 阅读 · 0 评论 -
Mybatis 一级缓存、二级缓存
true 只读,MyBatis 认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。6、二级缓存获取到的两个对象地址不同,因为是通过反序列化,Object.clone克隆一个对象,属性一样,地址不同。5、mybatis的二级缓存是属于序列化,序列化的意思就是从内存中的数据传到硬盘中,这个过程就是序列化。2、存在sqlSession中,同一会话中,多次查询同一条件数据会从缓存中获取。3、同一个事务中,sqlSession没有关闭,则可以共用缓存。1、二级缓存需要手动开启,namespace级别的缓存。原创 2021-07-28 20:39:32 · 287 阅读 · 0 评论 -
Mybatis基础使用(xml篇)
在接口方法中,参数直接传递Map;(系统则把key作为xml中参数标准)二、resultMap自定义结果集1)属性值介绍方式一:方式二:方式一:方式二:1. sql中字符串拼接select * from user where name like concat(‘%’,#{name},‘%’); mysql支持两头拼接select * from user where name like concat(concat(‘%’,#{name}),‘%’);or原创 2021-07-25 09:42:41 · 2104 阅读 · 0 评论