
mybatis
kgduu
这个作者很懒,什么都没留下…
展开
-
mybatis输出sql原理分析
mybatis输出sql原理分析原创 2022-06-11 17:55:13 · 821 阅读 · 1 评论 -
mybatis-plus中and和or的使用
mybatis-plus中and和or的使用原创 2022-06-11 10:38:44 · 20969 阅读 · 0 评论 -
mybatis使用中的一些配置
mybatis使用中的一些配置原创 2022-06-11 09:06:18 · 214 阅读 · 0 评论 -
mybatis中的MapperAnnotationBuilder
在MapperRegistry.addMapper时会用到MapperAnnotationBuilder。public <T> void addMapper(Class<T> type) { if (type.isInterface()) { if (hasMapper(type)) { throw new BindingException("Type " + type + " is already known to the MapperRe原创 2021-11-11 21:32:46 · 952 阅读 · 0 评论 -
mybatis中的插件
1、Interceptor2、插件配置解析配置文件中解析plugins结点,在子结点中获取interceptor属性及子结点的属性结点。添加到配置文件中的InterceptorChain中private void pluginElement(XNode parent) throws Exception { if (parent != null) { for (XNode child : parent.getChildren()) { String i..原创 2021-11-07 20:30:17 · 397 阅读 · 1 评论 -
mybatis中的TypeAliasRegistry
TypeAliasRegistry是管理类型别名的,为别名到Class<?>的映射关系。其类结构为resolveAlias:获取别名的对应class类型registerAliases(packageName:String):注册包下的所有类(不包含内部类及接口)。如果类名有注解@Alias,别名为注解的,否则别名为type.getSimpleName()registerAliases(package:String, superType:Class<?>):注册包下.原创 2021-10-24 21:14:16 · 1182 阅读 · 0 评论 -
mybatis-plus
1、元数据原创 2021-10-21 00:03:46 · 447 阅读 · 0 评论 -
mybatis中的动态sql
1、支持的sql节点有节点 属性 if test choose 子节点有when,otherwise,when节点属性与if节点属性一样,使用test trim 支持的属性有prefix, prefixOverrides, suffix, suffixOverrides where 是trim的子扩展 prefix=WHERE, prefixOverrides=("AND ","OR ","AND\n", "OR\n", "AND\.原创 2021-07-06 22:56:31 · 168 阅读 · 0 评论 -
mybatis-plus AutoGenerator
默认使用的是Velocity模板1、GlobalConfigfileOverride 是否覆盖已有文件 open 是否打开输出目录 enableCache 是否开启二级缓存 author 开发人员 kotlin 是否开启kotlin模式 swagger2 是否开启 swagger 模式 activeRecord 是否开启 ActiveRecord 模式 baseResultMap 是否开启BaseResultMap da原创 2021-06-28 22:27:11 · 733 阅读 · 0 评论 -
mybatis之ResultMap
1、结构关系图discriminator主要是区分子类,其形式为,其属性包含属性 column javaType jdbcType typeHandler 子结点及其属性子节点 case 属性 value 属性 resultMap原创 2021-03-26 22:51:34 · 204 阅读 · 0 评论 -
mybatis-plus中的问题总结
1、表中有使用关键字在字段中添加@TableField("`desc`")private String desc;2、在resultMap中使用静态内部类<select id="selectListsByDepartId" resultType="com.neo.fox.MyBatisDemo$Test"> </select>原创 2021-01-07 21:56:08 · 218 阅读 · 0 评论 -
mybatis使用Mapper时对参数处理的设计与实现
是通过MapperMethod来处理的,根据接口及方法名解析得到SqlCommand及MethodSignature,其主要是通过MethodSignature来解析请求参数的。解析mapper接口参数通过ParamNameResolver来得到参数下标到参数名之间的映射。处理过程1、过滤掉RowBounds、ResultHandler类型参数2、参数有使用@Param注解时,使用注解名来表示参数名,没有时 (1)全局配置时使用实际的参数名,则通过ParamNameUtil得...原创 2020-11-15 09:24:31 · 690 阅读 · 2 评论 -
mybatis不使用动态代理查询时设计与实现
1、参数封装对于集合或者数组类型,会将参数封装为ParaMap,其它类型不变(1)如果是Collection,添加collection->object映射(2)如果是List,添加list->object映射(3)如果是Array,添加array->object映射public static Object wrapToMapIfCollection(Object object, String actualParamName) { if (object inst原创 2020-11-11 22:52:42 · 413 阅读 · 0 评论 -
resultMap和resultType的区别
resultMap返回的列名与bean的属性名可以不一致,resultType则要求一致。就具体代码作分析。对于指定resultMap属性,直接读取字符串,而对于指定resultType会解析为具体的类.在使用MappedStatement.Builder设置resultMaps时,对于 resultMap使用逗号作分隔符,得到resultMap列表,而对于resultType只是构建单个resultMap(设置type为resultType的类,resultMappings为空列表)加入到resu原创 2020-10-13 22:20:30 · 1482 阅读 · 0 评论 -
mybatis中sqlSession的设计与实现
sqlSession基于工厂方法来实现的,SqlSession和SqlSessionFactory的接口定义如下public interface SqlSession extends Closeable { /** * Retrieve a single row mapped from the statement key. * @param <T> the returned object type * @param statement * t原创 2020-10-12 22:34:41 · 274 阅读 · 0 评论 -
mybatis中 Executor的设计与实现
Executor的接口定义为public interface Executor { ResultHandler NO_RESULT_HANDLER = null; int update(MappedStatement ms, Object parameter) throws SQLException; <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, Res原创 2020-10-09 21:30:40 · 449 阅读 · 1 评论 -
mybatis中statementHandler的设计与实现
StatementHandler接口定义为Statement prepare(Connection connection, Integer transactionTimeout) throws SQLException; void parameterize(Statement statement) throws SQLException; void batch(Statement statement) throws SQLException; in原创 2020-10-07 22:45:55 · 446 阅读 · 0 评论 -
mybatis中KeyGenerator的设计与实现
key Generator主要是用于insert操作,其接口定义为public interface KeyGenerator { void processBefore(Executor executor, MappedStatement ms, Statement stmt, Object parameter); void processAfter(Executor executor, MappedStatement ms, Statement stmt, Object parameter原创 2020-10-06 15:19:51 · 1110 阅读 · 0 评论 -
mybatis中ResultSetHandler的设计与实现
ResultSetHandler主要处理statement,cursor,callstatement三种类型的结果集,其接口定义如下:public interface ResultSetHandler { <E> List<E> handleResultSets(Statement stmt) throws SQLException; <E> Cursor<E> handleCursorResultSets(Statement stmt) t原创 2020-09-22 22:46:53 · 1474 阅读 · 0 评论 -
mybatis对mapper.xml的解析(三)
mybatis中对语句的解析使用了组合模式,针对不同的sql结点处理抽象出了SqlNode。详细的设计图为原创 2020-09-20 19:24:37 · 279 阅读 · 0 评论 -
mybatis对mapper.xml的解析(二)
对select,insert,update,delete的解析是通过buildStatementFromContext来完成的,具体的解析是XMLStatementBuilder来完成的.1、解析语句中的includeXMLIncludeTransformer在解析include节点时,首先找到refid引用的节点,同时解析子节点property的name,value值对。接着在refid的引用的节点上应用applyIncludes递归调用。递归完后,用引用节点替换indlude节点。将引用节点的子原创 2020-09-17 21:36:44 · 410 阅读 · 0 评论 -
mybatis对mapper.xml的解析(一)
对于mapper配置文件的解析是通过XMLMapperBuilder来完成的,其主要是解析结点为mapper下的结点public void parse() { if (!configuration.isResourceLoaded(resource)) { configurationElement(parser.evalNode("/mapper")); configuration.addLoadedResource(resource); bindMappe原创 2020-09-16 22:37:56 · 401 阅读 · 0 评论 -
mybatis中config.xml文件的解析
config.xml文件的解析是主要是XMLConfigBuilder完成的,通过调用parseConfiguration来实现整个解析过程public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; parseConfiguration(pars原创 2020-09-14 23:16:24 · 413 阅读 · 0 评论 -
mybatis中缓存的设计与原理
缓存是基于装饰器设计模式来设计的,接口为Cache,实现类为PerpetualCache,具体的装饰器有基于淘汰策略的、对象引用类型的、序列化的、事务的、同步的、日志的(记录缓存命中率)、时间调度的。具体的类层次图如下...原创 2020-09-10 21:59:44 · 164 阅读 · 0 评论 -
mybatis中的mapper设计与原理
mapper是基于动态代理来设计的,其类图如下在MapperRegistry添加mapper时,会基于注解作解析public <T> void addMapper(Class<T> type) { if (type.isInterface()) { if (hasMapper(type)) { throw new BindingException("Type " + type + " is already known to the M原创 2020-09-09 22:37:24 · 472 阅读 · 0 评论 -
mybatis中的TypeHandler设计与实现
TypeHandler主要是用在从java数据写入数据库时,从数据库中读取数据时的从java到jdbc类型之间的转换。其类层次图为原创 2020-09-03 22:02:28 · 236 阅读 · 0 评论 -
mybatis从MapperStatement到PreparementStatement的过程
//MappedStatementpublic BoundSql getBoundSql(Object parameterObject) { BoundSql boundSql = sqlSource.getBoundSql(parameterObject); List<ParameterMapping> parameterMappings = boundSql.getParameterMappings(); if (parameterMappings == null.原创 2020-08-12 22:33:07 · 870 阅读 · 0 评论 -
Mybatis的解析模块基础
mybatis的基于配置文件的解析是基于XPathParser,在解析String类型时,会通过PropertyParser来做的,在解析时结合GenericTokenParser和TokenHandler来处理,TokenHandler是通过实现类VariableTokenHandler处理,其类结构图为...原创 2020-08-09 21:46:13 · 195 阅读 · 0 评论 -
【持久化框架】Mybatis简介与原理
从这篇博文开始我们学习一下Mybatis,希望大家提出宝贵的建议。 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。iBATIS一词来源于“internet”和“abatis”的组合,是一转载 2016-08-08 17:32:20 · 534 阅读 · 0 评论 -
mybatis官方文档
官方文档原创 2016-08-09 10:44:46 · 323 阅读 · 0 评论 -
MyBatis架构设计及源代码分析系列(一):MyBatis架构
一、概述MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己The MyBatis data mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedu转载 2016-08-09 19:42:00 · 590 阅读 · 0 评论 -
原理分析之一:从JDBC到Mybatis
1.引言本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架。再而论述Mybatis作为一个数据持久层框架本身有待改进之处。 2.JDBC实现查询分析我们先看看我们最熟悉也是最基础的通过JDBC查询数据库数据,一般需要以下七个步骤:(1) 加载JDBC驱动(2) 建立并获取数据库连接(3转载 2016-08-10 10:43:55 · 690 阅读 · 0 评论 -
原理分析之二:框架整体设计
1.引言本文主要讲解Mybatis的整体程序设计,理清楚框架的主要脉络。后面文章我们再详细讲解各个组件。 2.整体设计2.1 总体流程(1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句转载 2016-08-10 10:46:10 · 402 阅读 · 0 评论 -
原理分析之三:初始化(配置文件读取和解析)
1. 准备工作 编写测试代码(具体请参考《Mybatis入门示例》),设置断点,以Debug模式运行,具体代码如下: Java代码 String resource = "mybatis.cfg.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactory转载 2016-08-10 10:48:28 · 782 阅读 · 0 评论 -
原理分析之四:一次SQL查询的源码分析
上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的。 准备工作Mybatis完成一次SQL查询需要使用的代码如下: Java代码 String resource = "mybatis.cfg.xml"; Reader reader = Resources.get转载 2016-08-10 10:50:01 · 697 阅读 · 0 评论 -
Mybatis解析动态sql原理分析
前言废话不多说,直接进入文章。我们在使用mybatis的时候,会在xml中编写sql语句。比如这段动态sql代码:"update" parameterType="org.format.dynamicproxy.mybatis.bean.User"> UPDATE users "SET" prefixOverrides=","> if test="转载 2016-08-11 16:38:22 · 5843 阅读 · 0 评论 -
MyBatis Generator 详解
MyBatis Generator中文文档MyBatis Generator中文文档地址:http://mbg.cndocs.tk/该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中文版的文档的也会有一定的障碍,所以本章根据该中文文档以及实际应用,使用通俗的语言来讲解详细的配置。本文中所有节点的链接都是对应的中文文档地址,可以点击查看详细信转载 2016-07-11 17:24:41 · 678 阅读 · 0 评论