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


    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语法,但是完全面向对象的

     举例

     //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();
        }
    }
    查询所有的数据
       //批量插入数据
        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();
          
    批量插入数据
     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     }
    分页查询
     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     }
    选择特定的列
     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一样的效果

    举例

     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     }
    查询所有 
     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();
    分页查询
     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     }
    条件查询

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

  • 相关阅读:
    Confluence 6 快捷键
    Confluence 6 快捷键
    【转】Linux常用命令
    【转】Linux常用命令
    【转】Linux常用命令
    互联网分布式微服务云平台规划分析--服务监控中心
    .NET Framework基础知识(五)(转载)
    Windows 下安装mysql
    kvm
    s5-6 Linux 标准输出 系统优化 目录结构
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/6483829.html
Copyright © 2020-2023  润新知