MyBatis
官小飞
hello everybody,hello everyone。
展开
-
Mybatis学习之开发环境搭建(1)
什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.orm工具的基本思想无论是用过的hibern原创 2016-06-13 10:41:59 · 457 阅读 · 0 评论 -
深入理解mybatis原理(四) MyBatis的二级缓存的设计原理
[+]MyBatis的缓存机制整体设计以及二级缓存的工作模式MyBatis二级缓存的划分使用二级缓存必须要具备的条件一级缓存和二级缓存的使用顺序二级缓存实现的选择MyBatis自身提供的二级缓存的实现写在后面关于涉及到的设计模式 MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。本文将全面分析My原创 2017-05-20 10:06:02 · 676 阅读 · 0 评论 -
深入理解mybatis原理(五) MyBatis缓存机制的设计与实现
本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论。MyBatis将数据缓存设计成两级结构,分为一级缓存、二级缓存: 一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存。一级缓存是MyBatis内部实现的一个特性原创 2017-05-20 10:07:40 · 6728 阅读 · 0 评论 -
深入理解mybatis原理(六) MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存
前几天网友chanfish 给我抛出了一个问题,笼统地讲就是如何能细粒度地控制MyBatis的二级缓存问题,酝酿了几天,觉得可以写个插件来实现这个这一功能。本文就是从问题入手,一步步分析现存的MyBatis的二级缓存的不足之处,探讨一点可以改进的地方,并且对不足之处开发一个插件进行弥补。本文如下组织结构:一个关于MyBatis的二级缓存的实际问题当前MyBatis二级缓原创 2017-05-20 10:10:35 · 743 阅读 · 0 评论 -
深入理解mybatis原理(七) MyBatis的架构设计以及实例分析
MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现。一、MyBatis的框架设计 注:上图很大程度上参考了iteye 上的chenjc_it 所写的博文原理分析之二:框架整原创 2017-05-20 10:12:45 · 934 阅读 · 0 评论 -
深入理解mybatis原理(八) MyBatis事务管理机制
MyBatis作为Java语言的数据库框架,对数据库的事务管理是其非常重要的一个方面。本文将讲述MyBatis的事务管理的实现机制。首先介绍MyBatis的事务Transaction的接口设计以及其不同实现JdbcTransaction和 ManagedTransaction;接着,从MyBatis的XML配置文件入手,讲解MyBatis事务工厂的创建和维护,进而阐述了MyBatis事务的创建和使原创 2017-05-20 10:17:13 · 547 阅读 · 0 评论 -
深入理解mybatis原理(九) Mybatis数据源与连接池
对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池。 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的。紧接着将分类介绍UNPOOLED、POOLED和JNDI类型的数据源组织;期间我们会重点讲解POOLED类型的数据源和其实现的原创 2017-05-20 10:23:55 · 421 阅读 · 0 评论 -
深入理解mybatis原理(十) Mybatis插件原理简单分析
我们目前在Mybatis中,我们知道Mybatis的Mapper是一个接口,而不是一个实体类。在Java中接口是没有办法运行的。那么它是怎么运行的呢?它是通过动态代理运行。一、MyBatis是怎么实现这个动态代理的[java] view plain copy/** * Copyright 2009-2015 the ori原创 2017-05-20 10:25:29 · 834 阅读 · 1 评论 -
深入理解mybatis原理(十一) Mybatis插件原理之实现细节
Mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的),由于插件会深入到Mybatis的核心,因此在编写自己的插件前最好了解下它的原理,以便写出安全高效的插件。一、代理链的生成Mybatis支持对Executor、StatementHandler、PameterHandler和ResultSetH原创 2017-05-20 10:27:28 · 413 阅读 · 0 评论 -
深入理解mybatis原理(三) MyBatis的一级缓存实现详解
0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能。本文的目的则是向读者详细介绍MyBatis的一级缓存,深入源码,解析MyBatis一级缓存的实现原理,并且针对一级缓存的特点提出了在实际使用过程中应该注意的事项。原创 2017-05-20 10:02:39 · 494 阅读 · 0 评论 -
深入理解mybatis原理(一) Mybatis初始化机制详解
对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外。本章将通过以下几点详细介绍MyBatis的初始化过程。 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置文件创建Configuration对象的过程 3. 手动加载XML配置文件创建Configuration对象完成初始化,创建并使用SqlSessionFa原创 2017-05-20 09:56:41 · 1087 阅读 · 0 评论 -
Mybatis学习之接口的方式编程(2)
前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句:session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1)其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语原创 2016-06-13 10:43:36 · 360 阅读 · 0 评论 -
Mybatis学习之实现数据的增删改查(3)
前面已经讲到用接口的方式编程。这种方式,要注意的一个地方就是。在User.xml 的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.IUserOperation" ,命名空间非常重要,不能有错,必须与我们定义的package 和 接口一致。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:1. 用 mybatis原创 2016-06-13 10:46:05 · 435 阅读 · 0 评论 -
Mybatis学习之实现关联数据的查询(4)
有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如最常见到的多对一,一对多等。这些查询是如何处理的呢,这一讲就讲这个问题。我们首先创建一个Article 这个表,并初始化数据.[html] view plain copy print?Drop TABLE IF EXISTS `article`;原创 2016-06-13 10:47:43 · 321 阅读 · 0 评论 -
Mybatis学习之集成spring3(5)
在这一系列文章中,前面讲到纯粹用mybatis 连接数据库,然后 进行增删改查,以及多表联合查询的的例子,但实际项目中,通常会用 spring 这个沾合剂来管理 datasource 等。充分利用spring 基于接口的编程,以及aop ,ioc 带来的方便。用spring 来管理 mybatis 与管理hibernate 有很多类似的地方。今天的重点就是数据源管理以及 bean的配置。原创 2016-06-13 10:59:04 · 405 阅读 · 0 评论 -
Mybatis学习与Spring MVC 的集成(6)
前面几篇文章已经讲到了mybatis与spring 的集成。但这个时候,所有的工程还不是web工程,虽然我一直是创建的web 工程。今天将直接用mybatis与Spring mvc 的方式集成起来,源码在本文结尾处下载.主要有以下几个方面的配置1. web.xml 配置 spring dispatchservlet ,比如为:mvc-dispatcher2. mvc-dispatcher-原创 2016-06-13 11:00:46 · 454 阅读 · 0 评论 -
Mybatis学习之实现mybatis分页(8)
上一篇文章里已经讲到了mybatis与spring MVC的集成,并且做了一个列表展示,显示出所有article 列表,但没有用到分页,在实际的项目中,分页是肯定需要的。而且是物理分页,不是内存分页。对于物理分页方案,不同的数据库,有不同的实现方法,对于mysql 来说 就是利用 limit offset,pagesize 方式来实现的。oracle 是通过rownum 来实现的,如果你熟悉相原创 2016-06-13 11:03:42 · 639 阅读 · 0 评论 -
Mybatis学习之动态sql语句(7)
Mybatis 的动态sql语句是基于OGNL表达式的。可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似.3. trim (对包含的内容加上 prefix,或者 s原创 2016-06-13 11:02:10 · 1413 阅读 · 1 评论 -
深入理解mybatis原理(二) 关联查询
目录(?)[+]嵌套语句查询嵌套语句查询的原理N1问题嵌套结果查询mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映射到定义的Java Bean 中。下面通过一个实例,来展示一下Mybatis对于常见的一对多和多对一关系复杂映射是怎样处理的。设计一个简单的博客系统,一个用户可以开多个博客,在博客中可以发表文章,允许发原创 2017-05-20 09:59:10 · 635 阅读 · 0 评论 -
深入理解mybatis原理(十二) mybatis深入理解之#与$区别
一、介绍 mybatis 中使用 Mapper.xml里面的配置进行 sql 查询,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下:[java] view plain copyselect * from user where name = "Jack"; 上述 sql 中,我们希原创 2017-05-20 10:29:24 · 694 阅读 · 1 评论