MyBatis
文章平均质量分 94
MyBatis使用学习和源码分析
tony_code_2017
开心就好
展开
-
MyBatis之Mapper接口的执行过程分析
Mabtis作为一款优秀的持久层框架,不仅提高了我们的开发效率,同时也具备方便快捷的特点。通常我们配置MyBatis的时候都会配置一系列Mappers接口类到MyBatis中,但是如果我们不配置这些Mapper也是可以执行Mapper.xml文件中的SQL语句的,之所以要配置是因为直接使用接口会比不使用接口调用更方便,下面我们先看看不使用接口如何执行SQL。 Map...原创 2020-02-02 14:18:03 · 1253 阅读 · 0 评论 -
MyBatis 高级映射与懒加载
MyBatis的高级映射是该框架非常重要的一个功能,在开发中有广泛应用,在面试中也是常考的内容,下面我们就学习下高级映射。 引言:MyBatis的的高级映射分为关联和集合两种,关联是一对一关系的映射,集合是一对多关系的映射,都分为嵌套查询和嵌套结果两种实现方式;嵌套查询在数据量不大和关联不多的时候使用比较合适,当数据量大的时候,会出现N + 1问题,导致执行的SQL很多,加载很慢,...原创 2018-12-17 18:14:31 · 519 阅读 · 0 评论 -
Result Maps collection already contains value for com.*.*.*Mapper.BaseResultMap
问题:在使用MyBatis的过程中,启动项目总是报错误,如下Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains valu...原创 2018-11-14 18:44:17 · 1315 阅读 · 0 评论 -
MyBatis 本地缓存和二级缓存使用以及源码分析 第二篇
本篇分析缓存的查询流程1.二级缓存的全局配置 配置中的设置配置cacheEnabled标签可以全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存,默认是真,也就是默认开启,这个配置就是二级缓存的全局开关。2.缓存接口 在MyBatis的的包org.apache.ibatis.cach...原创 2018-11-23 18:01:58 · 1038 阅读 · 2 评论 -
MyBatis 本地缓存和二级缓存使用以及源码分析 第一篇
本地缓存 也称为一级缓存,分为两个作用域SESSION和STATEMENT。官网中的描述:MyBatis利用本地缓存机制(Local Cache)防止循环引用(循环引用)和加速重复嵌套查询。默认值为SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为声明,本地会话仅用于语句执行上,对相同的一个SqlSession的不同调用将不会共享数据。也就是说本地缓存我们不需要配置就是生...原创 2018-11-20 11:19:54 · 1157 阅读 · 0 评论 -
MyBatis 排序防止sql注入
MyBatis的排序引言 最近在项目开发中遇到一个问题,项目中使用的的MyBatis的排序功能被安全部门扫描出了SQL注入安全隐患,查看安全报告说是有一个接口中存在SQL注入的安全漏洞,检查后发现是因为该接口中的排序功能使用了的MyBatis中的$ {}。#{}与$ {}的区别 默认情况下,使用#{}格式的语法会导致MyBatis的创建的PreparedStatemen...原创 2018-11-13 07:23:59 · 18339 阅读 · 8 评论 -
MyBatis源码学习之四 插件plugin
插件 MyBatis提供了插件功能,也就是拦截器功能,可以让我们在已映射语句执行过程中的某一点进行拦截调用。常用的插件就是ibatis3-spring-support包中的com.ibatis3.dialect.OffsetLimitInterceptor。我们先看看插件的实现然后再学习下OffsetLimitInterceptor。 1 怎么用 1.1 实现Interceptor接...原创 2018-06-25 17:54:26 · 2779 阅读 · 0 评论 -
MyBatis 源码学习之三 MyBatis开发遇过的坑
使用MyBatis过程中遇到过一些坑,遂记录下来,结合源码分析,以共享。配置如下:首先测试了获取sqlsession成功one 新增记录成功,但是数据库中无记录。实体类如下:数据库表如下:执行如下测试方法执行结果:成功。但是查看数据库没有新增的该条记录。原因是没有提交。添加提交代码后新增记录在数据库中可以查看到。源码分析:session = ssf.openSession();创建的SqlSess...原创 2018-06-22 14:46:19 · 297 阅读 · 0 评论 -
MyBatis 源码学习之二 MyBatis事务
MyBatis事务 本篇主要学习MyBatis的事务代码,从设计模式,代码实现,事务分类等三个方面进行学习。关于数据库事务的特性和隔离级别与传播级别此处不做学习,将会有另外的篇幅进行学习。 事务分类 MyBatis事务分为两个类型,分别是JdbcTransaction和ManagedTransaction。开发过程中主要使用前者,按照type="jdbc" 或者type=...原创 2018-06-14 22:57:44 · 1663 阅读 · 0 评论 -
MyBatis源码学习之一 工作的基本流程
本系列针对MyBatis源码进行学习,将会从基本的流程到各个特性以及源码中涉及的设计模式等。1.MyBatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain ...原创 2018-05-25 18:39:56 · 545 阅读 · 0 评论