MyBatisの特長:
利点:
直接SQL文を記述することによって、あなたは直接SQLのパフォーマンスを最適化することができます。
低学習曲線、低学習コスト。限りSQLベースがあるので、あなたはMyBatisのを学ぶことができ、非常に使いやすいです。
直接描画SQL文、とても柔軟で、より良いコードの保守など。
短所:
データベースが変更された。すなわち、データベースから独立してサポートすることができない、複数のセットをサポートするためにコードを書く、移植性は良くありません。
MySQLの:制限
オラクル:ROWNUM
あなたは、マッピングの結果を記述する必要があります。
休止状態の技術的な特徴を:
利点:
標準的なORMフレームワークは、プログラマはSQL文を記述する必要があります。
グッドデータベースに依存しない、つまり、データベースは、コードを再度記述することなく、変更されました。
その後、mysqlのへのデータの移行Oracleは、構成のみの方言を変更する必要があります
短所:
高い学習曲線は、データのリレーショナルモデルのための良い基盤を持っている必要がありますが、また、設定またはマッピングでは、良好なパフォーマンスとオブジェクトモデルのトレードオフを考慮する必要があります。
プログラマは、SQLのパフォーマンスの最適化を行うために独立することはできません。
MyBatisのシナリオ:
そのような電気プロバイダ事業などのインターネットプロジェクトのニーズの変化、。
休止状態のアプリケーションフィールドのシーンを:
クリア需要は、そのようなOAプロジェクト、ERPプロジェクトとして事業固定項目、。
詳細な要約:
- JDBC:Javaのデータベース接続が、データベースベンダが実装するインタフェースを提供します。
- JDBCTemplate:春のフレームワーク、欠点のJDBCパッケージに埋め込ま:キャッシュされていません
- MyBatisの:ノート+ XML + Java技術のリフレクション
- 休止状態:SQL、包装HQL +分散トランザクションを書きません
、JDBCは
説明
さまざまなデータベースにアクセスするためのJDBC(Javaデータベース接続、Java Database Connectivity)を。JDBC仕様は、主要なデータベースベンダーによって実装されたインタフェースの特定の実装を定義します。各データベースベンダー独自の通信形式のデータベースドライバ、データベースベンダによって供給されるデータベースドライバを調製するために、独自のデータベースによると。
ステップ開発の
開発ステップは:
我々は通常、一般的に、JDBCプログラミングを使用して、次の手順が必要です。
JDBCデータベースに結び付け、プログラミング、およびデータベース情報登録のドライブを使用して1
2を、操作の接続には、Statementオブジェクト開く
SQLのStatementオブジェクトによって実行される3、リターン結果ResultSetオブジェクト
4、ResultSetは、データを読み出す場合、コードが具体的に翻訳されるPOJOオブジェクト
5を、リソースデータベース関連閉じ
の利点と欠点
JDBCを使用する利点を:
私たちは、単純なことができJDBCインタフェースにメソッドを呼び出す必要があります
データベースのサポートされているJavaコードの同じセットを使用して、軽微な変更は、他のJDBCにアクセスすることができ
、JDBCの欠点を:
A:ワークロードが比較的大きく、複雑なプログラミングであり、接続する必要、プロセスはその後、原取引をJDBC、データ処理の種類、
2:接続を動作させるための必要性、ステートメント、およびResultSetオブジェクトとデータオブジェクトそれに近づきます。
JDBCの欠点とは、リファレンスシナリオを解決します:
1は、面倒なシステムリソースが浪費されているリリース、データベース接続を作成し、使用することができた場合、システムのパフォーマンスに影響を与える可能性があり、データベース接続プールをこの問題を解決します。
2,Sql语句在代码中硬编码,造成代码不易维护,实际应用Sql变化可能较大,如果sql一变动就要更改java代码。
3,使用PreparedStatement向占位符传参存在硬编码,因为Sql语句的where条件不一定,可能多也可能少,修改sql还要修改java代码,系统不易维护。
4,对结果集解析存在硬编码(列名),sql变化导致解析的java代码变化,系统不易维护,如果能将数据库库封装成pojo对象解析比较方便。
二、JDBCTemplate
JdbcTemplate针对数据查询提供了多个重载的模板方法,你可以根据需要选用不同的模板方法.如果你的查询很简单,仅仅是传入相应SQL或者相关参数,然后取得一个单一的结果,那么你可以选择一组便利的模板方法
- 优点:运行期:高效、内嵌Spring框架中、支持基于AOP的声明式事务
- 缺点:必须于Spring框架结合在一起使用、不支持数据库跨平台、默认没有缓存
JDBC已经能够满足大部分用户最基本的需求,
但是在使用JDBC时,必须自己来管理数据库资源如:获取
PreparedStatement,设置SQL语句参数,关闭连接等步骤。
JDBCTemplate就是Spring对JDBC的封装,目的是使JDBC更加易于使用。
JDBCTemplate是Spring的一部分。
JDBCTemplate处理了资源的建立和释放。
他帮助我们避免一些常见的错误,比如忘了总要关闭连接。
他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。
使用JdbcTemplate编程我们只需要做以下步骤:
1)提供SQL语句和占位符的值
2)得到封装好的查询结果集
使用步骤
使用步骤
1) 导入依赖的jar包(c3p0连接池、mysql驱动、spring相关)
2) 准备连接池
3) 创建 JdbcTemplate 对象,传入连接池对象
4) 编写SQL语句
5) 调用 execute()执行 DDL、update()执行 DML、queryXxx()执行 DQL 等方法
jdbcTemplate.queryForObject("select * from user where name=? and password=?",
new BeanPropertyRowMapper<>(User.class), name, password);
三、Hibernate
ORM模型
ORM取代了JDBC,所有的ORM模型都是基于JDBC进行封装的,不同ORM模型对JDBC封装的强度是不一样的
ORM
对象关系映射(Object Relational Mapping),简单的说ORM框架就是数据库的表和简单Java对象的映射关系模型,我们通过这层映射关系就可以简单迅速地把数据库表的数据转化为POJO
如图
Hibernate介绍
Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,
即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。
执行过程 1、读取配置文件完成ORM的映射关系 2、获取session进行增删改查的操作 hibernate工作原理: 1、通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件。 2、由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>读取解析映射信息。 3、通过config.buildSessionFactory();//得到sessionFactory。 4、sessionFactory.openSession();//得到session。 5、session.beginTransaction();//开启事务。 6、persistent operate; 7、session.getTransaction().commit();//提交事务 8、关闭session; 9、关闭sessionFactory;
Hibernate优势
- 消除了代码的映射规则,它全部被分离到了XML或者注解里面去配置
- 无需再管理数据库连接,它也可以配置在XML里面
- 一个会话中,不要操作多个对象,只要操作Session对象即可
- 关闭资源只需要关闭一个Session便可
这就是Hibernate的优势,在配置了映射文件和数据库连接文件后,Hibernate就可以通过Session操作,非常容易,消除了jdbc带来的大量代码,大大提高了编程的简易性和可读性。
Hibernate还提供了级联,缓存,映射,一对多等功能。Hibernate是全表映射,通过HQL去操作pojo进而操作数据库的数据。
Hibernate缺陷
全表映射带来了不便,比如更新时需要发送所有的字段
无法根据不同的条件组装不同的SQL
对多表关联和复杂SQL查询支持较差,需要自己写SQL,返回后,需要自己将数据组装为POJO
不能有效支持存储过程
虽然有HQL,但是性能较差, 大型互联网系统往往需要优化SQL,而hibernate做不到
四、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维护的
名称
iBatis一词来源于“internet”和“abatis”的组合
mybaits所需要提供的映射文件包含以下三个部分
- SQL
- 映射规则
- POJO
Mybatis优点
- 半自动的执行方式,除sql外操作由框架完成,方便快捷
- 手工定制sql,实现sql与java代码分离,灵活性高,方便维护
- 只需要sql进行操作,不需要学习额外的内容
- 轻量级的框架,执行速度快
什么时候用mybaits
hibernate只适用于场景不太复杂,要求性能不太苛刻的时候
mybatis拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存、日志、级联,但是它的缺陷是需要你提供映射规则和sql,所以它的开发工作量比Hibernate略大一些
五、 JPA
JPA 概述
JPA 的全称是 Java Persistence API, 即 Java 持久化 API,是 SUN 公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。
JPA 通过 JDK 5.0 注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA 与 与 hibernate 的关系
JPA 规范本质上就是一种 ORM 规范,注意不是 ORM 框架——因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由服务厂商来提供实现。
- JPA 和 Hibernate 的关系就像 JDBC 和 JDBC 驱动的关系,JPA 是规范,Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现。
- JPA 怎么取代 Hibernate 呢?JDBC 规范可以驱动底层数据库吗?答案是否定的,也就是说,如果使用 JPA 规范进行数据库操作,底层需要 hibernate 作为其实现类完成数据持久化工作。
六、Spring Data JPA的概述
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!
Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦
1.2 Spring Data JPA的特性
SpringData Jpa 极大简化了数据库访问层代码。 如何简化的呢? 使用了SpringDataJpa,我们的dao层中只需要写接口,就自动具有了增删改查、分页查询等方法。
1.3 Spring Data JPA 与 JPA和hibernate之间的关系
JPA是一套规范,内部是有接口和抽象类组成的。hibernate是一套成熟的ORM框架,而且Hibernate实现了JPA规范,所以也可以称hibernate为JPA的一种实现方式,我们使用JPA的API编程,意味着站在更高的角度上看待问题(面向接口编程)
Spring Data JPA是Spring提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案。
1.4 Spring Data JPA的快速入门
https://blog.csdn.net/qq_42806915/article/details/82707783
六、各种对比/区别
Hibernate 与 mybaits 的对比
http://www.elecfans.com/d/638827.html
jdbc,mybatis,hibernate的区别
1)从层次上看,
- JDBC是较底层的持久层操作方式,
- 而Hibernate和MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作。
2)从功能上看,
- JDBC就是简单的建立数据库连接,然后创建statement,将sql语句传给statement去执行,如果是有返回结果的查询语句,会将查询结果放到ResultSet对象中,通过对ResultSet对象的遍历操作来获取数据;
- Hibernate是将数据库中的数据表映射为持久层的Java对象,对sql语句进行修改和优化比较困难;
- MyBatis是将sql语句中的输入参数和输出参数映射为java对象,sql修改和优化比较方便.
3)从使用上看,
- 如果进行底层编程,而且对性能要求极高的话,应该采用JDBC的方式;
- 如果要对数据库进行完整性控制的话建议使用Hibernate;
- 如果要灵活使用sql语句的话建议采用MyBatis框架。
参考资料:
HIbernate和Mybatis的区别和优劣势:https://www.imooc.com/article/27839?block_id=tuijian_wz
通过Java经典面试题之MyBatis与Hibernate的区别深入了解MyBatis:http://baijiahao.baidu.com/s?id=1598595163822471051&wfr=spider&for=pc