• Hibernate入门


    Hibernate入门:

    搭建一个Hibernate的demo步骤:

    1、引入jar包

    2、创建实体类 ,并配置实体类的映射文件

    3、配置hibernate的核心配置文件(hibernate.cfg.xml)

    4、写具体的测试方法

    测试的方法如下:

     1   @Test
     2     public void addTest() {
     3         // 第一步:加载核心配置文件
     4         Configuration configuration = new Configuration();
     5         configuration.configure();
     6         // 第二步:得到sessionFactory对象
     7         SessionFactory sessionFactory = configuration.buildSessionFactory();
     8         // 第三步:创建session对象
     9         Session session = sessionFactory.openSession();
    10         // 第四步:得到事务对象
    11         Transaction transaction = session.beginTransaction();
    12         // 第五步:逻辑操作CRUD
    13         Student s = new Student();
    14         s.setName("Jack");
    15         s.setCode("131006101");
    16         session.save(s);
    17         // 第六步:提交或回滚事务
    18         transaction.commit();
    19         // 关闭连接
    20         session.close();
    21         sessionFactory.close();
    22     }

     5、稍后可以对上述代码进行优化:

      1)、静态代码块:当类加载的时候才执行,且就执行一次。例如SessionFactory对象的创建就可以放在静态代码块中,因为,创建SessionFactory的过程中,我们的hibernate配置中经常会写<property name="hibernate.hbm2ddl.auto">update</property>;所以它会在每次创建SessionFactory的过重都去创建表,或者是更新表,这很耗费资源,因此最后抽出一个工具类来创建这个对象。

      2)、hibernate中实体的三种状态

          临时态:(瞬时态)对象中没有id值,同时对象与session没有关联;
          持久态:对象里有id值,同时对象与session有关联;
          游离态:(托管态)对象里有id值,但是对象与session没有关联;

      3)、saveOrUpdate方法:如果操作的对象是临时态,做insert操作;如果对象是持久态或者游离态,做update操作。

      4)、hibernate中的一级缓存:

          1)、默认开启一级缓存
          2)、一级缓存的作用范围即session的范围
          3)、一级缓存中存储的数据必须是持久态数据

      5)、hibernate一级缓存的特性:持久态自动更新数据库(即修改实体中的值后,不需要执行update方法)

    其中的原理:更新实体,首先要查询,你根据id查询到实体后,会把这个实体中的数据放到一级缓存中,然后把同样的一份数据放到快照区(副本),然后你更新实体的值,这时会更改一级缓存中的值,最后当你提交的时候,会比较快照区和一级缓存中的值是否相同,如果相同就不更新数据库;如果不同,就把一级缓存中的更新后的值提交到数据库,即执行update操作。

      6)、事务的规范写法:try....catch....finally(应该有失败的时候,请求回滚)

      7)、session 是单线程对象,所以我们要将session对象与hibernate进行绑定(本地线程绑定)。先在核心配置文件配置,然后在工具类中获取session对象。

       8)、hibernate查询:

          query对象可以实现;
          criteria对象也可以实现;
          SqlQuery对象也可以实现;

    *******************************分割线*****************************************

    1、hibernate的查询方式:
    对象导航查询:根据ID查询某个客户,再查询这个客户对应的所有联系人(一对多)
    OID查询:根据ID查询某一条记录,返回对象
        hql查询;
    Query对象,写hql语句实现查询;
      查询所有:from 实体类名字
      条件查询:from 实体类名字 where name=? and age=? query.setParameter(0,"老王");query.setParameter(1,18);
      排序:ORDER BY ASC/DESC
      模糊查询:LIKE ? query.setParameter(0,"%a%");
      分页查询:query.setFirstResult(0);设置起始位置 query.setMaxResult(5);设置每页数据大小
    QBC查询:
      Creteria对象
    本地sql查询:
      SQLQuery对象,使用普通sql查询

     2、hibernate中的查询策略:

      立即查询;

      延迟查询;

     3、hibernate中的批量抓取:可以减少查询的次数;需要在实体类的配置文件中配置参数batch-size.

  • 相关阅读:
    C++中的static关键字的总结
    2017上海C++面试
    Vim 跳到上次光标位置
    Windows XP Professional产品序列号
    Centos7 安装sz,rz命令
    Xshell里连接VirtualBox里的Centos7
    什么是位、字节、字、KB、MB
    Centos7 tmux1.6 安装
    Centos7 在 Xshell里 vim的配置
    对JDBC的轻量级封装,Hibernate框架
  • 原文地址:https://www.cnblogs.com/ZT-SummerRain/p/7123962.html
Copyright © 2020-2023  润新知