zoukankan      html  css  js  c++  java
  • Hibernate的核心API

    Configuration:负责管理Hibernate的配置信息
      1.加载核心配置文件
        核心配置有两种:
          hibernate.properties
            加载:Configuration configuration = new Configuration();
          hibernate.cfg.xml:
            加载:Configuration configuration = new Configuration().configure();

      2.加载映射文件
        第一种写法:
          configuration.addResource("cn/yzu/hibernate3/demo1/Customer.hbm.xml");
        第二种写法:(要求:映射文件名称要规范,类与映射在同一个包下)
          configuration.addClass(Customer.class);

    SessionFactory:Session工厂
      Configuration对象根据当前的配置信息生成 SessionFactory对象,SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句
      SessionFactory 对象是线程安全的,SessionFactory还负责维护Hibernate的二级缓存,SessionFactory对象根据数据库信息,维护连接池,创建Session(相当于Connection)对象

      抽取工具类

    public class HibernateUtils {
      private static Configuration configuration;
      private static SessionFactory sessionFactory;
      static{
        configuration = new Configuration().configure();
        sessionFactory = configuration.buildSessionFactory();
      }
      public static Session openSession(){
        return sessionFactory.openSession();
      }
      public static void main(String[] args) {
        openSession();
      }
    }

      在Hibernate中使用c3p0连接池
        引入c3p0的jar包:c3p0-0.9.1.jar
        在核心配置中添加一段配置:

    <!-- C3P0连接池设定-->
    <!-- 使用c3po连接池 配置连接池提供的供应商-->
    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider </property>
    <!--在连接池中可用的数据库连接的最少数目 -->
    <property name="c3p0.min_size">5</property>
    <!--在连接池中所有数据库连接的最大数目 -->
    <property name="c3p0.max_size">20</property>
    <!--设定数据库连接的过期时间,以秒为单位,
    如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
    <property name="c3p0.timeout">120</property>
    <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
    <property name="c3p0.idle_test_period">3000</property>

    Session(相当于 JDBC的 Connection)
      Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,是线程不安全的,所有持久化对象必须在 session 的管理下才可以进行持久化操作,Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处,持久化类与 Session 关联起来后就具有了持久化的能力,Session维护了Hiberante一级缓存.

      方法:

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

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

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

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

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

      例子:

    // 1.简单查询
    List<Customer> list = session.createQuery("from Customer").list();
            
    // 2.条件查询:
    List<Customer> list = session.createQuery("from Customer where name = ?").setParameter(0, "芙蓉").list();
            
    // 3.分页查询:select * from customer limit a,b; a:从哪开始  b:每页显示记录数.
    Query query = session.createQuery("from Customer");
    query.setFirstResult(3);
    query.setMaxResults(3);  
    List<Customer> list = query.list();

    Criteria(条件查询接口)

    // 1.简单查询
    List<Customer> list = session.createCriteria(Customer.class).list();
            
    // 2.条件查询:
    Criteria criteria = session.createCriteria(Customer.class);
    criteria.add(Restrictions.eq("name","芙蓉"));
    List<Customer> list = criteria.list();
            
    // 3.分页查询:
    Criteria criteria = session.createCriteria(Customer.class);
    criteria.setFirstResult(3);
    criteria.setMaxResults(3);
    List<Customer> list = criteria.list();
  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/6166329.html
Copyright © 2011-2022 走看看