zoukankan      html  css  js  c++  java
  • 05-Hibernate的核心API及使用c3p0连接池

    Hibernate的核心API

      

    Configuration:负责管理 Hibernate 的配置信息

        • 1.加载核心配置文件:

    核心配置有两种:

    * hibernate.properties:

    * 加载:

    * Configuration configuration = new Configuration();

    * hibernate.cfg.xml:

    * 加载:

    * Configuration configuration = new Configuration().configure();

        • 2.加载映射文件:

    * 第一种写法:

    * configuration.addResource("cn/itcast/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连接池设定-->
    <!-- 使用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 的管理下才可以进行持久化操作

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

     

    Criteria

    Criteria条件查询:

     

     

  • 相关阅读:
    centos7 计划任务 定时运行sh
    Nginx负载均衡配置 域名和IP 访问时从java request.getServerName()获取不同问题解决
    windows2012激活方式 2016激活方式 windows10激活方式
    CentOS7 安装Chrome
    使用 go-cqhttp 在龙芯和其他平台搭建qq机器人
    KDE桌面无故特效消失和图标黑底
    SDUST 小学期飞机大战简述
    SDUST 小学期飞机大战简述
    宝塔中极速安装的PHP如何使用AMQP连接RabbitMQ
    Electron登录注册桌面应用源码+安装文件的打包方法
  • 原文地址:https://www.cnblogs.com/1963942081zzx/p/6516663.html
Copyright © 2011-2022 走看看