JDBC、ORM ☞ Hibernate、Mybaits

版权声明:有问题的请留言 喜欢的请给个赞 --------------------------------不定时会更新,因为学习,所以快乐,因为分享,所以便捷!转载请标注出处,哈哈! https://blog.csdn.net/Appleyk/article/details/82314720

一、JDBC

Java Data Base Connectivity :Java数据库连接

由SUN公司提出的一系列规范 -- 只定义了接口的规范,具体实现是交给各个数据库厂商去实现的,JDBC是一种典型的桥接模式

(1) 如何使用JDBC规范进行编程实现对数据库的CRUD(create、read、update、delete)操作

A:注册数据库驱动和信息(以MySql数据为例

 加载数据库驱动 

Class.forName("com.mysql.jdbc.Driver")

 加载数据库连接信息

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/3306/test",username,pwd)

B:操作conn,构建Statement(PrepareStatement)对象

说明:

PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程

prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。

Statement不会初始化,没有预处理,每次都是从0 开始执行SQl


 

PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("insert into user(name,age) values(?,?)");

C:通过Statement执行SQL语句

增删改:

int ret = pstmt.executeUpdate();

if(ret > 0){

    //SQL语句执行成功
 
}

查询:

ResultSet rs = pstmt.executeQuery();

while(rs.next){

    //操作rs数据集,将数据映射成Java Pojo对象

}

D:最后用完后,关闭conn

conn.close();

(2) JDBC弊端

1、需要编写大量demo,demo复用性不够好,需要自己封装Dao层达到代码的复用

2、数据集到pojo对象的映射关系太过拘泥,需要自己进行适配,工作量大

二、ORM

对象关系映射:英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)

其取代了JDBC,并对其进行了封装(简化工作量,使得数据到对象的映射关系更为简单)

用于实现面向对象编程语言里不同类型系统的数据之间的转换,简单明了的说就是:

通过编程,操作pojo对象,加上映射关系,即可达到操作数据库的效果,反之,则是将数据库操作的数据映射成pojo对象

三、Hibernate

(1) 什么是Hibernate?

百度百科:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

简单点就是:Hibernate是一个开源的、轻量级的实现了ORM(对象关系映射技术的全自动的数据持久层框架

(2) Hibernate发展史

2001年:Hibernate第一个版本发布

2002年:人们开始关注Hibernate

2003年:Hibernate开发团队进入JBoss公司,成为该公司的子项目

2004年:Hibernate成为持久化框架的标准

2005年:JBOSS发布Hibernate3

2006年:RedHat公司收购JBOSS

2011年:Hibernate4发布

至今    :Hibernate5+

四、Mybatis

(1)什么是Mybatis?

百度百科:MyBatis本是Apache的一个开源项目iBatis, 2010年这个项目由Apache Oftware Foundation 迁移到了Google Code,并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

简介:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

(2)功能架构

五、Mybatis和Hibernate的区别

都是数据持久层框架,都实现了对象关系映射,那么,二者各自有什么优势和缺点呢?

相同点

  • 通过SessionFactoryBuider由XML配置文件生成SessionFactory
  • 然后由SessionFactory 生成Session
  • 最后由Session来开启执行事务(Transaction)和SQL语句
  • 其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的
  • Hibernate和MyBatis都支持JDBC和JTA事务处理。

SQL语句生成?

(1)Hibernate是全自动的ORM框架,拥有完整的JavaBean对象与数据库的映射结构来自动生成SQL语句

(2)Mybaits是半自动的ORM框架,在查询关联对象或关联集合对象时,需要手动编写SQL来完成,而且这一块的工作量较大

小结:Hibernate是全自动的ORM,MyBatis是半自动的ORM

数据库移植性?

(1)Hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)之间的耦合性,因此,数据库迁移考虑的问题较少(性能高)

(2)由于Mybaits是半自动的ORM框架,其大量充斥着我们自己写的SQL语句,而不同的数据库之间的SQL写法存在着差异,因此,数据库移植考虑的问题会比较多(性能低)

小结:在数据库移植性上Hibernate要高于Mybatis

SQL优化?

(1)Hibernate由于要我们编写的SQL比较少,而大多数的数据上的优化都是从SQL入手的,因此,在SQL语句优化上,Hibernate要稍微复杂点,虽然其有HQL,但是功能不及SQL强大,

(2)Mybatis大部分的SQL都是写在XML里或者通过注解实现的,因此,可以直接对SQL语句进行优化,

小结:在原生SQL优化上,Mybatis要比Hibernate更加灵活些

配套设施?

(1)Hibernate日志系统非常健全,涉及广泛,包括:SQL记录、关系异常、优化警告、缓存提示、脏数据警告等,其有更好的二级缓存机制,也可以使用第三方缓存

(2)Mybaits相比就简陋的多了,日志出了基本记录功能外,其他功能相对薄弱,二级缓存机制不佳,也支持第三方缓存

补充:

Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。

MyBatis使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,就要避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。

注:一级缓存指本地缓存,默认会开启,不受控制

小结:Hibernate比Mybaits拥有更完善的日志系统且二级缓存机制要优于Mybaits

学习成本?

(1)Hibernate配置更为复杂,更注重细节,要想学精,花费的时间和精力较高

(2)Mybatis框架简单,SQL配置更为灵活,写起来也是随心所欲,基本上会写SQL的童鞋都可以很快的入手

小结:Mybaits更加小巧,灵活,相比较Hibernate来说,更容易上手,更容易实现快速开发

Spring集成?

        通过对比,我还是推荐大家使用Spring+Spring MVC +Mybaits的框架进行Java Web项目的开发,或者使用比较流行的Spring Boot框架集成Mybatis进行几乎零配置(XML模板定制的配置方式改为在类中进行编写代码加注解的方式实现XML零配置,)的Web应用程序的快速、高效的开发,其中Mybatis框架中我推荐使用其通用Mapper(单表操作效率非常高,而且一句SQL都不用写,且XML映射文件也不用配置)进行快速Dao层开发

         有时间,我会更一个标准的由Spring Boot + Mybaits 框架开发的的后端项目的系列教程,其中涵盖了:

1、如何在IDEA中进行Spring Boot项目的快速搭建

2、如何在项目中对依赖的Jar包进行Maven管理

3、如何集成Mybaits框架

4、如何利用Mybaits框架实现ORM--->编写业务模型和实体模型以及配置对象之间的映射关系(XML)

5、如何利用实体模型进行DAO层的开发,比如,如何通过配置XML映射,编写SQL模板实现实体模型的批量插入和更新

6、如何根据查询过滤器fiter进行SQL的定制来实现业务模型的分页查询(实体模型转业务模型+PageHelper分页插件)....etc

猜你喜欢

转载自blog.csdn.net/Appleyk/article/details/82314720