hibernate框架(2)---Hibernate的核心API

2年前 (2022) 程序员胖胖胖虎阿
283 0 0

Hibernate的核心API

一般我们通过hibernate进行操作的时候,都会遵循下面的流程,那么接下来我对每一个步骤进行讲解:

 1  public void testInsert() {
 2              //(1) 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
 3              Configuration configuration = new Configuration().configure();
 4              //(2)创建会话工厂
 5              SessionFactory sessionFactory = configuration.buildSessionFactory();
 6              //(3) 创建会话
 7              Session session = sessionFactory.openSession();
 8              //(4) 开启事务
 9              Transaction transaction = session.beginTransaction();
10   
11             /*
12              *编写自己的逻辑代码
13              */
14  
15              // 提交事务
16              transaction.commit();
17              session.close();
18              sessionFactory.close();
19          } 

  (1) 实例化配置对象 configuration 

   这一步是用来加载核心配置文件

    核心配置有两种:
      hibernate.properties
        加载:Configuration configuration = new Configuration();
      hibernate.cfg.xml:
        加载:Configuration configuration = new Configuration().configure();

 (2)创建会话工厂  sessionFactory 

     Configuration对象根据当前的配置信息生成 SessionFactory对象,

       SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句

     SessionFactory 对象是线程安全的,SessionFactory还负责维护Hibernate的二级缓存,

      SessionFactory对象根据数据库信息,维护连接池,创建Session(相当于Connection)对象

 (3)创建会话 session对象(相当于 JDBC的 Connection)

        Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,是线程不安全的

        所有持久化对象必须在 session 的管理下才可以进行持久化操作,Session 对象有一个一级缓存

        显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处,持久化类与 Session 关联起来后就具有了持久化的能力,

        Session维护了Hiberante一级缓存.

   session对象提供了许多的方法来实现增删改差:

       save()/persist()         :添加
    update()         :修改
    saveOrUpdate()      :增加和修改对象
    delete()          :删除对象
    get()/load()       :根据主键查询
    createQuery()      :创建一个Query接口,编写HQL语句
    createSQLQuery()   :创建一个SQLQuery接口,编写SQL语句数据库操作对象
    createCriteria()     :返回一个Criteria接口.条件查询 

(4)提取工具类

因为我们在项目开发中经常需要进行相关增删改查的操作,所以都需要这个session对象,这个时候我们可以把她变成一个工具类

 1 public class HibernateUtils {
 2     
 3     private static Configuration configuration;
 4     
 5     private static SessionFactory sessionFactory;
 6     
 7     static{
 8         configuration=new Configuration().configure();
 9         
10         sessionFactory=configuration.buildSessionFactory();   
11     }   
12     public static Session getSession(){
13         return sessionFactory.openSession();
14     } 
15 }
16 /*
17  *通过这个工具类,只要你每次HibernateUtils.getSession
18  *就可以获得session对象
19  */

(5) 开启事务 Transaction 对象

  获得:Transaction tx = session.beginTransaction();

  常用方法:
    commit() :提交相关联的session实例
    rollback() :撤销事务操作
    wasCommitted() :检查事务是否提交

  如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务

6.Query 对象
  Query代表面向对象的一个Hibernate查询操作
  session.createQuery 接收一个HQL语句
  HQL是Hibernate Query Language缩写, 语法很像SQL语法,但是完全面向对象的

 举例

hibernate框架(2)---Hibernate的核心API

 //1.查询所有的数据
    public  void testQuery(){
        //这里就是通过足记编写的工具类,来获得session对象
        Session session=HibernateUtils.getSession();
        Transaction transaction =session.beginTransaction();
        
        String hql="from Customer"; //类名
        
        Query  query =session.createQuery(hql);
        
        List<Customer> customers=query.list();
        System.out.println(customers);
        
        transaction.commit();
        session.close();
    }
}

查询所有的数据

