Hibernate的基本概念和CURD

基本概念

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值