目录
一、JDBC编程和ORM模型
1. JDBC回顾
(1)加载驱动
导入 JDBC 连接数据库的 jar 包,利用 CLASS.forName 加载驱动;
(2)获取连接
利用 DriverManager 获取Connection,然后创建 Statement;
(3)执行SQL语句
利用 Statement 执行 SQL语句并结合ResultSet 处理结果集映射Java 对象;
(4)关闭资源
先开后关的顺序关闭 ResultSet,Statement,Connection 等资源。
2. JDBC的弊端
(1)代码重复度高
大量的重复代码,以 ResultSet为例,每次都需要重复解析结果集;
(2)硬编码
SQL语句存在Java代码中,不能很好的分离数据库语句和Java语句,造成代码不易维护;
(3)底层技术
JDBC属于底层的技术,不支持分布式,缓存等技术,对于复杂场景的应对不好;
(4)SQL参数固定
SQL语句的参数固定,使得SQL语句不灵活,无法满足多变的场景。
3. 什么是ORM模型
ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。
对象关系映射,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
(1)Java对象
POJO 对象(Plain Ordinary Java Object):简单的 Java 对象,实际是 普通 JavaBeans。
(2)映射配置
配置分为:类与数据库中表的映射;对象与表中记录的映射;类的属性与数据库中表的字段的映射。
(3)数据库
按照数据结构来组织、存储和管理数据的仓库,ORM模型中最底层的内容。
4. 常见的ORM模型
(1)Hibernate
Hibernate 是一个 全自动 的ORM 模型,Hibernate 可以自动生成 SQL 语句,自动执行。
(2)MyBatis
MyBatis 是一款 半自动 的 ORM 模型,它支持定制化 SQL、存储过程以及高级映射。
5. 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数据库移植性好。
6. 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定义输出结果的类型。
二、MyBatis简介
1. 为什么选择MyBatis
(1)简单易学
易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现;
(2)灵活度高
通过定制 SQL 语句,可以比较灵活的访问数据库,获取数据;
(3)功能完整
提供了连接管理,缓存支持,线程支持,(分布式)事务管理等功能,还提供了其他 ORM 模型的支持。
2. 什么是MyBatis
MyBatis是一款ORM模型,支持定制化 SQL、存储过程以及高级映射。可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
(1)半自动化
支持定制化 SQL、存储过程以及高级映射;
(2)集成方便
不仅方便 Spring 等 JavaEE 框架的集成,还与其他ORM 模型集成也很方便
3. MyBatis快速开始
(1)引入 mybatis-config.xml 配置文件
该配置文件主要是连接数据库所需的配置信息。
(2)引入 Mapper 映射文件
配置 SQL 语句和映射的配置文件。
(3)创建 MyBatisUtil 类
用来创建 MyBatis 的数据库SqlSession会话类。
(4)创建 SqlSession 类访问数据库
创建出 SqlSession 后,利用 SqlSession 访问数据库。
(5)输出结果
查询数据库的学生表信息,并输出学生姓名和学生学号。
三、MyBatis生命周期
1. MyBatis生命周期
(1)SqlSessionFactoryBuilder
构造器,会根据配置信息生成 SqlSessionFactory。
(2)SqlSessionFactory
利用工厂模式生产SqlSession;
(3)SqlSession
既可以发送 SQL 语句去执行并返回结果,也可以获取 Mapper 的接口;
(4)SQL Mapper
映射器,给出对应的SQL 和映射规则,负责发送 SQL 和处理结果;