-
maven+mybatis书籍
2019-01-20 17:19:50maven书籍+mybatis书籍打包下载。可以点击下载,尽情学习交流 -
深入浅出MyBatis:JDBC和MyBatis介绍
2020-07-31 13:31:58最近在休陪产假,时间比较零碎,...本篇分享MyBatis书籍的第一篇,首先回忆下JDBC的相关概念,了解Java提供的访问数据库最基本的方式,然后介绍下MyBatis的基本特性和核心组件,最后说下书的整体结构,了解后续文章的最近在休陪产假,时间比较零碎,准备看2本书充实下,一本是「深入浅出MyBatis:技术原理与实践」,一本是「RabbitMQ实战:高效部署分布式消息队列」,为了加深记忆和理解,会进行整理、扩展和记录。
看书的目标不是把所有的细节都记住,而是从整体上了解一个技术能做什么,包含的特性、基本模块,实现原理和常见使用场景。
本篇分享MyBatis书籍的第一篇,首先回忆下JDBC的相关概念,了解Java提供的访问数据库最基本的方式,然后介绍下MyBatis的基本特性和核心组件,最后说下书的整体结构,了解后续文章的大致内容。
JDBC相关概念
Java程序都是通过JDBC连接数据库的,通过SQL对数据库编程,JDBC是由SUN公司提出的一些列规范,只定义了接口规范,具体实现由各个数据库厂商去实现,它是一种典型的桥接模式。
桥接模式是一种结构型设计模式,它的主要特点是把抽象与行为实现分离开来,分别定义接口,可以保持各部分的独立性以及应对他们的功能扩展。
JDBC规范
所谓规范,就是自己定义了标准接口,做了如下抽象:用Connection代表和数据库的连接,用Statement执行SQL,用ResultSet表示SQL返回的结果,提供了对数据的便利。从Connection可以创建Statement,Statement执行查询得到ResultSet。
上面说的Connection、Statement、ResultSet都应该是接口,具体实现由各个数据库提供商提供。有了规范,可以通过统一的接口,访问多种类型的数据库,可随便切换数据库。
数据库驱动
上面提到,接口的实现由各个厂商提供,那么实现类的类名就会不统一,去创建Connection对象时,代码就会写死某个实现类,切换数据库时,就需要修改代码,这样不太好。为了解决这个问题,抽象了Driver驱动的概念。
Connection con=MySqlConnectionImpl("127.0.0.1",3306,"mi_user",userName,pwd);
每个数据库都需要实现Driver接口,通过Driver可获得数据库连接Connection,通过反射机制动态创建。
Class.forName("com.mysql.jdbc.Drier");
同一个程序可能访问不同的数据库,通过DriverManager来管理驱动,Driver在初始化的时候,需要注册到DriverManager中。
DriverManager提供了一个getConnection方法,用于建立数据库Connection:
Connection con=DriverManager.getConnection("127.0.0.1",3306,"mi_user",userName,pwd);
如果有多个数据库驱动,DriverManager如何区分呢,需要在数据库连接url中指定,比如mysql需要添加jdbc:mysql前缀:
String url= "jdbc:mysql://127.0.0.1:3306/mi_user"; Connection con=DriverManager.getConnection(url,userName,pwd);
数据源
数据源DataSource包含连接池和连接池管理2个部分,习惯上称为连接池。在系统初始化的时候,将数据库连接作为对象存储在内存中,当需要访问数据库时,从连接池中取出一个已建立的空闲连接对象。
使用数据源,获取其DataSource对象,通过该对象动态的获取数据库连接。另外,DataSource对象可以注册到名字服务(JNDI)中,可以通过名字服务获得DataSource对象,无需硬性编码驱动。
DriverManager是JDBC1提供的,DataSource是JDBC2新增的功能,提供了更好的连接数据源的方法。
对比Hibernate和MyBatis
通过上面的介绍,传统的JDBC编程给我们带来了连接数据库的功能,但其工作量相对较大,首先连接,然后处理JDBC底层事务,处理数据类型,还要对可能产生的异常进行捕捉处理并正确的关闭资源。
实际工作中,很少使用JDBC进行编程,提出了ORM模型,主要解决数据库数据和POJO对象的相互映射。
Hibernate和Mybatis都是ORM模型,Hibernate提供的是一种全表映射的模型,对JDBC的封装程度比较高。但Hibernate也有不少缺点,列举如下:
- 全表映射带来的不便,比如更新时需要发送所有的字段;
- 无法根据不同的条件组装不同的SQL;
- 对多表关联和复杂SQL查询支持较差,需要自己写SQL,返回后,需要自己将数据组装为POJO;
- 不能有效支持存储过程;
- 虽然有HQL,但性能较差,大型互联网系统往往需要优化SQL,而Hibernate做不到。
大型互联网环境中,灵活、SQL优化,减少数据的传递是最基本的优化方法,Hibernate无法满足要求,而MyBatis提哦给你了灵活、方便的方式,是一个半自动映射的框架。
MyBatis需要手工匹配提供POJO、SQL和映射关系,而全表映射的Hibernate只需要提供POJO和映射关系。
MyBatis可以配置动态SQL,可以解决Hibernate的表名根据时间变化,不同的条件下列明不一样的问题。可以优化SQL,通过配置决定SQL映射规则,也能支持存储过程,对于一些复杂和需要优化性能的SQL的查询它更加方便。
核心组件
核心组件主要包括以下几个:
- SqlSessionFactoryBuilder:会根据配置信息或代码来生成SqlSessionFactory;
- SqlSessionFactory:依靠工厂来生成SqlSession;
- SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口;
- SQL Mapper:是MyBatis新设计的组件,由一个Java接口和XML文件构成,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
构建SqlSessionFactory
每个MyBatis应用都是以SqlSessionFactory的实例为中心的,它的任务是创建SqlSession。SqlSesion类似于一个JDBC的Connection对象。
提供了2种方式创建SqlSessionFactory:一种是XML配置的方式,一种是代码的方式,推荐使用XML配置的方式。
定义mybatis-config.xml文件如下:
<? xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="application.properties"> </properties> <!-- 定义别名 --> <typeAliases> <typeAlias alias="role" type="com.learn.chapter2.po.Role"/> </typeAliases> <!-- 定义数据库信息.默认使用development数据库构建环境 --> <environments default="development"> <environment id="development"> <!-- 采用jdbc事务管理 --> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 定义映射器 --> <mappers> <mapper resource="com\learn\chapter2\mapper\roleMapper.xml"/> </mappers> </configuration>
创建SqlSessionFactory
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
创建SqlSession
SqlSession是一个接口类,扮演者门面的作用,真正干活的是Executor接口。需要保证每次用完正常关闭它。
SqlSession sqlSession=null; try{ sqlSession=sqlSessionFactory.openSession(); //some code sqlSession.commit(); } catch(Exception ex){ sqlSession.roolback(); } finally{ if(sqlSession!=null){ sqlSession.close(); } }
映射器
映射器是由Java接口和XML文件(或注解)共同组成的,作用如下:
- 定义参数类型
- 描述缓存
- 描述SQL语句
- 定义查询结果和POJO的映射关系
首先,定义Java接口:
public interface RoleMapper{ public Role getRole(Long id); }
然后,定义映射XML文件,RoleMapper.xml
<? xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <mapper namespace ="com.learn.chapter2.mapper.RoleMapper"> <select id="getRole" paramterType="long" resultType="role" > select id,role_name as roleName , note from t_role where id=#{id} </select> </mapper>
POJO对象Role的定义比较简单,就不列出了。#{id}为这条SQL的参数,SQL列的别名和POJO的属性名称保持一致,会把这条语句的查询结果自动映射到Role属性上,这就是自动映射。
执行查询
RoleMapper roleMapper=sqlSession.getMapper(RoleMapper.class); Role role=roleMapper.getRole(1L); String roleName=role.getRoleName();
组件生命周期
SqlSessionFactory在MyBatis应用的整个生命周期中,每个数据库只对应一个SqlSessionFactory,可以实现一个工具类,以单例模式获取该对象。
SqlSession的生命周期在请求数据库处理事务的过程中,它是一个线程不安全的对象,在涉及多线程的时候要特别当心。它存活于一个应用的请求和操作,可以执行多条SQL,保证事务的一致性。
Mapper的作用是发送SQL,然后返回需要的结果,或者执行SQL修改数据库的数据,所以它应该在一个SqlSession事务方法之内,如同JDBC中一条SQL语句的执行,它最大的范围和SqlSession是相同的。
书的整体结构
本书分为3个部分,依次介绍了MyBatis的基础应用、原理及插件开发、实战应用。
基础应用
主要介绍如何高效地使用MyBatis:
- MyBatis特性
- 核心组件及其生命周期
- MyBatis配置
- 映射器
- 动态SQL
MyBatis原理
深入源码理解MyBatis的内部运行原理以及插件的开发方法和技巧:
- 介绍MyBatis的解析和运行原理,将了解到SqlSession的构建方法,以及四大对象是如何工作的
- 介绍MyBatis的插件
实战应用
主要讲解MyBatis的一些实用的场景:
- 介绍MyBatis-Spring,讲解如何在Spring项目中集成MyBatis应用
- 介绍MyBatis的实用场景,精选一些典型场景,解析每个场景下,开发人员需要注意避免的一些错误和性能上的损失
下篇会介绍MyBatis的相关配置,更好的配置MyBatis以适用于不同的业务场景,以及提供给我们的扩展。
原文连接:https://blog.csdn.net/wanshanJay/article/details/79705338
-
mybatis中文文档(黑白书籍版)
2019-01-25 17:06:11mybatis中文文档(黑白书籍版) 官方的教程,这个是黑白的,适用于喜欢开书籍教程的朋友,当然,我也上传了彩色版本 -
MyBatis 技术内幕 - MyBatis 介绍
2019-05-01 10:49:54书籍名称:《MyBatis 技术内幕》 编著姓名:徐郡明 出版厂商:电子工业出版社 MyBatis 官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 源码下载:...MyBatis 技术内幕 - MyBatis 介绍
读书笔记
- 书籍名称:《MyBatis 技术内幕》
- 编著姓名:徐郡明
- 出版厂商:电子工业出版社
- 源码版本:3.4.0+
MyBatis
-
官方文档:http://www.mybatis.org/mybatis-3/zh/index.html
-
源码下载:https://github.com/mybatis/mybatis-3/releases
-
背景简介:
- 前身:iBatis ,Apache 开源项目
- 更名:MyBatis ,2010 年迁移到 Google Code
- 现在:2013年11月迁移到github
-
框架体系:持久层框架,DAO (全名:Data Access Data 数据访问对象)层框架
- 常用框架
- JDBC
- Hibernate
- MyBatis
- JPA (全名:Java Persistence API):EJB(全名:Enterprise JavaBean)持久化规范
- Spring JDBC
- 常用框架
-
产生背景
- JDBC(全名:Java DataBase Connection)
-
产生原因:Java 与 DataBase 之间连接的问题
-
提供接口:
- 面向Java应用程序的API (全名:Application Programming Interface)
- 面向DataBase驱动的API
-
执行流程:
-
框架缺点
- 硬编码:程序代码中存在大量不可重复使用的业务逻辑
- 高耦合:数据操作SQL与业务逻辑高度耦合在一起
- 复用性:复用性极低,维护成本很高
- 连接池:没有数据连接池,每一次数据请求都要重新发起一次数据库连接
- 返回值:需要逐一从返回结果中取值
-
- ORM(全名:Object Relation Mapping 对象关系映射)框架产生
- 产生背景:实现Java中bean对象与DabaBase中表中数据自动映射
- 主流框架:
- Hibernate
- MyBatis
- Hibernate
- 框架优势:
- 完全映射:实现 bean 对象与 Db 中 record 的完全映射
- 方便开发:开发过程中对于数据处理完全黑盒操作,不需要关注
- 独立语言:不同于SQL(全名:Select Query Language)语言,使用HQL(全名:Hibernate Query Language)语言
- 框架劣势:
- 不灵活性:由于Hibernate实现的是完全映射,导致每一次都是返回表中全部的字段,即使只需要一个字段,也需要全表查询
- 索引使用:由于Hibernate完全屏蔽了数据操作的处理,导致SQL查询语句无法准备的使用到索引,无法对SQL语句进行优化
- 独立语言:由于Hibernate使用HQL语言,不同于SQL,额外增加学习成本
- 框架优势:
- MyBatis
- 框架优势
- 支持缓存:提供一级、二级缓存使用
- 动态SQL:根据业务需求编写SQL,返回字段数量任意
- 索引优化:MyBatis 底层应用SQL语言,可以根据需要添加索引
- 配置方便:根据业务需求添加字段映射,支持多表级联
- 框架劣势
- 半自动化:MyBatis 不是完全映射的框架,需要手动维护Java Bean 与 映射关系文件
- 框架优势
- JDBC(全名:Java DataBase Connection)
-
组成部分
- PO (全名:Persistence Object):持久化对象,即 Java Bean
- mapper.java :DAO层对外提供的API接口定义
- mapper.xml:DAO层对外提供的API接口的SQL实现
-
执行流程
MyBatis 整体架构
-
MyBatis v. 3.2.7 User Guide(中英文书籍)
2017-12-24 17:21:52很好的MyBatis入门书籍,用户使用手册、可以用来巩固模糊的、不理解的知识点、 目录 简介、入门、配置、动态SQL、Statement Builders、Mapper XML文件、Logging、JavaAPI -
mybatis开篇
2020-03-18 09:41:31最近工作不太忙,着手研究了下mybatis源码(目前正在学习中。。。)。看了部分,受益匪浅,向大家推荐<<Mybatis技术内幕>...贴上mybatis的架构图,书籍也是按照这种架构逐步分析的。 ... -
100分求研究mybatis源码的书籍
2013-06-01 17:46:22手写过jdbc,,手写过...现在用的是 mybatis,mybatis的灵活 以及 功能的强大,真的让我非常的震撼。 我迫不及待的想深入的了解mybatis框架的具体实现。 有谁知道有什么相关的教材或者论坛的? 能告知的高分酬谢! -
JavaEE企业级应用开发教程(Spring+Spring MVC+MyBatis)配套书籍源码资料 ---黑马程序员 .zip
2019-07-14 08:27:49Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)配套书籍源码资料 ---黑马程序员 ,包含教学ppt,配套书籍源码,教学设计,课后题及答案,源代码 -
02.Mybatis初级使用-Mybatis核心组件
2017-03-20 14:48:49首先推荐一本介绍Mybatis的书籍:《深入浅出MyBatis技术原理与实战》 杨开振/著。例子丰富。可以拿来学习或者当手册。 Mybatis的核心组件有: SqlSessionFactoryBuilder:根据mybatis-config.xml配置文件...首先推荐一本介绍Mybatis的书籍:《深入浅出MyBatis技术原理与实战》 杨开振/著。例子丰富。可以拿来学习或者当手册。
Mybatis的核心组件有:
- SqlSessionFactoryBuilder:根据mybatis-config.xml配置文件生成SqlSessionFactory
- SqlSessionFactory:工厂接口,创建SqlSession。其实现类DefaultSqlSessionFactory是我们用来创建SqlSession的具体类
- SqlSession:一个SqlSession实例对应着一次数据库会话
- SQL Mapper: 开发者编写,由一个java接口和一个xml文件对应构成。用于设计数据库具体操作(编写映射规则、sql等)
程序中具体创建流程为:读取配置信息、通过SqlSessionFactoryBuilder创建SqlSessionFactorySession、通过SqlSessionFactory的openSession方法获得SqlSession、通过SqlSession的getMapper方法获得Mapper、调取Mapper中操作执行指定的Sql语句并得到返回值。String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); Role role = roleMapper.getRole(10002); System.out.println(role); sqlSession.close();
注意到RoleMapper是接口,不是具体实现类。而我们调用的getRole()则是通过SqlSession的getMapper()生成的动态代理对象的方法。这一过程是Mybatis框架帮助我们完成的。
-
mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理
2020-12-05 05:22:58原文:https://juejin.im/post/5abcbd946fb9a028d1412efc本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记。上一篇介绍了反射和动态代理基础,主要是为本篇文章做个铺垫,反射使配置和灵活性大大提高,... -
mybatis+spring+springmvc开发书籍管理系统(1)
2020-09-05 13:05:20之前的mybatis,spring,springmvc整合完毕之后,添加查询书籍功能。方便没看之前的这里放全部的代码(数据库在之前的整合中): 首先项目的结构如下: BookController: package com.kuang.controller; import ... -
深入浅出MyBatis:MyBatis插件及开发过程
2018-03-30 10:39:39本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记。 上一篇介绍了 MyBatis解析和运行原理 ,包括SqlSessionFactory的构建和SqlSession的执行过程,其中,SqlSession包含四大对象,可以在四大对象调度... -
mybatis源码解析(零) MyBatis简单介绍
2019-07-16 12:53:13mybatis源码解析(零) 项目结构概览 mybatis源码解析系列源码基于 3.5.2-SNAPSHOT 版本,截至...参考内容:芋道源码博客 《MyBatis技术内幕》以及其他很多文章及书籍,以及开源项目,不一一列举。 在真正开始梳理M... -
springboot集成MyBatis
2019-03-23 14:25:351. 前言 MyBatis是一款优秀的持久层框架,它支持定制化SQL、...本文较为简略,主要是入门参考,深入学习请参考Mapper、PageHelper插件作者刘增辉书籍《MyBatis从入门到精通》 2. MyBatis简介 2.1 三款框架的ORM对... -
Mybatis框架学习第八节:MyBatis 的缓存
2020-07-28 19:52:33此博客用于个人学习,来源于ssm框架的书籍,对知识点进行一个整理。 像大多数的持久化框架一样,Mybatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。Mybatis 中缓存分为一级缓存,二级... -
Mybatis框架学习第三节:MyBatis的搭建
2020-07-18 21:42:59此博客用于个人学习,来源于ssm框架的书籍,对知识点进行一个整理。 3.1 框架概述: MyBatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理... -
mybatis架构笔记
2020-10-10 20:50:18发现一本十分十分十分优秀的书籍《mybatis技术内幕》。应该可以算是我接触java技术以来,看过的深度最深,准确度最高,眼光最独到的技术类书籍,十分感慨。 为什么没有早些看到,为什么以前走了很多的弯路。。 哈哈... -
mybatis分页了解
2020-10-10 22:08:20其实这和我们阅读书籍很类似. mysql分页样例 三种常见数据库分页 PagerHelper了解 mybatis-pagehelper pagehelper api文档 一个好的讲解mybatis的网址 mybatis分页插件使用简介 如何使用分页插件 官方介绍方法 ... -
深入浅出MyBatis:MyBatis解析和运行原理
2018-03-29 10:21:08本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记。 上一篇介绍了反射和动态代理基础,主要是为本篇文章做个铺垫,反射使配置和灵活性大大提高,可以给很多配置设置参数,动态代理可以在运行时创建... -
web框架PPT——Struts 2+Hibernate+MyBatis+Spring 网站开发案例课堂 书籍附带PPT课件
2019-02-01 15:10:23web框架PPT——Struts 2+Hibernate+MyBatis+Spring 网站开发案例课堂 备注:书籍信息:清华大学出版社,9787302500605 -
【个人书籍】《Spring MVC+MyBatis开发从入门到项目实战》
2019-09-06 21:31:27《Spring MVC+MyBatis开发从入门到项目实战》书 号:978-7-121-33390-3出版日期:2018-01-29书籍特色:· 经验多:百万访问量博主倾囊相授,带你走进Web开发的方方面面。· 零基础:从简单的样例做起,逐渐深入技术... -
Mybatis框架学习第二节:MyBatis配置
2020-07-15 00:05:26此博客用于个人学习,来源于ssm框架的书籍,对知识点进行一个整理。 4.1 概述: MyBatis 的各项配置项中,properties,settings,typeAliases,typeHandler,plugin,environments,mappers 是常用的内容,其中的... -
Mybatis源码浅析(一)关于Mybatis的背景了解
2018-03-11 13:00:52之前,结合教程以及书籍学习过mybatis,但是没有较为完整的整理一下mybatis 的学习心得以及重要的技能点,所以写一个系列性的文章来重新认识学习mybatis,加深自己的印象,首先了解一下Mybatis的简介: 持久层框架... -
mybatis+spring+springmvc开发书籍管理系统(2)
2020-09-05 13:50:58这次添加添加书籍功能(有点套娃hhh): 新加了一个页面addBook.jsp BookController: package com.kuang.controller; import com.kuang.pojo.Books; import com.kuang.service.BookService; import org.spring...
-
06_Python GUI篇1-tkinter-更新20210121.pdf
-
【数据分析实战训练营】Hive详解
-
SSM整合
-
异常检测-基于相似度的方法
-
布局文件
-
【数据分析-随到随学】Mysql数据库
-
转行做IT-第2章 HTML入门及高级应用
-
HBuilderX.exe
-
欧美雨具销售网页模板
-
网上鲜花网店网页模板
-
日本卡通足球网页模板
-
2021-01-22
-
49. 字母异位词分组
-
ID3算法原理详细剖析-流程图-源代码-训练样例集-算法讨论分析
-
8 Linux 线程
-
termux之jupyter安装libzmq安装失败
-
一篇CCS的关于数据库安全的论文分析
-
韩国行业门户网站模板
-
JDK环境变量配置.txt
-
前端架构师-速成