hibernate与jdbc的联系有哪些?

TheDisguiser 2020-07-13 17:04:46 java常见问答 3837

上回我们说完了hibernate的一些简单介绍,小伙伴们相信对它已经有了一些基本了解了,这次就来看看这个家伙与jdbc间有哪些联系吧。

一、

hibernate是jdbc的轻量级封装,包括了jdbc与数据库的连接和查询,删除等代码,它们被都用面向对象的思想用代码联系起来。hibernate是一个独立的对象持久层框架,与App Server、EJB都没有必然的联系。

Hibernate能够适用在任何JDBC可以使用的场合,如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。

hibernate通过hbm 配置文件把po类的字段和数据库的字段关联起来比如数据库的id,在po类中就是pravite Long id;

public Long getId()

public setId(Long id);然后hql语句也是面向对象的,它的查询语句不是查询数据库而是查询类的,这些实现的魔法就是xml文件,其实hibernate=封装的jdbc+xml文件

二、

Hibernate同时也是是一个与JDBC密切相关的框架,因此Hibernate的兼容性和JDBC驱动,都和数据库有着一定的关系,但是着和使用它的Java程序,和App Server是没有任何关系的,也不会存在兼容性问题。

hibernate与jdbc间区别:

jdbc

jdbc是java为了访问各种数据库而提供的javaAPI,使用jdbc一定要实现jdbc的jar包连接mysql、oracle和db2需要各自的jar包,以mysql为例。我们先以一个访问数据库的例子作为示例,下面的代码实现了向数据库插入一条记录的功能

public class JDBCTest
{
    private static final String driver = "com.mysql.jdbc.Driver";
    private static final String url = "jdbc:mysql://localhost:3306/test";
    private static final String name = "root";
    private static final String pwd = "root";
    public static void test1()
    {
        Connection conn = null;
        CallableStatement callStmt = null;
        PreparedStatement pre = null;
        try
        {
            Class.forName(driver); //加载jdbc驱动
            conn = DriverManager.getConnection(url, name, pwd); //通过DriverManager获取一个连接
            conn.setAutoCommit(false); //设置实务不是自动提交,事务默认是自动提交
            pre = conn.prepareStatement("insert into sm_dept values(?,?,?)");
            pre.setInt(1, 1);
            pre.setString(2, "name");
            pre.setString(3, "123242434");
            int results = pre.executeUpdate();
            System.out.println("插入了" + results + "记录");
        }
        catch (Exception e)
        {
            try
            {
                conn.rollback();
            }
            catch (SQLException e1)
            {
                e1.printStackTrace();
            }
        }
        finally
        {
            try
            {
                conn.setAutoCommit(true);
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
            if (callStmt != null)
            {
                try
                {
                    callStmt.close();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
            if (conn != null)
            {
                try
                {
                    conn.close();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
    public static void test2()
    {}
    public static void main(String[] args)
    {
        JDBCTest.test1();
    }
}

Hibernate

1)、jdbc操作于底层,效率更高。

2)、jdbc不是面向对象编程,hibernate是面向对象的编程,更符合java程序员的思考方式。

3)、hibernate封装度更加完善,极大的简化了访问数据库代码的复杂性和重复性。

4)、hibernate的缓存机制更强大,有session级别的一级缓存和sessionFactory的二级缓存。

以上就是hibernate与jdbc间联系的所有内容,小伙伴们懂了吗?还有疑问的小伙伴可以关注我们的网站来了解详情。如果还想了解其他java常见问题及解决方法,也可以来关注本网站查找答案噢。

推荐阅读:

hibernate还有人用吗?hibernate框架介绍

mybatis和hibernate的区别是什么?有什么区别?

怎么操作hibernate?Hibernate入门教程