![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MyBatis学习
文章平均质量分 92
郭艺宾
富有激情的学习Java
展开
-
MyBatis框架实现(08)总结
前面的步骤基本上已经把mybatis框架实现类,主要的流程都在。下面我们来执行一次测试代码:现在在使用上很接近mybatis了,看一下运行结果:没有问题,框架正常工作!前面的所有内容都只是实现了一个框架的基本流程,并不算实现了一个框架,目前这个框架只能做查询对象功能,局限性很大。我们看到从开始到结束把jdbc分成了很多步骤,在这里分其实意义不大,但是对于一个完整的框架,很有必要,我们分出来的每一部分,包括sqlSession,执行器,参数处理器,结果处理器,结果对象生成...原创 2020-09-23 00:13:37 · 108 阅读 · 0 评论 -
MyBatis框架实现(07)处理执行结果
书接上回,SQL语句已经执行完了,就差处理结果了,先简单定义结果处理类:让参数处理器进行调用:这样前面SQL语句的执行就圆满了,下面来专门看结果处理器resultHandler。结果处理的大致流程是,利用反射生成结果对象实例,然后把执行SQL获取的结果放到返回类型实例当中,最后返回这个结果,除了第一行获取返回类型对象外,其它的组装结果都实现了,这里的很多代码都和反射有关系,有对反射知识遗忘的可以再去看看。大体的流程就是把结果返回到对象的每个字段当中。现在再来...原创 2020-09-23 00:12:57 · 331 阅读 · 0 评论 -
MyBatis框架实现(06)执行SQL语句
书接上回,我们获取了mapper对象,可以开始执行SQL语句了,执行时我们调用的起点是从mapper中的方法开始的,流程如下:1、调用mapper中的方法2、mapper代理类调用sqlSession中的方法3、sqlSession调用执行器的方法4、执行器执行时,会调用mybatis中的statement处理SQL语句,将参数替换为实际值5、结果处理器resultHandler对象直接执行,并处理返回的结果上面是一个简略的流程,虽然简略,但是也能反映mybatis真正的处理流程原创 2020-09-23 00:12:01 · 273 阅读 · 0 评论 -
MyBatis框架实现(05)从sqlSession中获取mapper
继续我们的简单版mybatis。前面的内容以及可以获取sqlSession了,下面我们来看从sqlSession中获取mapper。关于mapper我们只定义了接口,没有实现类,通过源码分析我们知道mybatis使用动态代理为我们生成。所以首先来创建一个mapper代理类:代理类中包含两个属性,一个是sqlSession,一个是接口类,invoke方法中,通过传入方法的全路径获取了我们自定义的MapperMethod对象,如果对象不为空就真正执行数据库方法,这里执行的内容先不定义。下面我们在sqlS原创 2020-09-23 00:11:25 · 757 阅读 · 0 评论 -
MyBatis框架实现(04)读取mapper配置
书接前文,我们写了一个架子,从SqlSessionFactory中获取SqlSession,但是中间还缺内容,下面我们要做的就是从配置文件中读取映射文件的配置。先来看一下现在的全局配置文件:现在我们只配置了数据源,在mybatis中最少要配置两个内容,一个是数据源,另一个就是映射文件。下面加入映射文件的配置:现在在resource下面加入映射文件:这里的SQL语句的参数先写成字符串的配置形式,其它的内容不变。然后我们在配置文件中读取mapper的内容,在读取前,首先考虑获取mappe原创 2020-09-22 12:07:06 · 559 阅读 · 0 评论 -
MyBatis框架实现(03)获取一个sqlSession
书接上回,我们读取数据源以后,目的是为了获取一个连接,在mybatis中就是获取一个sqlSession来执行数据库。首先定义一个SqlSessionFactory:我们直接简化定义,创建一个配置属性和一个构造方法,我们的使用步骤就可以加上SqlSessionFactory的创建:然后在这里面写一个获取sqlSession的方法,获取前,首先初步定义SqlSession类:然后在SqlSessionFactory中定义获取sqlSession的方法:然后我们使用框架时就可以直原创 2020-09-22 12:06:36 · 562 阅读 · 0 评论 -
MyBatis框架实现(02)从配置文件读取数据源
前面回顾了JDBC的写法,下面正式开始手写mybatis。我们自己实现的不是功能全面的,而是一个简单版的mybatis。目的是为了更加熟悉mybatis的流程。读取数据源首先实现mybatis的全局配置读取:1、设定mybatis的全局配置文件就在maven项目的resource文件夹下面2、是一个普通的xml文件,里面包含了数据库的配置和mapper的读取3、读取xml文件使用dom4j技术上面三个是读取的前提条件。现在的目的是先实现,扩展可以以后再做。先来看...原创 2020-09-22 12:06:04 · 883 阅读 · 0 评论 -
MyBatis框架实现(01)从JDBC开始
学习了mybatis的用法,简单的查看了mybatis的源码,现在我们来徒手实现一个简单的mybatis。mybatis框架是对JDBC的封装,里面涉及到了很多设计模式,比如动态代理,责任链等等。可以说手写一个框架是对Java能力的一个综合应用。下面我们还从JDBC开始。JDBC我们现在改一种写法,使用JDK7的TWR形式,定义dao类:这种方式不用管理资源的关闭。下面来看一下调用方法:这里直接获取编译对象,然后获取结果,看一下调用方法:可以看到,运行结果正...原创 2020-09-22 12:05:31 · 126 阅读 · 0 评论 -
MyBatis源码分析(06)流程总结
前面对一个查询过程使用debug进行了粗略的源码分析。其实无论是JDBC还是mybatis,都可以归纳为一个大的流程:1、解析数据库配置加载到内存中2、解析SQL语句加载到内存中3、操作数据库我们可以把前面的过程总结为一张简单的流程图:...原创 2020-09-22 12:04:52 · 80 阅读 · 0 评论 -
MyBatis源码分析(05)执行查询SQL
前面的获取对象的过程基本都debug完了,下面看最后一行:String name = mapper.selectNameById(1);也就是执行SQL语句的具体过程。下面从SQL语句的执行开始debug:1、String name = mapper.selectNameById(1);我们自定义的接口UserMapper是个接口,没有实现类,前面分析获取mapper时我们知道,mybatis会为mapper类生成代理类,生成代理类的方法是使用Mapp...原创 2020-09-22 12:04:14 · 347 阅读 · 2 评论 -
MyBatis源码分析(04)获取mapper
通过前面的debug,我们知道了SqlSessionFactory和SqlSession两个对象是如何构建的,下面我看一下如何从sqlSession中获取mapper对象,也就是这一行:UserMapper mapper = session.getMapper(UserMapper.class);首先,定位起点:1、UserMapper mapper = session.getMapper(UserMapper.class);这里sqlSession的默认...原创 2020-09-22 12:03:33 · 484 阅读 · 0 评论 -
MyBatis源码分析(03)SqlSession和Executor
前面的内容在源码中查看了SqlSessionFactory对象的整个构建过程,就是下面这一行代码:SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);下面我们来看一下SqlSession对象的构建过程,也就是下面这一行代码:SqlSession session = sqlSessionFactory.openSession();...原创 2020-09-22 12:02:53 · 2538 阅读 · 0 评论 -
MyBatis源码分析(02)Configuration和SqlSessionFactory
分析和学习一个框架的源码是一件非常枯燥和无聊的事(看同事的代码也是如此),所以我们遵循简单的步骤,从粗到细,从我们熟悉的内容到具体内容,一点点来学习mybatis。其实我们对jdbc是很熟悉的,也了解jdbc的步骤,mybatis的底层是jdbc,那么mybatis在大步骤上一定和jdbc是差不多的,而在每一步上面,mybatis又是如何加入了自己的特色和元素,这是我们要分析和学习的地方。首先来看一下我们前面写过的代码:上面的代码第一行和第二行是用来读取资源文件的,最后一行...原创 2020-09-22 12:02:17 · 426 阅读 · 0 评论 -
MyBatis源码分析(01)核心概念
核心概念在对mybatis框架进行源码分析之前,先来说几个mybatis的核心概念,也是前面讨论框架时遇到的知识点:我们前面在练习mybatis框架的使用时,有个全局配置的mybatis-config.xml文件,它对应的类就是第一个核心概念中的Cnfiguration类。SQLSessionFactory和SqlSession是我们使用常见的操作类,后面几个核心类就是具体的一次操作数据库的不同阶段负责的类。这些核心概念是我们深入了解mybatis需要牢记的内容。...原创 2020-09-22 11:21:57 · 107 阅读 · 0 评论 -
MyBatis快速入门(22)SpringBoot集成Mybatis
用法参考:https://www.jianshu.com/p/87b37d1e3f21https://www.jianshu.com/p/c338c58a1279声明式事务参考:https://www.jianshu.com/p/b866ab01f90b原创 2020-09-21 19:09:25 · 89 阅读 · 0 评论 -
MyBatis快速入门(21)Spring集成Mybatis
前面的内容讨论了mybatis的用法,在实际开发中,最常用的是使用spring与mybatis做整合。因此要用到MyBatis-Spring。MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和SqlSession并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的DataAccessException。最终,可以做到应用代码不依赖于 MyBa...原创 2020-09-21 19:08:40 · 127 阅读 · 0 评论 -
MyBatis快速入门(20)MyBatis通用Mapper4
通用Mapper可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。极其方便的使用MyBatis单表的增删改查。支持单表操作,不支持通用的多表联合查询。通用 Mapper 支持 Mybatis-3.2.4 及以上版本。添加依赖配置sqlSession修改实体类注意表名与实体类不是一个单词的要配置表名。mapper继承测试selectOne方法...原创 2020-09-21 19:07:15 · 425 阅读 · 0 评论 -
MyBatis快速入门(19)Mybatis分页插件
下面讨论mybatis中经典的分页插件的使用方法。1. 引入分页插件2. 配置拦截器插件helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby特别注...原创 2020-09-21 19:06:40 · 23160 阅读 · 3 评论 -
MyBatis快速入门(18)Mybatis API方法介绍
我们已经讨论过如何配置 MyBatis 和创建映射文件了。MyBatis 的 Java API 就是你收获你所做的努力的地方。正如你即将看到的,和 JDBC 相比,MyBatis 很大程度简化了你的代码并保持代码简洁,容易理解并维护。MyBatis 3 已经引入了很多重要的改进来使得 SQL 映射更加优秀。SqlSessions使用 MyBatis 的主要 Java 接口就是 SqlSession。你可以通过这个接口来执行命令,获取映射器和管理事务。我们会概括讨论...原创 2020-09-21 19:06:01 · 889 阅读 · 0 评论 -
MyBatis快速入门(17)注解映射方式
mybatis注解方式就是将SQL语句直接写在接口上,优点是对于需求简单,SQL语句简单的系统,开发效率高,不用写xml文件。缺点是当SQL有变化时,需要从新编译代码,一般情况下,不建议使用注解方式,还是建议使用xml映射文件的方式,下面简单介绍一下注解方式。Select注解首先来看注解形式的查询写法:使用注解就是在方法接口上面写增删改查四种形式的注解,并把SQL语句写在@Select注解里面,写法上和xml文件中没什么区别,关于参数上的注解,其实单个参数是不用加的,...原创 2020-09-21 19:05:08 · 2297 阅读 · 0 评论 -
MyBatis快速入门(16)动态SQL
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBa原创 2020-09-21 19:04:33 · 101 阅读 · 0 评论 -
MyBatis快速入门(15)配置日志打印
Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理:SLF4JApache Commons LoggingLog4j 2Log4jJDK loggingMyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具。它会使用第一个查找得到的工具(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging,所以在这种配置环境下的原创 2020-09-21 19:03:56 · 810 阅读 · 0 评论 -
MyBatis快速入门(14)XML映射文件---缓存
前面的内容我们讨论了映射文件里面几乎所有的标签和用法,下面我来讨论最后一个,也就是缓存的用法。一级缓存Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,...原创 2020-09-21 19:03:25 · 136 阅读 · 0 评论 -
MyBatis快速入门(13)XML映射文件-其它标签
前面介绍了mybatis的insert,delete,update,select四个主要的参数,也是映射文件中四个主要的标签。除了这四个我们还使用了selectKey标签生成了主键id,下面我们来讨论除了增删改查这四个标签之外的其它标签。从这些当中也能看出mybatis的强大之处。selectKey标签先来回顾一下selectKey标签,有时候新增一条数据,知道新增成功即可。但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了。这时候,通过...原创 2020-09-21 17:23:55 · 456 阅读 · 0 评论 -
MyBatis快速入门(12)XML映射文件-增删改
数据库修改语句包括 insert,update 和 delete三种,它们的实现非常接近,看一下insert标签有哪些属性:delete标签的属性:update标签的属性:可以看到,三种标签的属性非常接近,delete和update基本一样,insert相比其它两种多了几个标签,下面会详细介绍。增删改标签属性增删改语句的标签的属性中:id和parameterType的意思不用说,作用于前面的select的id和parameterType属性一样。...原创 2020-09-20 13:52:57 · 246 阅读 · 0 评论 -
MyBatis快速入门(11)XML映射文件-select
XML映射文件MyBatis 的真正强大在于它的映射语句,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 为聚焦于 SQL 而构建,以尽可能地为你减少麻烦。SQL 映射文件只有很少的几个顶级元素,也就是mapper中的标签(按照应被定义的顺序列出):cache– 对给定命名空间的缓存配置。cache-ref– 对其他命名空间缓存配置的引用。result..原创 2020-09-20 13:52:13 · 818 阅读 · 0 评论 -
MyBatis快速入门(10)全局配置--settings
mybatis的全局配置文件中,还有一个非常重要的标签,就是settings标签,这是 MyBatis 中极为重要的功能设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项的意图、默认值等。一个配置完整的 settings 元素的示例如下:关于settings中可以设置的功能,以后会对重要的功能进行单独的介绍,这里我们先了解一下。...原创 2020-09-20 13:51:24 · 154 阅读 · 0 评论 -
MyBatis快速入门(09)全局配置--插件
在SQL语句方法执行的过程中,MyBatis 允许你编写插件(plugin)在执行过程中的某一点进行拦截调用,执行自己的定制化业务。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setParameters)ResultSe原创 2020-09-20 13:50:02 · 178 阅读 · 0 评论 -
MyBatis快速入门(08)全局配置--SQL映射器
我们写的SQL语句都要配置到全局配置文件当中,SQL映射器指的就是mappers标签中的内容。首先我们需要告诉 MyBatis 到哪里去找到这些SQL语句的xml文件。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括file:///的 URL),或类名和包名等。例如上面几种都是一些常见包名路径的写法,现在大部分项目都是maven类型的项目结构,mybatis建议的..原创 2020-09-20 13:49:19 · 105 阅读 · 0 评论 -
MyBatis快速入门(07)全局配置--多类型数据库兼容
有时候我们开发的程序所写的SQL语句需要兼容多种数据库。比如单机版可能需要在Oracle中运行,线上的可能需要在mysql中运行,那么我们就要为同一业务的SQL针对不同的数据库厂商各写一种写法(如果写法不同)。因此我们需要程序能够根据数据库自动识别调用哪一个SQL语句。mybatis也支持多数据库厂商的配置。首先在全局配置文件中加入多数据库配置,比如需要兼容sqlite和mysql:注意type="DB_VENDOR"是固定的写法,下面的属性name写的是数据库的正式名字,比如MySQL、Ora原创 2020-09-20 13:48:48 · 733 阅读 · 0 评论 -
MyBatis快速入门(06)全局配置--环境配置
mybatis中的环境配置指的就是environments标签内的配置,如下:注意这里的关键点:默认使用的环境 ID(比如:"development")。每个 environment 元素需要定义环境 ID(比如:id="development" 等)。事务管理器的配置(比如:type="JDBC")。数据源的配置(比如:type="POOLED")。多环境配置配置中,外面是environments标签,里面是environment标签,从结构上可...原创 2020-09-20 03:11:21 · 197 阅读 · 0 评论 -
MyBatis快速入门(05)Java类型与数据库类型
我们的入参和回参都是一个Java类型。我们执行sql语句查出来的都是数据库中的类型,那么两者是如何对应的,针对不同的数据库字段类型,应该用什么Java类型接收,可以看下面的对应表:上面列出了我们平时用的绝大部分类型,如果有不知道返回类型改用什么Java类去接收值,可以查看上面的图片。...原创 2020-09-20 03:10:29 · 240 阅读 · 0 评论 -
MyBatis快速入门(04)全局配置--属性和别名
属性配置前面的入门例子中,我们将数据库数据源的参数写死在了mybatis的全局配置中:这些参数更好的写法是写在一个属性文件当中,让mybatis读取属性文件,这样能把参数值和mybatis配置分离。在maven的resource目录下新建一个db.properties文件:然后在mybatis配置文件中引入这个属性文件:然后把数据源的变量替换为属性文件中的参数:这是一种比较好的配置方法。配置别名我们在xml中写SQL语句的时候,...原创 2020-09-20 03:08:34 · 188 阅读 · 0 评论 -
MyBatis快速入门(03)入门例子说明
前面一起写了一个mybatis的入门例子,下面来针对例子进行一些补充说明。使用Java代码 构建 SqlSessionFactory如果你更愿意直接从 Java 代码而不是 XML 文件中创建配置,或者想要创建你自己的配置构建器,MyBatis 也提供了完整的配置类,提供所有和 XML 文件相同功能的配置项。示例如下:上面的例子中每个类代表什么后面会详细说。注意该例中,configuration 添加了一个映射器类(UserMapper.class)。映射器类是 Ja...原创 2020-09-20 03:06:49 · 103 阅读 · 0 评论 -
MyBatis快速入门(02)入门例子
MyBatis中文官方文档地址http://www.mybatis.org/mybatis-3/zh/index.html我们打开文档,可以看到mybatis的介绍,而介绍下面就是一个紧跟着的入门说明,下面我来写一下mybatis的入门例子,完成上一篇文章中的jdbc完成的功能,并且通过这个例子来初步了解mybatis。第1步:添加依赖使用mybatis需要添加mybatis的jar包依赖,这里我们使用比较稳定的3.4.6版本,添加后maven的pom文件如下:...原创 2020-09-18 19:01:40 · 155 阅读 · 0 评论 -
MyBatis快速入门(01)JDBC回顾
什么是 MyBatisMyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。MyBatis中文官方文档地址http://www.mybatis.org/mybatis-3/zh/ind...原创 2020-09-18 19:00:58 · 157 阅读 · 0 评论