hibernate框架(2)---Hibernate的核心API

   //批量插入数据
    public void testBathInsert(){
        Session session=HibernateUtils.getSession();
        Transaction transaction =session.beginTransaction();
        
        for(int i=0;i<1000;i++){
            Customer customer =new Customer();
            customer.setName("小明_"+i);
            customer.setAddr("余杭区_"+i);
            customer.setCity("杭州_"+i);
            customer.setAge(i);
            session.save(customer);
        }     
        transaction.commit();
        session.close();
      

批量插入数据

hibernate框架(2)---Hibernate的核心API

 1 //分页查询
 2     public void testQueryByPage(){
 3         Session session=HibernateUtils.getSession();
 4         Transaction transaction =session.beginTransaction();
 5         
 6         //查询所有数据
 7         String hql=" from Customer";
 8         Query query =session.createQuery(hql);
 9         
10         //设置查询条件 
11         query.setFirstResult(20);//设置开始查询的位置
12         query.setMaxResults(20);//要查询的长度
13         
14         List<Customer> customers =query.list();
15         System.out.println(customers);
16         
17         
18         transaction.commit();
19         session.close();
20     }

分页查询

hibernate框架(2)---Hibernate的核心API

 1 //通过select关键字 查询指定的属性和对应的列
 2     public void testQuerySelect(){
 3         Session session=HibernateUtils.getSession();
 4         Transaction transaction =session.beginTransaction();
 5         //这里既然是new Customer(name,age),那么就需要通过这样的构造函数
 6         String hql="select new Customer(name,age) from Customer";
 7         
 8         Query query =session.createQuery(hql);
 9         
10         List<Customer> customers =query.list();
11         System.out.println(customers);
12         
13         transaction.commit();
14         session.close();
15     }

选择特定的列

hibernate框架(2)---Hibernate的核心API

 1 //通过where条件
 2     public void testQueryParamter(){
 3         Session session=HibernateUtils.getSession();
 4         Transaction transaction =session.beginTransaction();
 5         
 6         String hql="from Customer where name=? and age=?";
 7         
 8         Query query =session.createQuery(hql);
 9         query.setParameter(0, "小明_4");
10         query.setParameter(1, 4);
11         
12         List<Customer> customers =query.list();
13         System.out.println(customers);
14            
15         transaction.commit();
16         session.close();
17     }

where条件查询

7.Criteria(条件查询接口)

可以实现和Query一样的效果

举例

hibernate框架(2)---Hibernate的核心API

 1   // 查询所有
 2     public void testQueryAll() {
 3 
 4         // 获取Session对象
 5         Session session = HibernateUtils.getSession();
 6         //开启事务
 7         Transaction transaction =session.beginTransaction();
 8         //
 9         Criteria criteria =session.createCriteria(Customer.class);
10         
11         List<Customer> customers =criteria.list();
12         System.out.println(customers);
13         
14         transaction.commit();
15         session.close();
16     }

查询所有 

hibernate框架(2)---Hibernate的核心API

 1    //分页查询
 2     public void testQueryByPage(){
 3         // 获取Session对象
 4         Session session = HibernateUtils.getSession();
 5         //开启事务
 6         Transaction transaction =session.beginTransaction();
 7         
 8         Criteria criteria =session.createCriteria(Customer.class);
 9         criteria.setFirstResult(30);
10         criteria.setMaxResults(20);
11         
12         List<Customer> customers =criteria.list();
13         System.out.println(customers);
14          
15         transaction.commit();
16         session.close();

分页查询

hibernate框架(2)---Hibernate的核心API

 1 //条件查询
 2     public void testQueryByCondition(){
 3      // 获取Session对象
 4         Session session = HibernateUtils.getSession();
 5         //开启事务
 6         Transaction transaction =session.beginTransaction();
 7         Criteria criteria =session.createCriteria(Customer.class);
 8         
 9         //创建条件对象
10         Criterion  criterion =Restrictions.eq("name", "小明_4");
11         
12         //把查询条件对象加载到查询对象
13         criteria.add(criterion);
14         
15         List<Customer> customers =criteria.list();
16         System.out.println(customers);
17          
18         transaction.commit();
19         session.close();
20     }

条件查询

这篇文字就讲到这了,欢迎大家多多指点,谢谢!

 

版权声明:程序员胖胖胖虎阿 发表于 2022年9月20日 下午4:16。
转载请注明:hibernate框架(2)---Hibernate的核心API | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...