Part 1
JDBC回顾(Java Database Connectivity)
Java Database Connectivity:Java访问数据库的解 决方案 JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些 接口。
JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与数据库厂商实现无关,从而在不同数 据库之间轻易的进行切换
JDBC的弊端
- 硬编码
SQL语句存在Java代码中,不 能很好的分离数据库语句和 Java语句,造成代码不易维护;
- 代码重复度高
大量的重复代码,以 ResultSet 为例,每次都需要重复解析结 果集;
- SQL参数固定
SQL语句的参数固定,使得SQL语句不 灵活,无法满足多变的场景。
- 底层技术
JDBC属于底层的技术,不支持 分布式,缓存等技术,对于复 杂场景的应对不好;
什么时ORM模型
ORM模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主 要解决数据库数据和 POJO 对象的相互映射。
Java对象: POJO 对象(Plain Ordinary Java Object): 简单的 Java 对象,实际就是普通JavaBeans
映射配置 :
配置分为:
1.类与数据库中表 的映射;
2.对象与表中记录的 映射;
3.类的属性与数据库中表的字段的映射
数据库 :按照数据结构来组织、存储和管理数据的仓库,ORM 模型中最底层的内容。
常见的ORM模型
Mybatis和hibernate
两者区别:
1. Hibernate是全自动化ORM; Mybatis是半自动化ORM。
2. Hibernate简化dao层,不用考虑SQL语句的编写和结果映射,重点放在业务逻辑上; Mybatis需要手写SQL语句以及结果映射。
3. Hibernate是一个重量级的框架,内部生成SQL语句,反射操作太多,导致性能下降; Mybatis是一个轻量级的框架,需要自己写sql语句,有较少的反射操作。
4. Hibernate 不方便做SQL优化,遇到较复杂的SQL语句需要绕过框架实现复杂, 对多字段的结构进行部分映射困难; Mybatis 不仅可以做SQL优化还可以SQL与Java分离,还可以自行编写映射关系, 复杂的SQL语句Mybatis效率更高
Mybatis优势: 可以进行更细致的SQL优化;容易掌握 Hibernate优势; dao层开发比mybatis简单,mybatis需要维护SQL和结果映射 hibernate数据库移植性好
mybatis 解决了jdbc 的问题:
1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3.向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
4.对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象 解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
Part2:
MyBatis发展史
MyBatis优点
简单易学 :易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现;
灵活度高:通过定制 SQL 语句,可以比较灵活的访问数据库,获取数据;
功能完整:提供了连接管理,缓存支持,线程支 持,(分布式)事务管理等功能,还 提供了其他 ORM 模型的支持。
什么是MyBatis
MyBatis是一款ORM模型,支持定制化SQL、存储过程以及高级映射。可以使用简单的 XML 或注解来配置和映射 原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录
半自动化 :支持定制化SQL、存储过程以及高级映射;
集成方便 :不仅方便 Spring 等 JavaEE 框架的集成,还与其他 ORM 模型集成也很方便
MyBatis环境搭建
1.MyBatis 软件包和依赖包
官网下载最新的 MyBatis 软件包以及找 到数据库对应的 Java 驱动包;
2.数据库环境
MySQL 数据 库及表
3.IDE
Eclipse
MyBatis快速开始
1.构建项目
2.将配置文件放入项目
3.配置主配置文件
4.创建需要的代码文件
5.sqlMapper.xml代码
配置文件代码, 除了sql语句之外其他的配置信息都可以在官方文档 进行参考编写
6.创建SqlSession
即用即关
打开的 SqlSession 要在使用后及时关闭
Part3
MyBatis生命周期
1)读取MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。
2)加载映射文件。映射文件即SQL 映射文件,该文件中配置了操作数据库的SQL 语句, 需要在MyBatis 配置文件mybatis-config.xml 中加载。mybatis-config.xml 文件可以 加载多个映射文件,每个文件对应数据库中的一张表。
3)构造会话工厂:通过MyBatis 的环境等配置信息构建会话工厂SqlSessionFactory。
4)创建会话对象:由会话工厂创建SqlSession 对象,该对象中包含了执行SQL 语句的 所有方法。
5)Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的SQL 语句,同时负责查询缓存的维护。
6)MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL 语句的id、参数等信息。
7)输入参数映射:输入参数类型可以是Map、List 等集合类型,也可以是基本数据类型 和POJO 类型。输入参数映射过程类似于JDBC 对preparedStatement 对象设置参数 的过程。
8)输出结果映射:输出结果类型可以是Map、List 等集合类型,也可以是基本数据类 型和POJO 类型。输出结果映射过程类似于JDBC 对结果集的解析过程。