深入浅出MyBatis技术原理与实战
衍变
- MyBatis 前身是 Apache 的开源项目 ibatis
- ibatis 源于 internet 和 abatis 的组合
- ibatis 是一个基于java的持久层框架
- 2010年由 apache software foundation 迁移到了 google code ,更名为 MyBatis
- 2013年11月迁移到 Github ,目前由 Github 维护
JDBC
- JDBC : Java Data Base Connectivity
- JDBC定义了一系列的接口规范,具体的实现是由各数据库厂商去实现,是一种典型的桥接模式
- JDBC使用示例
- 缺点
- JDBC的工作量大:需要先注册驱动和数据库信息、操作Connection、通过statement对象执行SQL,将结果返回给resultSet,然后从resultSet中读取数据并转换为pojo对象,最后需要关闭数据库相关资源
- 需要手动生成映射对象并逐个属性进行赋值
- SQL写在代码中不便于维护,传值传参是固定的,复用率不高
- JDBC手动释放资源,如:数据库连接池,不便于管理与维护
ORM
- 背景:解决JDBC的种种缺点
- 定义:
- ORM <==> Object Relational Mapping 对象关系映射
- 含义:数据表与 POJO (Plain Ordinary Java Object 简单Java对象)之间的映射关系
- 包含:
- Hibernate
- MyBatis
- 相比于JDBC的优势
内容 | Hibernate | MyBatis |
---|---|---|
优势 | 通过配置文件生成映射对象,自动映射,映射关系为全表映射 | MyBatis使用SqlSessionFactoryBuilder来连接完成JDBC需要代码完成的数据库获取和连接,减少了代码的重复 |
通过配置文件管理数据库连接 | MyBatis 无需关注数据库连接,配置最大连接数即可;有数据库连接池,连接可复用,不必每条SQL都建立一次连接 | |
一个会话中可以操作多个对象Session | MyBatis可以将SQL代码写入xml中,易于修改和维护 | |
一个会话相当于发起一次数据库连接,数据连接可以复用 | MyBatis的mapper会自动将执行后的结果映射到对应的Java对象中 | |
关闭资源只需关闭一个Session,无需关注Conncetion、ResultSet、Statement |
- Hibernate 与 MyBatis
内容 | Hibernate | MyBatis |
---|---|---|
语言 | HQL(Hibernate Query Language) | SQL(Structured Query Language) |
优势 | 动态设置映射规则,可以只查询某几个字段,而无需全表查询 | |
支持SQL优化,可以减少数据传递 | ||
支持存储过程 | ||
支持简易的缓存、日志、级联 | ||
劣势 | 全表映射,更新时需传递全部参数;无法做到只查询某一个字段,无法减少数据传递 | 动态设置映射规则,需手动开发,实现自动映射;开发量大于Hibernate |
无法根据不同的条件组装不同的SQL | 半自动映射,需要手动提供 POJO SQL 和映射关系 | |
关联查询和复杂SQL查询支持较差,需要自己将多个结果集合组装POJO | ||
不支持存储过程 | ||
HQL,不同于SQL,无法进行优化 |
MyBatis
-
官网:mybatis
- 简介:
The MyBatis data mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.
- MyBatis并不是一个完整的ORM框架,它主要实现 Relation --> Object1
-
持久层框架组成部分:
- SQL Maps
- Dao (Data Access Objects)
-
映射文件组成部分:
- SQL
- POJO
- 映射关系