前言
我们知道,springboot操作mysql方式众多,Spring为各种支持的持久化技术,都提供了简单操作的模板和回调,目前大概有如下几种
ORM持久化技术
模板类
JDBC |
org.springframework.jdbc.core.JdbcTemplate |
Hibernate |
org.springframework.orm.hibernate.HibernateTemplate |
IBatis |
org.springframework.orm.ibatis.SqlMapClientTemplate |
JPA |
org.springfrmaework.orm.jpa.JpaTemplate |
那么这些方式的区别如何?
我们从几个概念讲起。
JDBC
JDBC(Java DataBase Connectivity ,java数据库连接技术) ,Java访问数据库的一种规范, Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库
开发步骤
- 加载驱动程序
- 创建数据库连接
- 创建一个preparedStatement
- 通过preparedStatement执行SQL语句,返回结果集
- 处理结果集
- 处理异常,关闭数据库相关的资源
案例
Connection con = null;
PreparedStatement pStmt = null;
ResultSet rs = null;
try {
con = ods.getConnection();
String sql = "select * from admin";
pStmt = con.prepareStatement(sql);
rs = pStmt.executeQuery();
while (rs.next()) {
}
} catch (Exception ex) {
try {
con.rollback();
} catch (SQLException sqlex) {
sqlex.printStackTrace(System.out);
}
ex.printStackTrace();
} finally {
try {
rs.close();
pStmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
优点
缺点:
- 代码繁琐,难以写出高质量的代码
- 需要处理资源的释放,对象的创建和销毁,SQL注入,异常处理等额外工作
- 需要关心底层数据库的细节
- 不支持数据库跨平台
JPA
JPA (Java Persistence API, Java 持久化 API),是 SUN 公司推出的一套基于ORM规范,为各种不同的ORM技术提供一个统一的接口,方便把应用移植的不同的ORM技术上。内部是由一系列的接口和抽象类构成。
JPA同样作为一种规范,但是和JDBC不同,没有提供实现的类,也就说JPA规范中提供的只是一些接口,显然接口不能直接拿来使用。虽然应用程序可以面向接口编程,但JPA底层一定需要某种JPA实现,否则JPA依然无法直接使用。
Sun之所以提出JPA规范,其目的是以官方的身份来统一各种ORM框架的规范,包括著名的Hibernate、TopLink等。JPA规范给开发者带来了福音:开发者面向JPA规范的接口,但底层的JPA实现可以任意切换:觉得Hibernate好的,可以选择Hibernate JPA实现;觉得TopLink好的,可以选择TopLink JPA实现……这样开发者可以避免为使用Hibernate学习一套ORM框架,为使用TopLink又要再学习一套ORM框架。
JDBC和JPA
JDBC和JPA都是规范和接口,不过JDBC 是面向 SQL 的,使用起来比较繁琐,所以就有了 ORM 框架,建立了 Java 对象与数据库表之间的映射关系,可以通过直接操作对象来实现持久化,简化了操作的繁杂度。而 JPA 就是 ORM 框架的规范,值得一提的是 Hibernate 是符合 JPA 规范的(Hibernate实现了JPA规范),而 MyBatis 却不符合,因为 MyBatis 还是需要写 SQL 的。
细心的同学发现了,作者介绍JPA的时候没有写案例,是的,可不是楼主偷懒,而是JPA只是接口,无法直接拿来用,必须依赖于底层的实现才能使用,这点可以在下图中体现。


JDBCTemplate
JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。为了解决这个问题,JDBCTemplate技术出现。
JDBCTemplate就是对JDBC的封装,处理了资源的建立和释放,帮助我们自动处理了一些异常,避免一些常见的错误,比如忘了总要关闭连接,目的是使JDBC更加易于使用。它运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和获取结果集。
开发步骤
- 导入依赖的jar包(连接池、mysql驱动、spring相关)
- 准备连接池
- 创建 JdbcTemplate 对象,传入连接池对象
- 编写SQL语句,
- 调用 execute()执行 DDL、update()执行 DML、queryXxx()执行 DQL 等方法
- 获取结果集
案例
//启动IoC容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取IoC容器中JdbcTemplate实例
JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
String sql="insert into user (name,deptid) values (?,?)";
int count= jdbcTemplate.update(sql, new Object[]{"caoyc",3});
System.out.println(count);
优点
- 使用简单,内嵌Spring框架中
- 高效
- 支持基于AOP的声明式事务
缺点
- 必须于Spring框架结合在一起使用
- 不支持数据库跨平台
- 默认没有缓存
Spring Data JPA
Spring Data JPA是啥?说起这个,就要说起Spring,Spring框架什么都想做,当然也想做一点持久化相关的工作,所以有了形如spring-data-*(举例:spring-data-jpa)等包,Spring Data JPA即代表了spring框架对JPA的整合,Spring Data JPA在JPA的实现(如Hibernate)的顶部添加了一个额外的抽象层。你可以这么理解,Spring Data JPA在JPA规范的基础上又抽象了一层Repository层,用于显著减少为各种持久性存储实现数据访问层所需的代码量。想直接使用它依旧需要依赖JPA的实现(hibernate或其它orm)

使用案例参考 http://wrsee.com/articles/87
Hibernate
Hibernate是JPA规范的一种实现。
Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据库表建立映射关系,是一个全自动的 orm 框架,hibernate 可以自动生成 SQL 语句,自动执行,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibername一问世就成为了Java世界首选的ORM框架。
执行过程
- 创建Configuration对象(配置文件的装载操作,读取所有的配置文件并进行解析)
- 创建SessionFactory对象
- 创建Session对象 (理解为数据库的一个连接对象)
- 开始一个事务Transaction
- 进行持久化操作(增删改查操作)
- 结束事务Transaction
- 关闭Session (理解为连接对象的释放)
优点
- 对象化。 以面相对象的思想来操作数据库。
- 更好的移植性。对于不同的数据库,开发者只需要使用相同的数据操作即可.
- 开发效率高。 hibernate提供了大量的封装(这也是它最大的缺点),很多数据操作以及关联关系等都被封装的很好,开发者不需写大量的sql语句,这就极大的提高了开发者的开发效率。
- hibernate提供了缓存机制(session缓存,二级缓存,查询缓存)
缺点
- 对持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活使用JDBC的原生SQL,Hibernate封装了JDBC,所以没有JDBC直接访问数据库效率高。要使用数据库的特定优化机制的时候,不适合用Hibernate
- 框架中使用ORM原则,导致配置过于复杂
- 不适于复杂关系的数据表维护。如果项目中各个表中关系复杂,表之间的关系很多,在很多地方把lazy都设置false,会导致数据查询和加载很慢,尤其是级联查询的时候。
- 批量数据处理时有弱势。对于批量的修改,删除,不适合用Hibernate,这也是ORM框架的弱点。
Mybatis
为了解决Hibernate的不足,一个半自动映射的框架MyBatis应运而生
mybatis是一个java持久层框架,它封装少、高性能·可优化、维护简单等优点成为了目前java移动互联网网站服务的首选持久层框架,它特别适合分布式和大数据网络数据库编程
之所以称它为半自动,是因为它需要手工匹配提供POJO、SQL和映射关系,而全表映射的Hibernate只需要提供POJO和映射关系便可
历史
Mybaits的前身是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了 google code 并且改名为Mybatis,2013年11月迁移到Github,目前mybaits是由Github维护的
优点
- 半自动的执行方式,除sql外操作由框架完成,方便快捷
- 手工定制sql,实现sql与java代码分离,灵活性高,方便维护
- 只需要sql进行操作,不需要学习额外的内容
- 轻量级的框架,执行速度快
缺点
hibernate只适用于场景不太复杂,要求性能不太苛刻的时候
mybatis拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存、日志、级联,但是它的缺陷是需要你提供映射规则和sql,所以它的开发工作量比Hibernate略大一些
请关注我的订阅号

相关推荐
在“第一个SpringBoot入门级项目”中,我们将学习如何从零开始构建一个简单的SpringBoot应用。首先,你需要安装Java Development Kit (JDK),因为SpringBoot是基于Java的。确保你的系统已安装JDK 8或更高版本,并且...
本教程“从零开始学Java Web”旨在帮助初学者系统地掌握这一领域的基础知识,从第一章到第十七章,内容全面且详细。下面我们将逐一探讨这些章节可能涵盖的关键知识点。 第一章:Java Web入门 这一章通常会介绍Java ...
Spring Boot是Java开发中的一个流行框架,用于简化Spring应用程序的创建和配置过程。它通过提供预配置的starter pom或gradle...这个demo是一个实践型的学习资源,帮助开发者从零开始接触并掌握Spring Boot的基础知识。
《Spring中文版基础教程》是一本面向初学者的详尽指南,旨在帮助读者从零开始掌握Spring框架的基础知识。Spring是Java开发中最流行的轻量级框架之一,它提供了丰富的功能来简化企业级应用的开发。本教程将带你一步步...
- **Android从入门到实战**:从零开始学习Android开发,最终完成一个完整的项目,巩固所学知识。 #### 8. 高级主题 - **Android实战_来电拦截专家**:通过具体的来电拦截项目,学习Android权限管理、电话状态监听等...
这大大节省了开发者从零开始构建新项目的时间,提高了开发效率。 下面我们将深入探讨Spring Boot的核心特性和主要知识点: 1. **起步依赖(Starter Dependencies)**:Spring Boot通过“起步依赖”管理依赖关系,...
对于从零开始的初学者而言,参与项目实战可以极大地提升自己的编程技能和解决问题的能力。 1. **项目实战的重要性**: - **提高编程能力**:通过实践操作,可以更好地理解和掌握Java语言的特点。 - **积累经验**...
1. 创建Spring项目:从零开始构建一个简单的Spring MVC应用,涉及配置、控制器、视图和数据库访问。 2. 高级特性实践:探索Spring Security、Spring WebSocket、Spring Boot等进阶主题,提升项目开发能力。 通过...
12. **实战项目**:可能包含一个或多个示例项目,展示了从零开始构建一个完整的Spring Boot应用的全过程。 这份笔记不仅适合初学者,也对有一定经验的开发者有很高的参考价值。通过学习,读者将能够熟练地使用...
《Spring基础教程》是针对Java开发人员的一份详尽...本教程通过深入浅出的方式,结合源码分析和实用工具的使用,将帮助读者从零开始掌握Spring框架,提升Java开发技能,为构建高效、稳定的Java企业级应用打下坚实基础。
这些整合的库使得开发者能够快速构建完整的Java企业级应用,而无需从零开始编写基础设施代码。通过Spring的这些模块和整合库,开发者可以利用现代设计模式,如Model-View-Controller(MVC)、Repository等,构建出...
6. **数据访问集成**:Spring支持多种数据访问技术,包括JDBC、ORM(Object-Relational Mapping,如Hibernate、MyBatis)和OXM(Object-XML Mapping,如JAXB)。Spring的JdbcTemplate和JPA提供了一致的编程模型,...
在"Spring的第一个案例"中,我们将学习如何从零开始创建一个Spring项目。首先,我们需要一个合适的开发环境,如IDEA或Eclipse,以及Spring Initializr来生成初始的项目结构。接着,我们将添加必要的依赖,如Spring ...
- **MySQL基础+进阶**:从零开始学习MySQL数据库的安装、配置、基本操作,如创建表、插入数据、查询数据等。进一步学习数据库设计原则,理解E-R模型及其应用。 - **分库分表中间件**:掌握分库分表的原理,了解主流...
这本书旨在帮助读者从零开始,逐步掌握Spring框架的基础知识和核心概念,从而在实际项目开发中得心应手。Spring作为Java企业级应用的主流框架,其强大的功能和灵活性使其在现代软件开发中占据着举足轻重的地位。 书...
3. **数据访问/集成(Data Access/Integration)**:包含多个支持数据库操作的模块,如JDBC抽象层、整合Hibernate、JPA和MyBatis等ORM框架,以及事务管理。 4. **消息(Messaging)**:Spring 4.0开始支持基于消息...