从零开始学springbootspringboot2

从零开始学SpringBoot-JPA_JDBC_Hiberna

2019-03-29  本文已影响26人  码哥说

前言

我们知道,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客户端程序可以访问各种不同类型的数据库

开发步骤

案例

        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();
            }
        }

优点

缺点:

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只是接口,无法直接拿来用,必须依赖于底层的实现才能使用,这点可以在下图中体现。


1.png 2.png

JDBCTemplate

JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。为了解决这个问题,JDBCTemplate技术出现。

JDBCTemplate就是对JDBC的封装,处理了资源的建立和释放,帮助我们自动处理了一些异常,避免一些常见的错误,比如忘了总要关闭连接,目的是使JDBC更加易于使用。它运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和获取结果集。

开发步骤

案例

//启动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 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)


3.png

使用案例参考 http://wrsee.com/articles/87

Hibernate

Hibernate是JPA规范的一种实现。
Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据库表建立映射关系,是一个全自动的 orm 框架,hibernate 可以自动生成 SQL 语句,自动执行,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibername一问世就成为了Java世界首选的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维护的

优点

缺点
hibernate只适用于场景不太复杂,要求性能不太苛刻的时候
mybatis拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存、日志、级联,但是它的缺陷是需要你提供映射规则和sql,所以它的开发工作量比Hibernate略大一些

请关注我的订阅号

订阅号.png
上一篇 下一篇

猜你喜欢

热点阅读