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();
  • 相关阅读:
    8.02_python_lx_day14
    8.02_python_lx_day13<2>
    8.02_python_lx_day13<1>
    7.30_python_lx_day20
    7.29_python_lx_da19
    7.29_python_lx_day12
    Docker镜像
    Docker学习Ⅱ
    Docker学习Ⅰ
    2-3树的插入和删除原理
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/6166329.html
Copyright © 2011-2022 走看看