Hibernate的基本概念和CURD

来源:互联网 发布:如何下载淘宝红包 编辑:程序博客网 时间:2024/05/17 23:31

基本概念

ORM框架 ——hibernate

1.开源的持久层框架.
2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据模型之间的映射.
3.连接java应用和数据库的中间件.
4.对JDBC进行封装,负责java对象的持久化.
5.在分层结构中处于持久化层,封装对数据库的访问细节,
使业务逻辑层更专注于实现业务逻辑

Hibernate的优点:

1、Hibernate对JDBC访问数据库的代码做了封装,大大简化
了数据访问层繁琐的重复性代码。
2、Hibernate是一个基于jdbc的主流持久化框架,是一个优秀
的orm实现,它很大程度的简化了dao层编码工作。
3、Hibernate使用java的反射机制,而不是字节码增强程序类实现
透明性
4、Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵
活性很出色。它支持很多关系型数据库,从一对一到多对多的各
种复杂关系。
5、Hibernate使数据库的操作完全面向对象。而不是从前的面向关系进行操作。

Session的几个主要方法

1.save,persist保存数据,persist在事务外不会产生insert语句。
2.delete,删除对象
3.update,更新对象,如果数据库中没有记录,会出现异常。
4.get,根据ID查,会立刻访问数据库。
5.Load,根据ID查,(返回的是代理,不会立即访问数据库)。
6.saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是托管的。
7.lock(把对象变成持久对象,但不会同步对象的状态)。


CURD

Java代码

1. 初始化代码(只做一次)

不指定配置文件的加载路径

private static SessionFactory sessionFactory;    static{        Configuration configuration = new Configuration();        //加载配置文件        configuration.configure();//默认加载src目录下的配置文件        //采用了工厂模式创建sessionFactory        sessionFactory = configuration.buildSessionFactory();    }

指定配置文件的加载路径
这里写图片描述

2. 保存例子

@Test    public void testSavePerson(){        Session session = sessionFactory.openSession();        Transaction transaction = session.beginTransaction();        Person person = new Person();        //由于在映射文件中已经说明主键的产生方式是hibernate内部产生,所以在程序中不用设置主键        person.setPid(3L);        person.setPname("菜肉");        person.setPsex("男");        session.save(person);        transaction.commit();        session.close();    }

结果显示:
这里写图片描述

这里写图片描述

3. 更新例子(方法一)

/**     * 1、必须从数据库中提取出数据再进行修改     * 2、session.get方法创建的对象利用的是默认的构造函数     */    @Test    public void testUpdatePerson(){        Session session = sessionFactory.openSession();        Transaction transaction = session.beginTransaction();        /**         * 1、先把修改的那行提取出来         * 说明:         *      Serializable是String和包装类的共同的父类            */        Person person = (Person)session.get(Person.class,1L);        person.setPsex("不详");        session.update(person);        transaction.commit();        session.close();    }

结果显示:
这里写图片描述

这里写图片描述

4. 更新例子(方法二 不推荐)

**     * 1、必须从数据库中提取出数据再进行修改     * 2、session.get方法创建的对象利用的是默认的构造函数     */    @Test    public void testUpdatePerson(){        Session session = sessionFactory.openSession();        Transaction transaction = session.beginTransaction();        /**         * 新创建一个person对象         * 把pid为1的值设置进去         * 修改对象         *    这种修改方式不推荐         */        Person person2 = new Person();        person2.setPid(1L);        person2.setPsex("女");        session.update(person2);        transaction.commit();        session.close();    }

结果显示:
这里写图片描述
这里写图片描述
从结果看出来,方法二需要对Person对象的全部属性都要进行设置,此方法不推荐使用

5. 查询例子

    @Test    public void testQuery(){        Session session = sessionFactory.openSession();        List<Person> personList = session.createQuery("from Person").list();        System.out.println(personList.size());    }

结果显示:
这里写图片描述

6.删除例子(方法一)

    /**     * 有两种方案     */    @Test    public void testDelete(){        Session session = sessionFactory.openSession();        Transaction transaction = session.beginTransaction();        Person person = (Person)session.get(Person.class, 1L);        session.delete(person);        transaction.commit();        session.close();    }

结果显示:
这里写图片描述

这里写图片描述

6.删除例子(方法二)

    @Test    public void testDelete(){        Session session = sessionFactory.openSession();        Transaction transaction = session.beginTransaction();        Person person = new Person();        person.setPid(1L);        session.delete(person);        transaction.commit();        session.close();    }

结果显示:
这里写图片描述
这里写图片描述

总结

  • Cnfiguration 类负责管理 Hibernate 的配置信息。包括如下内容:
    • Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应
      hibernate.cfg.xml 文件)。
    • 持久化类与数据表的映射关系(*.hbm.xml 文件)
  • 创建 Configuration 的两种方式

    • 属性文件(hibernate.properties): Configuration cfg = new Configuration();

    • Xml文件(hibernate.cfg.xml)
      Configuration cfg = new Configuration().configure();

  • 第二种创建方式较为常见。Hibernate.cfg.xml文件默认的目录为系统的根目录。
    也可以利用config.config方法来指定配置文件所在的目录。 Configuration对象根据当前的配置信息生成
    SessionFactory 对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory
    对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)。

    Configuration cfg = new Configuration().configure();
    SessionFactory sf = cfg.buildSessionFactory();

  • 是线程安全的。

  • SessionFactory是生成Session的工厂: Session session = sf.openSession();

  • 构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。

  • 在Hibernate中,Transaction tx =
    session.beginTransaction()相当于给数据库操作起事务。Session.commit()则为提交事务。

  • Hibernate的整个运行过程如下:

    1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,
    2、并用这些信息生成一个SessionFactory对象,
    3、然后从SessionFactory对象生成一个Session对象,
    4、并用Session对象生成Transaction对象;
    A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作;
    B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。
    这里写图片描述

1 0