JPA是规范,hibernate/mybatis是对规范的实现,hibernate/mybatis是对jdbc的封装,也就是说hibernate/mybatis还是会调用jdbc。

   我们平时使用jdbc进行编程,大致需要下面几个步骤:
   1,使用jdbc编程需要连接数据库,注册驱动和数据库信息
   2,操作Connection,打开Statement对象
   3,通过Statement对象执行SQL,返回结果到ResultSet对象
   4,使用ResultSet读取数据,然后通过代码转化为具体的POJO对象
   5,关闭数据库相关的资源
 
 
MyBatis对JDBC的封装很好,几乎可以取代Jdbc。
 
  1. JAVA使用JDBC访问数据库的步骤:
  2. 1.得到数据库驱动程序
  3. 2.创建数据库连接
  4. 3.执行SQL语句
  5. 4.得到结果集
  6. 5.对结果集做相应的处理(增,删,改,查)
  7. 6.关闭资源:这里释放的是DB中的资源
  8. 简单的例子:
  9. [java] view plain copy
  10. Connection con= null;
  11. PreparedStatement pStmt=null;
  12. ResultSet rs = null;
  13. try{
  14. con = ods.getConnection();
  15. String sql = "select * from admin";
  16. pStmt=con.prepareStatement(sql);
  17. rs=pStmt.executeQuery();
  18. while(rs.next())
  19. { }
  20. }
  21. catch(Exception ex) {
  22. try{
  23. con.rollback();
  24. }catch(SQLException sqlex){
  25. sqlex.printStackTrace(System.out);
  26. }
  27. ex.printStackTrace();
  28. }finally{
  29. try{
  30. rs.close();
  31. pStmt.close();
  32. con.close();
  33. }catch(Exception e){
  34. e.printStackTrace();
  35. }
  36. }

  

  1. JdbcTemplate的作用
  2. 常见的JDBC代码,简单的select语句也需要冗长的出错处理,并且每个函数都不断地重复同样的代码。
  3. JdbcTemplate正是为了减少上述繁琐的代码而设计出来的。它是对JDBC的一种封装,抽象我们常用的一些方法。Simple and Stupid就是它的目标。下面是完成了刚才JDBC代码同样功能的JdbcTemplate的代码:
  4. [java] view plain copy
  5. String sql = "select * from admin";
  6. jdbcTemplate.query(sql,new RowCallbackHandler() {
  7. public void processRow(ResultSet rs) throws SQLException {
  8. }
  9. } );
  10. 使用模板方式封装 jdbc数据库操作-固定流程的动作,提供丰富callback回调接口功能,方便用户自定义加工细节,更好模块化jdbc操作,简化传统的JDBC操作的复杂和繁琐过程。
  11. 1) 使用JdbcTemplate 更新(insert /update /delete)
  12. [java] view plain copy
  13. int k = jdbcTemplate.update("UPDATE tblname SET prop1=?,prop2=?...", new Object[]{...});
  14. [java] view plain copy
  15. jdbcTemplate.update("INSERT INTO tblname VALUES(?,?,..)", new Object[]{...},
  16. new int[]{Types.VARCHAR,Types.NUMERIC});
  17. [java] view plain copy
  18. jdbcTemplate.update("INSERT INTO tblname VALUES(?,?,..)",
  19. new PreparedStatementSetter(){
  20. public void setValues(PreparedStatement ps) throws SQLException{
  21. ps.setLong(1, user.getId(1));
  22. ps.setString(2, user.getName(2));
  23. ps.setDate(3, new java.sql.Date(new Date().getTime());
  24. ps.setTimestamp(4, new Timestamp(new Date().getTime());
  25. }
  26. }
  27. );

  

  1. 在说为什么要使用JPA之前,我们有必要了解为什么要使用ORM技术。
  2. ORM Object-Relation-Mapping,即对象关系影射技术,是对象持久化的核心。ORM是对JDBC的封装,从而解决了JDBC的各种存在问题:

  

  1. Jpa是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。

  

jpa,jdbc,hibernate/mybatis,数据库驱动的更多相关文章

  1. jdbc hibernate myBatis比较

    jdbc hibernate myBatis比较 jdbc 优点:性能高,易掌握 缺点:代码繁琐 hibernate 优点:不用写sql,代码简洁 缺点:性能不好 自动生成的sql效率低下(复杂业务) ...

  2. jdbc 加载数据库驱动如何破坏双亲委托模式

    导读      通过jdbc链接数据库,是每个学习Java web 方向的人必然一开始会写的代码,虽然现在各路框架都帮大家封装好了jdbc,但是研究一下jdbc链接的套路还是很意义     术语以及相 ...

  3. JDBC 学习笔记(四)—— JDBC 加载数据库驱动,获取数据库连接

    1. 加载数据库驱动 通常来说,JDBC 使用 Class 类的 forName() 静态方法来加载驱动,需要输入数据库驱动代表的字符串. 例如: 加载 MySQL 驱动: Class.forName ...

  4. JDBC加载数据库驱动的方式

    JDBC作为数据库访问的规范接口,其中只是定义一些接口.具体的实现是由各个数据库厂商来完成. 一.重要的接口: 1.public interface Driver 每个驱动程序类必须实现的接口.Jav ...

  5. jdbc如何注册数据库驱动Driver的?

    1. 先看看原生jdbc执行sql的步骤 // 在程序启动的时候需要注册一次mysql驱动,必须引入 mysql-connnector-java 的包 Class.forName("com. ...

  6. JDBC | 第一章: 快速开始使用JDBC连接Mysql数据库?

    开始使用基于java的JDBC技术来连接mysql进行msyql数据库简单的CRUD操作 下载对应mysql驱动包 这里我创建maven项目基于maven下载 <!--mysql 驱动--> ...

  7. 【JAVA - SSM】之MyBatis与原生JDBC、Hibernate访问数据库的比较

    首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...

  8. jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别

    基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...

  9. 【JavaEE】之MyBatis与原生JDBC、Hibernate访问数据库的比较

    首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...

随机推荐

  1. liunx系统安装composer与配置

    1.下载composer curl -sS https://getcomposer.org/installer | php 2.我把它放在系统的PATH目录中,这样就能在全局访问它. mv compo ...

  2. 15:开发Rsync服务启动脚本案例

    [root@m01 ~]# rsn_count="ps -ef|grep 'rsync --d[a]emon'|wc -l" [root@m01 ~]# echo ${rsn_co ...

  3. Linux网络编程(一)基础

    一.数据存储顺序:大端和小端 大端模式: 地址的增长顺序与值的增长顺序相反         小段模式: 地址的增长顺序与值的增长顺序同样 为什么会有大小端模式之分呢?这是由于在计算机系统中,我们是以字 ...

  4. html中div获取焦点,去掉input div等获取焦点时候的边框

    经测试只有在IE chrome才会在获取焦点时有边框 使用CSS div{ outline:none; } DIV焦点事件详解 --[focus和tabIndex]​ 摘自:http://my.osc ...

  5. Yii2 Queue队列

    github地址:https://github.com/yiisoft/yii2-queue 问题:https://github.com/yiisoft/yii2-queue/issues Jobs ...

  6. Android中AsyncTask的使用 (包含文件的下载与存储)

    今天看到大神写的相关详解Android中AsyncTask的使用,真的很是佩服,下面我将学习到的AsynTask知识运用到项目中,其中也涉及一些文件的下载与存储到本地 啥都不说了,直接上代码,我将对其 ...

  7. 【BZOJ3122】[Sdoi2013]随机数生成器 BSGS+exgcd+特判

    [BZOJ3122][Sdoi2013]随机数生成器 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数.   接下来T行,每行有五个整数p,a,b, ...

  8. 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演

    [BZOJ3930][CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律 ...

  9. Travel(最短路)

    Travel The country frog lives in has nn towns which are conveniently numbered by 1,2,…,n1,2,…,n. Amo ...

  10. L - Sum It Up(DFS)

    L - Sum It Up Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Descr ...