
Mybatis
服务端开发
这个作者很懒,什么都没留下…
展开
-
Mybatis源码分析(一):设计要点与核心架构分析
设计初衷与目的在mybatis的框架出现之前,在Java中存在两种方式来进行数据库操作:第一种为JDBC,这种方式的缺点就是需要在应用代码中加载数据库驱动,创建数据库连接,创建执行语句,使用数据库连接来执行语句,获取返回结果,解析返回结果,关闭数据库连接等操作,所以是比较底层的操作,使用复杂度较高,并且每个有SQL操作的地方都要重复按照这个逻辑来定义代码,造成代码冗余;第二种方式...原创 2019-02-22 10:58:24 · 4494 阅读 · 0 评论 -
Mybatis源码分析(二):SqlSessionFactory与框架启动加载
概述Mybatis作为一个SQL管理和执行框架,在web应用程序当中充当数据访问中间件的角色,即应用程序在接收到请求时,通过DAO层方法从mybatis获取一个数据库连接,然后通过该连接将对应的SQL发送给数据库执行,最后获取返回结果。同时可以通过该连接发送多条SQL,即发送多个请求给数据库,所以该数据库连接的作用就相当于web浏览器中的一个会话。基于这个业务背景,mybatis设计中...原创 2019-02-26 23:21:29 · 3897 阅读 · 0 评论 -
Mybatis源码分析(三):mapper.xml的解析及namespace与Mapper接口的映射
概述由上一篇文章分析可知,在调用SqlSessionFactoryBuilder的build方法创建SqlSessionFactory对象实例时,会首先调用builder包的xml子包的XMLConfigBuilder解析mybatisConfig.xml文件并创建和保存配置信息到Configuration对象,然后使用该Configuration对象作为参数场景SqlSessionFacto...原创 2019-02-27 14:07:47 · 5449 阅读 · 0 评论 -
Mybatis源码分析(四):mapper.xml增删查改的节点解析和动态SQL的实现
概述我们通常在mapper.xml中定义增删查改select|insert|update|delete的相关SQL,在对应的select|insert|update|delete节点中支持通过if,(choose, when, otherwise),(trim, where, set),foreach等内嵌节点来实现动态SQL定义,动态SQL的使用方法可以参考:动态 SQL。对于增删查改,...原创 2019-02-27 17:19:33 · 4163 阅读 · 0 评论 -
Mybatis源码分析(五):Mapper接口的方法调用与SQL的执行
概述在应用代码中,如果不结合spring来使用mybatis,则需要通过SqlSession获取mapper接口对应的代理对象MapperProxy,然后通过该代理对象来调用并执行mapper接口的方法。使用示例如下:String resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = R...原创 2019-02-27 23:33:15 · 5945 阅读 · 0 评论 -
Mybatis源码分析(六):SQL执行器Executor与一二级缓存的实现
SQL执行器Executor由上篇文章分析可知,mybatis在内部主要通过executor包的Executor来调用JDBC的相关API来完成SQL语句的执行。Executor通常绑定到SqlSession中,即Executor作为SqlSession对象的一个内部属性,故Executor的对象创建是与SqlSession的对象创建一起的。SqlSession对象是由SqlSessi...原创 2019-02-28 00:14:08 · 4384 阅读 · 1 评论 -
Mybatis-Spring源码分析(一):Spring整合Mybatis的配置方式与内部实现
概述在一个完整的JavaWeb项目中,通常包括web层,service层,dao层这三层结构,整个项目的类对应的bean对象,通过Spring的IOC框架来管理。所以为了方便mybatis框架的使用,mybatis提供了对spring框架的接入实现,在项目的pom.xml中通常需要增加一下配置来引入Spring对mybatis框架相关组件的管理:<dependency> &...原创 2019-02-28 23:57:21 · 4410 阅读 · 0 评论 -
Mybatis-Spring源码分析(二):SqlSessionFactoryBean的设计与实现
概述mybatis-spring为了实现spring对mybatis的整合,即将mybatis的相关组件作为spring的IOC容器的bean来管理,使用了spring的FactoryBean接口来对mybatis的相关组件进行包装。spring的IOC容器在启动加载时,如果发现某个bean实现了FactoryBean接口,则会调用该bean的getObject方法,获取实际的bean对象注...原创 2019-03-01 18:59:49 · 4456 阅读 · 0 评论 -
Mybatis-Spring源码分析(三):SqlSessionTemplate基于动态代理实现线程安全
概述在mybatis中定义了SqlSession接口用于封装一个数据库的连接,通过该数据库连接来对数据库发起相关数据库操作请求并获取结果集。SqlSession接口在mybatis中的默认实现为DefaultSqlSession,其中DefaultSqlSession不是线程安全的,即多个需要访问数据库的线程不能共享同一个DefaultSqlSession的对象实例,否则会出现线程之间的数据...原创 2019-03-03 17:50:16 · 4333 阅读 · 0 评论 -
Mybatis的缓存机制理解
概述针对查询操作,mybatis支持通过缓存的方式来减少SQL的调用,提高查询性能。在缓存级别方面分为一级缓存和二级缓存,一级缓存的粒度较小,是与某个SqlSession绑定的,只对该SqlSession的相关查询操作进行缓存,不同SqlSession实例之间相互不影响,缓存为使用本地内存实现;二级缓存是一种全局缓存,是由所有SqlSession实例所共享的,即不同SqlSession实例...原创 2019-02-21 17:44:30 · 4724 阅读 · 0 评论 -
Spring扫描Mybatis的mapper接口的三种配置方式
mybatis支持与spring结合使用,使得mybatis中的mapper接口可以作为spring容器中的bean被应用代码中相关类,如Service类,通过@Autowired自动注入进来。在使用方面需要在项目中引入以下包:<dependency> <groupId>org.mybatis</groupId>原创 2019-02-21 14:17:39 · 27146 阅读 · 1 评论 -
JDBC的PreparedStatement和不使用Spring的Mybatis使用示例
从 XML 中构建 SqlSessionFactoryBlogMapper.xml配置如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC &qu原创 2019-02-21 13:49:52 · 5215 阅读 · 0 评论 -
Mybatis设计原理与Hibernate,Spring的关系简述
Mybatis与Hibernate两者的设计初衷都是对JDBC进行包装,使得应用代码可以基于OOP来进行SQL的相关操作,即应用代码中可以通过POJO的方法调用来执行指定的SQL;Hibernate:POJO和数据表的映射,自动生成SQL,应用代码不需要定义相关SQL,直接调用POJO的相关方法即可;Mybatis:POJO和SQL的映射,需要在应用代码中提供SQL,mybatis提供基于...原创 2019-02-21 14:46:59 · 4460 阅读 · 0 评论