Java - MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
Roger_CoderLife
项目开发的六个阶段:1.充满热情2.醒悟3.痛苦4.找出罪魁祸首5.惩罚无辜6.褒奖闲人
展开
-
Mybatis之Executor简介
mybatis在执行期间,主要有四大核心接口对象:执行器Executor,执行器负责整个SQL执行过程的总体控制。 参数处理器ParameterHandler,参数处理器负责PreparedStatement入参的具体设置。 语句处理器StatementHandler,语句处理器负责和JDBC层具体交互,包括prepare语句,执行语句,以及调用ParameterHandler.param...原创 2019-03-12 09:21:03 · 1099 阅读 · 0 评论 -
MyBatis主键生成器Jdbc3KeyGenerator(二)
上一篇博客MyBatis主键生成器KeyGenerator(一)中我们大体介绍了主键生成器的接口及配置等,接下来我们介绍一下KeyGenerator的实现类Jdbc3KeyGeneratorJdbc3KeyGenerator实际上实现了processAfter方法,其使用方法如下配置,目的是将主键作为返回值返回,这种用法只能是在有自增主键的数据库中使用:<insert id="sa...转载 2019-03-26 08:59:39 · 533 阅读 · 0 评论 -
MyBatis主键生成器SelectKeyGenerator(三)
前面两篇博客我们介绍了MyBatis主键生成器KeyGenerator(一)和MyBatis主键生成器Jdbc3KeyGenerator(二),接下来我们介绍SelectKeyGenerator,如在Oraclee中并不提供自增组件,提供了Sequence主键,我们就需要执行它的Sequence主键,如在mysql中如下配置:<insert id="save"> <s...转载 2019-03-27 08:34:01 · 1826 阅读 · 0 评论 -
Mybatis源码分析--关联表查询及延迟加载原理(一)
Mybatis提供了关联查询映射的功能。一、一对一关联实体类如下:Users表对应的实体类:public class User { private int id; private String names; private int age; private Teacher teacher; ......getXxx和setXxx方法 }Tea...转载 2019-03-28 08:04:51 · 259 阅读 · 0 评论 -
Mybatis事务(一)事务管理方式
一、Mybatis事务(二)事务隔离级别二、Mybatis事务(三)事务工厂Mybatis管理事务是分为两种方式:(1)使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交(2)使用MANAGED的事务管理机制,这种机制mybatis自身不会去实现事务管理,而是让程序的容器(JBOSS,WebLogic)来实现对事务的管理在Mybatis的...转载 2019-04-02 08:25:02 · 300 阅读 · 0 评论 -
Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理。其实简单来说Mybatis的延迟加载就是分多次执行SQL语句,这样就实现了延迟加载的机制,并且第一次执行的结果值可能是接下来执行的SQL语句的参数值,Mybatis实现执行接下来的SQL的原理机制是通过代理类来实现的,...转载 2019-03-29 08:30:24 · 190 阅读 · 0 评论 -
Java框架Mybatis的工作流程及原理
Mybatis简介: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。...原创 2018-12-01 08:29:32 · 2853 阅读 · 0 评论 -
Mybatis插件原理分析(三)
在Mybatis中插件最经常使用的是作为分页插件,接下来我们通过实现Interceptor来完成一个分页插件。虽然Mybatis也提供了分页操作,通过在sqlSession的接口函数中设置RowBounds,给RowBounds设置初值(RowBounds源码)来实现逻辑分页,其实现原理就是通过sql查询所有的结果,并将结果放到List中,然后根据RowBouds的limit和offset数值...转载 2019-04-10 15:52:17 · 174 阅读 · 0 评论 -
Mybatis插件原理分析(二)
在上一篇中Mybatis插件原理分析(一)中我们主要介绍了一下Mybatis插件相关的几个类的源码,并对源码进行了一些解释,接下来我们通过一个简单的插件实现来对Mybatis插件的运行流程进行分析。一、简单的插件MyInterceptor,源码如下:/** * 实现Interceptor的类必须使用注解@Intercepts,Plugin类中的getSignatureMap函数就是来解...转载 2019-04-09 11:05:40 · 149 阅读 · 0 评论 -
Mybatis插件原理分析(一)
我们首先介绍一下Mybatis插件相关的几个类,并对源码进行了简单的分析。Mybatis插件相关的接口或类有:Intercept、InterceptChain、Plugin和Invocation,这几个接口或类实现了整个Mybatis插件流程。Interceptor:一个接口,是实现自己功能需要实现的接口源码如下:/** * @author Clinton Begin */...转载 2019-04-08 08:26:10 · 146 阅读 · 0 评论 -
Mybatis事务(三)事务工厂
在前面一篇博客Mybatis事务(一)事务管理方式中我们提到,mybatis及spring提供了三个事务实现类:JdbcTransaction、ManagedTransaction和SpringManagedTransaction三个事务实现类,同时Mybatis也很友好的给我们提供了对应事务类的生成工厂。TransactionFactory接口:提供的主要接口是newTransaction(...转载 2019-04-04 08:32:20 · 412 阅读 · 0 评论 -
Mybatis源码之Statement处理器CallableStatementHandler(六)
CallableStatementHandler实际就是使用CallableStatement来执行SQL语句,当然它执行的是存储过程。源码如下:/** * @author Clinton Begin *//***/public class CallableStatementHandler extends BaseStatementHandler { public Cal...转载 2019-03-22 08:29:01 · 310 阅读 · 0 评论 -
MyBatis主键生成器KeyGenerator(一)
Mybatis提供了主键生成器接口KeyGenerator,insert语句默认是不返回记录的主键值,而是返回插入的记录条数;如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能 。由于不同的数据库对主键的生成不一样:(1)针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle、DB2,KeyGenerator提供了proce...转载 2019-03-25 08:51:12 · 7526 阅读 · 1 评论 -
Mybatis源码之Statement处理器PreparedStatementHandler(五)
PreparedStatementHandler就是调用PreparedStatement来执行SQL语句,这样在第一次执行sql语句时会进行预编译,在接下来执行相同的SQL语句时会提高数据库性能源码如下:/** * @author Clinton Begin *//* 使用PrepareStatement**/public class PreparedStatementHand...转载 2019-03-21 09:52:49 · 372 阅读 · 0 评论 -
Mybatis源码之Statement处理器SimpleStatementHandler(四)
SimpleStatementHandler就是使用基本的Statement来执行query、batch、update等操作,其实现还是比较简单的,当然在执行过程中会涉及keyGenerator和ResultHandler操作,这些我们会在接下来的博客中进行详解。SimpleStatementHandler用于执行简单的sql语句,这里简单的sql语句是指sql语句中没有变量,不会通过外部进行参数...转载 2019-03-21 09:37:06 · 2351 阅读 · 0 评论 -
Mybatis源码之Statement处理器RoutingStatementHandler(三)
RoutingStatementHandler类似路由器,在其构造函数中会根据Mapper文件中设置的StatementType来选择使用SimpleStatementHandler、PreparedStatementHandler和CallableStatementHandler,其实现的接口StatementHandler的方法也是由这三个具体实现类来实现。源码如下:/** * @...转载 2019-03-20 08:56:52 · 499 阅读 · 0 评论 -
Mybatis源码之Statement处理器BaseStatementHandler(二)
BaseStatementHandler是一个抽象类,并没有实现和CURD相关的类,只是更多的设置了一些参数相关。源码如下:/** * @author Clinton Begin */public abstract class BaseStatementHandler implements StatementHandler { protected final Configu...转载 2019-03-20 08:51:07 · 310 阅读 · 0 评论 -
Mybatis源码之Statement处理器StatementHandler(一)
StatementHandler通过类名我们可以了解到它可能是Statement的处理器,它是一个接口,其实现类如下:BaseStatementHandler:一个抽象类,只是实现了一些不涉及具体操作的方法RoutingStatementHandler:类似路由器,根据配置文件来路由选择具体实现类SimpleStatementHandler、CallableStatementHandl...转载 2019-03-19 08:34:47 · 268 阅读 · 0 评论 -
Mybatis执行CachingExecutor(六)
前面几篇博客我们介绍了Excutor及抽象类BaseExecutor和实现类SimpleExecutor、BatchExecutor和ReuseExecutor:博客列表:Mybatis执行Executor(一)Mybatis执行BaseExecutor(二)Mybatis执行SimpleExecutor(三)Mybatis执行BatchExecutor(四)Mybatis...转载 2019-03-18 13:15:43 · 372 阅读 · 0 评论 -
Mybatis执行ReuseExecutor(五)
ReuseExecutor顾名思义就是重复使用执行,其定义了一个Map<String, Statement>,将执行的sql作为key,将执行的Statement作为value保存,这样执行相同的sql时就可以使用已经存在的Statement,就不需要新创建了,源码及分析如下:/** * @author Clinton Begin */public class ReuseE...转载 2019-03-17 21:45:57 · 382 阅读 · 0 评论 -
Mybatis执行BatchExecutor(四)
BatchExecutor:顾名思义就是进行批量操作,通过批量操作来提高性能public class BatchExecutor extends BaseExecutor { public static final int BATCH_UPDATE_RETURN_VALUE = Integer.MIN_VALUE + 1002; /* Statement链表**/ pri...转载 2019-03-15 10:06:22 · 985 阅读 · 0 评论 -
Mybatis执行SimpleExecutor(三)
SimpleExecutor通过类名可以看出,它是一个简单的执行类,并不会做一些处理就执行sql,源码及分析如下:/** * @author Clinton Begin */public class SimpleExecutor extends BaseExecutor { public SimpleExecutor(Configuration configuration, T...转载 2019-03-14 08:08:47 · 409 阅读 · 0 评论 -
Mybatis执行BaseExecutor(二)
BaseExecutor是Executor的一个子类,是一个抽象类,其实现了接口Executor的部分方法,并提供了三个抽象方法doUpdate、doFlushStatements和doQuery在他的子类SimpleExecutor、ReuseExecutor和BatchExecutor中实现。BaseExecutor也算是一个模板类,几个抽象方法在子类中实现,具体选用哪个子类SimpleE...转载 2019-03-13 09:08:58 · 278 阅读 · 0 评论 -
Mybatis执行Executor(一)
在DefaultSqlSession中我们可以看到一系列的增删改查操作的其实都是在调用Executor的接口,Mybatis对外统一提供了一个操作接口类Executor,提供的接口方法有update、query、flushStatements、commit、rollback等接口函数,源码如下:/** * @author Clinton Begin */public interfac...转载 2019-03-13 08:52:07 · 268 阅读 · 0 评论 -
Mybatis事务(二)事务隔离级别
一般数据库的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 √: 可能出现×: 不会出现 脏读 不可...转载 2019-04-03 08:24:23 · 1319 阅读 · 0 评论