Hibernate【查询详解、连接池、逆向工程】

 
 

前言

在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式….到目前为止,我们都是使用一些简单的主键查询阿…使用HQL查询所有的数据….本博文主要讲解Hibernate的查询操作,连接池,逆向工程的知识点

get/load主键查询

由于主键查询这个方法用得比较多,于是Hibernate专门为我们封装了起来…

对象导航查询

如果对象与对象之前存在一对多、多对一的关系的时候

        // 对象导航查询        Dept dept =  (Dept) session.get(Dept.class, 12);        System.out.println(dept.getDeptName());        //这里就可以得到部门对应的所有员工        System.out.println(dept.getEmps());
       Dept dept =  (Dept) session.get(Dept.class, 12);
       System.out.println(dept.getDeptName());

       //这里就可以得到部门对应的所有员工
       System.out.println(dept.getEmps());

HQL查询

Hibernate的前面章节中已经讲解过了基本的概念了。在这里我们就直接看看怎么使用了。

值得注意的是:

查询全部列

    //方式一:直接写对象    Query q = session.createQuery("from Dept");    //方式二:可以为对象取别名    Query q = session.createQuery("select d from Dept d");
   Query q = session.createQuery("from Dept");

   //方式二:可以为对象取别名
   Query q = session.createQuery("select d from Dept d");

值得注意的是:HQL不支持*号,下面的代码是错误的。

    //不能用*    Query q = session.createQuery("select * from Dept d"); 
   Query q = session.createQuery("select * from Dept d");

查询指定的列

值得注意的是:使用HQL查询指定的列,返回的是对象数组Object[]

        //只查询name和eatBanana列        Query query = session.createQuery("select m.name,m.eatBanana from Monkey m");        System.out.println(query.list());
       Query query = session.createQuery("select m.name,m.eatBanana from Monkey m");
       System.out.println(query.list());
640?wx_fmt=png
这里写图片描述

封装对象

前面测试了查询指定的列的时候,返回的是对象数组…可是对象数组我们不好操作啊…Hibernate还提供了将对象数组封装成对象的功能

        Query query = session.createQuery("select new Monkey(m.name,m.eatBanana )from Monkey m");

条件查询

在SQL中条件查询我们也用得比较多,我们来看看HQL中的条件查询有什么新特性。

占位符

占位符就是指?号,我们在SQL中也常常用…

        Query query = session.createQuery("from Monkey m where m.name=?");        //HQL是从0开始的        query.setParameter(0, "大猴子");        System.out.println(query.list());
       //HQL是从0开始的
       query.setParameter(0, "大猴子");

       System.out.println(query.list());
640?wx_fmt=png
这里写图片描述

命名参数

HQL还支持命名参数查询!下面我们来看一下怎么用:

语法::命名

        Query query = session.createQuery("from Monkey m where m.name=:monkeyName");        //HQL是从0开始的        query.setParameter("monkeyName", "大猴子");        System.out.println(query.list());
       //HQL是从0开始的
       query.setParameter("monkeyName", "大猴子");
       System.out.println(query.list());
640?wx_fmt=png
这里写图片描述

范围查询

范围查询就是使用between and关键字来查询特定范围的数据。。和SQL是一样的…

        Query q = session.createQuery("from Dept d where deptId between ? and ?");        q.setParameter(0, 1);        q.setParameter(1, 20);        System.out.println(q.list());
       q.setParameter(0, 1);
       q.setParameter(1, 20);
       System.out.println(q.list());

模糊查询

模糊查询就是使用Like关键字进行查询,和SQL也是一样的。

        //模糊        Query q = session.createQuery("from Dept d where deptName like ?");        q.setString(0, "%部%");        System.out.println(q.list());
       Query q = session.createQuery("from Dept d where deptName like ?");
       q.setString(0, "%部%");
       System.out.println(q.list());

聚合函数统计

我们也经常会查询数据库中一共有多少条记录这样的需求。那么在HQL中怎么用呢?

        Query query = session.createQuery("select COUNT(*) from Monkey");        Object o = query.uniqueResult();        System.out.println(o);
       Object o = query.uniqueResult();
       System.out.println(o);
640?wx_fmt=png
这里写图片描述

分组查询

分组查询和SQL是一样的…

        //-- 统计t_employee表中,每个部门的人数        //数据库写法:SELECT dept_id,COUNT(*) FROM t_employee GROUP BY dept_id;        // HQL写法        Query q = session.createQuery("select e.dept, count(*) from Employee e group by e.dept");        System.out.println(q.list());
       //数据库写法:SELECT dept_id,COUNT(*) FROM t_employee GROUP BY dept_id;
       // HQL写法
       Query q = session.createQuery("select e.dept, count(*) from Employee e group by e.dept");
       System.out.println(q.list());

连接查询

连接查询也就是多表查询…多表查询有三种

值得注意的是:连接查询返回的也是对象数组!

        //1) 内连接   【映射已经配置好了关系,关联的时候,直接写对象的属性即可】        Query q = session.createQuery("from Dept d inner join d.emps");        //2) 左外连接        Query q = session.createQuery("from Dept d left join d.emps");        //3) 右外连接        Query q = session.createQuery("from Employee e right join e.dept");        q.list();
       Query q = session.createQuery("from Dept d inner join d.emps");

       //2) 左外连接
       Query q = session.createQuery("from Dept d left join d.emps");

       //3) 右外连接
       Query q = session.createQuery("from Employee e right join e.dept");
       q.list();

迫切连接

由于连接查询返回的是对象数组,我们使用对象数组来操作的话会很不方便…既然是连接查询,那么对象与对象是肯定有关联关系的…于是乎,我们想把左表的数据填充到右表中,或者将右表的数据填充到左表中…使在返回的时候是一个对象、而不是对象数组!HQL提供了fetch关键字供我们做迫切连接

        //1) 迫切内连接    【使用fetch, 会把右表的数据,填充到左表对象中!】        Query q = session.createQuery("from Dept d inner join fetch d.emps");        q.list();        //2) 迫切左外连接        Query q = session.createQuery("from Dept d left join fetch d.emps");        q.list();
       Query q = session.createQuery("from Dept d inner join fetch d.emps");
       q.list();

       //2) 迫切左外连接
       Query q = session.createQuery("from Dept d left join fetch d.emps");
       q.list();

查询语句放在配置文件中【命名查询】

我们可以在具体的映射配置文件中存放一些常用的语句。以Dept为例

    <!-- 存放sql语句,如果有<>这样的字符数据,需要使用CDATA转义! -->    <query name="getAllDept">        <![CDATA[            from Dept d where deptId < ?        ]]>    </query>"getAllDept">
       <![CDATA[
           from Dept d where deptId < ?
       ]]>
   </query>

在程序中,我们可以获取配置文件配置的语句

        Query q = session.getNamedQuery("getAllDept");        q.setParameter(0, 10);        System.out.println(q.list());
       q.setParameter(0, 10);
       System.out.println(q.list());

Criteria 查询

Criteria是一种完全面向对象的查询

Criteria使用的是add()来添加条件。条件又使用一个Restrictions类来封装

        Criteria criteria = session.createCriteria(Monkey.class);        criteria.add(Restrictions.eq())

我们来简单看一下Restrictions的方法:

640?wx_fmt=png
这里写图片描述

都是一些大于、小于、等于之类的….Criteria查询就使用不了分组、连接查询了。


SQLQuery本地SQL查询

有的时候,我们可能表的结构十分复杂,如果使用关联映射的话,配置文件是十分臃肿的…因此,我们并不是把全部的数据表都使用映射的方式来创建数据表…

这时,我们就需要用到SQLQuery来维护我们的数据了..

SQLQuery是不能跨数据库的,因为Hibernate在配置的时候就指定了数据库的“方言”

        SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM monkey_ limit 0,3");        System.out.println(sqlQuery.list());

       System.out.println(sqlQuery.list());

返回的也是对象数组:

640?wx_fmt=png
这里写图片描述

Hibernate也支持在SQLQuery中对数据进行对象封装..只要添加类型就行了

        SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM monkey_ limit 0,3").addEntity(Monkey.class);        System.out.println(sqlQuery.list());

       System.out.println(sqlQuery.list());
640?wx_fmt=png
这里写图片描述

分页查询

传统的SQL我们在DAO层中往往都是使用两个步骤来实现分页查询

Hibernate对分页查询也有很好地支持,我们来一下:

        Query query = session.createQuery("from Monkey");        //得到滚动结果集        ScrollableResults scroll = query.scroll();        //滚动到最后一行        scroll.last();        int i = scroll.getRowNumber() + 1;        System.out.println("总计路数:" + i);        //设置分页位置        query.setFirstResult(0);        query.setMaxResults(3);        System.out.println(query.list());

       //得到滚动结果集
       ScrollableResults scroll = query.scroll();
       //滚动到最后一行
       scroll.last();
       int i = scroll.getRowNumber() + 1;
       System.out.println("总计路数:" + i);

       //设置分页位置
       query.setFirstResult(0);
       query.setMaxResults(3);

       System.out.println(query.list());

值得注意的是,滚动结果集是从0开始的,因此需要+1才可得到总记录数!

640?wx_fmt=png
这里写图片描述

如果我们们使用的是SELECT COUNT(*) FROM 实体,我们可以通过uniqueResult()方法获取数据的唯一记录,得到的数据转换成Long类型即可。

    Long totalRecord = (Long) queryCount.uniqueResult();

Hibernate连接池

Hibernate自带了连接池,但是呢,该连接池比较简单..而Hibernate又对C3P0这个连接池支持…因此我们来更换Hibernate连接池为C3P0

查看Hibernate自带的连接池

我们可以通过Hibernate.properties文件中查看Hibernate默认配置的连接池

hibernate.properties的配置文件可以在\project\etc找到

Hibernate的自带连接池啥都没有,就一个连接数量为1

640?wx_fmt=png
这里写图片描述

查看Hibernate对C3P0的支持

640?wx_fmt=png
这里写图片描述

修改Hibernate连接池

我们在hibernate.cfg.xml中配置C3p0,让C30P0作为Hibernate的数据库连接池

查找Hibernate支持的连接池组件有什么

640?wx_fmt=png
这里写图片描述

既然找到了,那么我们在hibernate.cfg.xml中配置对应的类就和相关配置就行了

        <!-- 【连接池配置】 -->        <!-- 配置连接驱动管理类 -->        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>        <!-- 配置连接池参数信息 -->        <property name="hibernate.c3p0.min_size">2</property>        <property name="hibernate.c3p0.max_size">4</property>        <property name="hibernate.c3p0.timeout">5000</property>        <property name="hibernate.c3p0.max_statements">10</property>        <property name="hibernate.c3p0.idle_test_period">30000</property>        <property name="hibernate.c3p0.acquire_increment">2</property>
       <!-- 配置连接驱动管理类 -->
       <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
       <!-- 配置连接池参数信息 -->
       <property name="hibernate.c3p0.min_size">2</property>
       <property name="hibernate.c3p0.max_size">4</property>
       <property name="hibernate.c3p0.timeout">5000</property>
       <property name="hibernate.c3p0.max_statements">10</property>
       <property name="hibernate.c3p0.idle_test_period">30000</property>
       <property name="hibernate.c3p0.acquire_increment">2</property>

线程Session使用

我们创建Session的时候,有两个方法

一般地,我们使用线程Session比较多

如果要使用getCurrentSession(),需要在配置文件中配置:

        <!--配置线程Session-->        <property name="hibernate.current_session_context_class">thread</property>
       <property name="hibernate.current_session_context_class">thread</property>

测试数据

@Test    public void testSession() throws Exception {        //openSession:  创建Session, 每次都会创建一个新的session        Session session1 = sf.openSession();        Session session2 = sf.openSession();        System.out.println(session1 == session2);        session1.close();        session2.close();        //getCurrentSession 创建或者获取session        // 线程的方式创建session          // 一定要配置:<property name="hibernate.current_session_context_class">thread</property>        Session session3 = sf.getCurrentSession();// 创建session,绑定到线程        Session session4 = sf.getCurrentSession();// 从当前访问线程获取session        System.out.println(session3 == session4);        // 关闭 【以线程方式创建的session,可以不用关闭; 线程结束session自动关闭】        //session3.close();        //session4.close(); 报错,因为同一个session已经关闭了!    }
   public void testSession() throws Exception {
       //openSession:  创建Session, 每次都会创建一个新的session
       Session session1 = sf.openSession();
       Session session2 = sf.openSession();
       System.out.println(session1 == session2);
       session1.close();
       session2.close();

       //getCurrentSession 创建或者获取session
       // 线程的方式创建session  
       // 一定要配置:<property name="hibernate.current_session_context_class">thread</property>
       Session session3 = sf.getCurrentSession();// 创建session,绑定到线程
       Session session4 = sf.getCurrentSession();// 从当前访问线程获取session
       System.out.println(session3 == session4);

       // 关闭 【以线程方式创建的session,可以不用关闭; 线程结束session自动关闭】
       //session3.close();
       //session4.close(); 报错,因为同一个session已经关闭了!
   }

为什么要使用逆向工程

由于我们每次编写Hibernate的时候都需要写实体,写映射文件。而且Hibernate的映射文件也容易出错。而逆向工程可以帮我们自动生成实体和映射文件,这样就非常方便了。

使用PowerDesigner

在设计数据库表时,我们使用PowerDesigner来生成概念模型\物理模型…

设计一个人员组织架构:有机构、部门、员工、领导、角色、权限。

概念模型:

640?wx_fmt=png
这里写图片描述

在PowerDesigner中,箭头指向的方向永远是“一”的一方

生成物理模型:

640?wx_fmt=png
这里写图片描述
640?wx_fmt=png
这里写图片描述

最后生成物理模型是这样子的:

640?wx_fmt=png
这里写图片描述

生成sql语句

我们可以单个生成,一个一个复制

640?wx_fmt=png
这里写图片描述

也可以把整个物理模型的sql语句一起生成:

640?wx_fmt=png
这里写图片描述
    /*==============================================================*/    /* DBMS name:      MySQL 5.0                                    */    /* Created on:     2017/6/5 20:22:52                            */    /*==============================================================*/    drop table if exists person_role;    drop table if exists t_company;    drop table if exists t_dept;    drop table if exists t_employee;    drop table if exists t_person;    drop table if exists t_privilege;    drop table if exists t_role;    drop table if exists t_role_privilege;    /*==============================================================*/    /* Table: person_role                                           */    /*==============================================================*/    create table person_role    (       person_id            varchar(32) not null,       role_id              varchar(32) not null,       state                varchar(32),       primary key (person_id, role_id)    );    /*==============================================================*/    /* Table: t_company                                             */    /*==============================================================*/    create table t_company    (       company_id           varchar(32) not null,       name                 varchar(32),       primary key (company_id)    );    /*==============================================================*/    /* Table: t_dept                                                */    /*==============================================================*/    create table t_dept    (       dept_id              varchar(32) not null,       company_id           varchar(32) not null,       name                 varchar(32),       primary key (dept_id)    );    /*==============================================================*/    /* Table: t_employee                                            */    /*==============================================================*/    create table t_employee    (       person_id            varchar(32) not null,       dept_id              varchar(32),       name                 varchar(32),       employee_id          varchar(32),       primary key (person_id)    );    /*==============================================================*/    /* Table: t_person                                              */    /*==============================================================*/    create table t_person    (       person_id            varchar(32) not null,       dept_id              varchar(32) not null,       name                 varchar(32),       primary key (person_id)    );    /*==============================================================*/    /* Table: t_privilege                                           */    /*==============================================================*/    create table t_privilege    (       privilege_id         varchar(32) not null,       name                 varchar(32),       primary key (privilege_id)    );    /*==============================================================*/    /* Table: t_role                                                */    /*==============================================================*/    create table t_role    (       role_id              varchar(32) not null,       name                 varchar(32),       primary key (role_id)    );    /*==============================================================*/    /* Table: t_role_privilege                                      */    /*==============================================================*/    create table t_role_privilege    (       role_id              varchar(32) not null,       privilege_id         varchar(32) not null,       primary key (role_id, privilege_id)    );    alter table person_role add constraint FK_person_role foreign key (person_id)          references t_person (person_id) on delete restrict on update restrict;    alter table person_role add constraint FK_person_role2 foreign key (role_id)          references t_role (role_id) on delete restrict on update restrict;    alter table t_dept add constraint FK_companty_dept foreign key (company_id)          references t_company (company_id) on delete restrict on update restrict;    alter table t_employee add constraint FK_inherit foreign key (person_id)          references t_person (person_id) on delete restrict on update restrict;    alter table t_person add constraint FK_dept_person foreign key (dept_id)          references t_dept (dept_id) on delete restrict on update restrict;    alter table t_role_privilege add constraint FK_belong foreign key (role_id)          references t_role (role_id) on delete restrict on update restrict;    alter table t_role_privilege add constraint FK_own foreign key (privilege_id)          references t_privilege (privilege_id) on delete restrict on update restrict;
   /* DBMS name:      MySQL 5.0                                    */
   /* Created on:     2017/6/5 20:22:52                            */
   /*==============================================================*/


   drop table if exists person_role;

   drop table if exists t_company;

   drop table if exists t_dept;

   drop table if exists t_employee;

   drop table if exists t_person;

   drop table if exists t_privilege;

   drop table if exists t_role;

   drop table if exists t_role_privilege;

   /*==============================================================*/
   /* Table: person_role                                           */
   /*==============================================================*/
   create table person_role
   (
      person_id            varchar(32) not null,
      role_id              varchar(32) not null,
      state                varchar(32),
      primary key (person_id, role_id)
   );

   /*==============================================================*/
   /* Table: t_company                                             */
   /*==============================================================*/
   create table t_company
   (
      company_id           varchar(32) not null,
      name                 varchar(32),
      primary key (company_id)
   );

   /*==============================================================*/
   /* Table: t_dept                                                */
   /*==============================================================*/
   create table t_dept
   (
      dept_id              varchar(32) not null,
      company_id           varchar(32) not null,
      name                 varchar(32),
      primary key (dept_id)
   );

   /*==============================================================*/
   /* Table: t_employee                                            */
   /*==============================================================*/
   create table t_employee
   (
      person_id            varchar(32) not null,
      dept_id              varchar(32),
      name                 varchar(32),
      employee_id          varchar(32),
      primary key (person_id)
   );

   /*==============================================================*/
   /* Table: t_person                                              */
   /*==============================================================*/
   create table t_person
   (
      person_id            varchar(32) not null,
      dept_id              varchar(32) not null,
      name                 varchar(32),
      primary key (person_id)
   );

   /*==============================================================*/
   /* Table: t_privilege                                           */
   /*==============================================================*/
   create table t_privilege
   (
      privilege_id         varchar(32) not null,
      name                 varchar(32),
      primary key (privilege_id)
   );

   /*==============================================================*/
   /* Table: t_role                                                */
   /*==============================================================*/
   create table t_role
   (
      role_id              varchar(32) not null,
      name                 varchar(32),
      primary key (role_id)
   );

   /*==============================================================*/
   /* Table: t_role_privilege                                      */
   /*==============================================================*/
   create table t_role_privilege
   (
      role_id              varchar(32) not null,
      privilege_id         varchar(32) not null,
      primary key (role_id, privilege_id)
   );

   alter table person_role add constraint FK_person_role foreign key (person_id)
         references t_person (person_id) on delete restrict on update restrict;

   alter table person_role add constraint FK_person_role2 foreign key (role_id)
         references t_role (role_id) on delete restrict on update restrict;

   alter table t_dept add constraint FK_companty_dept foreign key (company_id)
         references t_company (company_id) on delete restrict on update restrict;

   alter table t_employee add constraint FK_inherit foreign key (person_id)
         references t_person (person_id) on delete restrict on update restrict;

   alter table t_person add constraint FK_dept_person foreign key (dept_id)
         references t_dept (dept_id) on delete restrict on update restrict;

   alter table t_role_privilege add constraint FK_belong foreign key (role_id)
         references t_role (role_id) on delete restrict on update restrict;

   alter table t_role_privilege add constraint FK_own foreign key (privilege_id)
         references t_privilege (privilege_id) on delete restrict on update restrict;

在数据库生成八张表:

640?wx_fmt=png
这里写图片描述

在Idea下使用Hibernate逆向工程

640?wx_fmt=png
这里写图片描述

值得注意的是:Intellij idea下生成出来的映射文件是没有对应的关联关系的。也就是说:一对多或多对多的关系,它是不会帮你自动生成的【好像是这样子的】。。。因此,需要我们自己添加Set【如果需要】

更新,如果想要体现对应的关联关系的话,请参考该博文!


如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y


hibernate.properties # # Hibernate, Relational Persistence for Idiomatic Java # # License: GNU Lesser General Public License (LGPL), version 2.1 or later. # See the lgpl.txt file in the root directory or . # ###################### ### Query Language ### ###################### ## define query language constants / function names hibernate.query.substitutions yes 'Y', no 'N' ## select the classic query parser #hibernate.query.factory_class org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory ################# ### Platforms ### ################# ## JNDI Datasource #hibernate.connection.datasource jdbc/test #hibernate.connection.username db2 #hibernate.connection.password db2 ## HypersonicSQL hibernate.dialect org.hibernate.dialect.HSQLDialect hibernate.connection.driver_class org.hsqldb.jdbcDriver hibernate.connection.username sa hibernate.connection.password hibernate.connection.url jdbc:hsqldb:./build/db/hsqldb/hibernate #hibernate.connection.url jdbc:hsqldb:hsql://localhost #hibernate.connection.url jdbc:hsqldb:test ## H2 (www.h2database.com) #hibernate.dialect org.hibernate.dialect.H2Dialect #hibernate.connection.driver_class org.h2.Driver #hibernate.connection.username sa #hibernate.connection.password #hibernate.connection.url jdbc:h2:mem:./build/db/h2/hibernate #hibernate.connection.url jdbc:h2:testdb/h2test #hibernate.connection.url jdbc:h2:mem:imdb1 #hibernate.connection.url jdbc:h2:tcp://dbserv:8084/sample; #hibernate.connection.url jdbc:h2:ssl://secureserv:8085/sample; #hibernate.connection.url jdbc:h2:ssl://secureserv/testdb;cipher=AES ## MySQL #hibernate.dialect org.hibernate.dialect.MySQLDialect #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect #hibernate.connection.driver_class com.mysql.jdbc.Driver #hibernate.connection.url jdbc:mysql:///test #hibernate.connection.username gavin #hibernate.connection.password ## Oracle #hibernate.dialect org.hibernate.dialect.Oracle8iDialect #hibernate.dialect org.hibernate.dialect.Oracle9iDialect #hibernate.dialect org.hibernate.dialect.Oracle10gDialect #hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver #hibernate.connection.username ora #hibernate.connection.password ora #hibernate.connection.url jdbc:oracle:thin:@localhost:1521:orcl #hibernate.connection.url jdbc:oracle:thin:@localhost:1522:XE ## PostgreSQL #hibernate.dialect org.hibernate.dialect.PostgreSQLDialect #hibernate.connection.driver_class org.postgresql.Driver #hibernate.connection.url jdbc:postgresql:template1 #hibernate.connection.username pg #hibernate.connection.password ## DB2 #hibernate.dialect org.hibernate.dialect.DB2Dialect #hibernate.connection.driver_class com.ibm.db2.jcc.DB2Driver #hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver #hibernate.connection.url jdbc:db2://localhost:50000/somename #hibernate.connection.url jdbc:db2:somename #hibernate.connection.username db2 #hibernate.connection.password db2 ## TimesTen #hibernate.dialect org.hibernate.dialect.TimesTenDialect #hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver #hibernate.connection.url jdbc:timesten:direct:test #hibernate.connection.username #hibernate.connection.password ## DB2/400 #hibernate.dialect org.hibernate.dialect.DB2400Dialect #hibernate.connection.username user #hibernate.connection.password password ## Native driver #hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver #hibernate.connection.url jdbc:db2://systemname ## Toolbox driver #hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver #hibernate.connection.url jdbc:as400://systemname ## Derby (not supported!) #hibernate.dialect org.hibernate.dialect.DerbyDialect #hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver #hibernate.connection.username #hibernate.connection.password #hibernate.connection.url jdbc:derby:build/db/derby/hibernate;create=true ## Sybase #hibernate.dialect org.hibernate.dialect.SybaseDialect #hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver #hibernate.connection.username sa #hibernate.connection.password sasasa #hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb ## Mckoi SQL #hibernate.dialect org.hibernate.dialect.MckoiDialect #hibernate.connection.driver_class com.mckoi.JDBCDriver #hibernate.connection.url jdbc:mckoi:/// #hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.0.3/db.conf #hibernate.connection.username admin #hibernate.connection.password nimda ## SAP DB #hibernate.dialect org.hibernate.dialect.SAPDBDialect #hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB #hibernate.connection.url jdbc:sapdb://localhost/TST #hibernate.connection.username TEST #hibernate.connection.password TEST #hibernate.query.substitutions yes 'Y', no 'N' ## MS SQL Server #hibernate.dialect org.hibernate.dialect.SQLServerDialect #hibernate.connection.username sa #hibernate.connection.password sa ## JSQL Driver #hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver #hibernate.connection.url jdbc:JSQLConnect://1E1/test ## JTURBO Driver #hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver #hibernate.connection.url jdbc:JTurbo://1E1:1433/test ## WebLogic Driver #hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver #hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433 ## Microsoft Driver (not recommended!) #hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver #hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor ## The New Microsoft Driver #hibernate.connection.driver_class com.microsoft.sqlserver.jdbc.SQLServerDriver #hibernate.connection.url jdbc:sqlserver://localhost ## jTDS (since version 0.9) #hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver #hibernate.connection.url jdbc:jtds:sqlserver://1E1/test ## Interbase #hibernate.dialect org.hibernate.dialect.InterbaseDialect #hibernate.connection.username sysdba #hibernate.connection.password masterkey ## DO NOT specify hibernate.connection.sqlDialect ## InterClient #hibernate.connection.driver_class interbase.interclient.Driver #hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb ## Pure Java #hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver #hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb ## Pointbase #hibernate.dialect org.hibernate.dialect.PointbaseDialect #hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver #hibernate.connection.url jdbc:pointbase:embedded:sample #hibernate.connection.username PBPUBLIC #hibernate.connection.password PBPUBLIC ## Ingres ## older versions (before Ingress 2006) #hibernate.dialect org.hibernate.dialect.IngresDialect #hibernate.connection.driver_class ca.edbc.jdbc.EdbcDriver #hibernate.connection.url jdbc:edbc://localhost:II7/database #hibernate.connection.username user #hibernate.connection.password password ## Ingres 2006 or later #hibernate.dialect org.hibernate.dialect.IngresDialect #hibernate.connection.driver_class com.ingres.jdbc.IngresDriver #hibernate.connection.url jdbc:ingres://localhost:II7/database;CURSOR=READONLY;auto=multi #hibernate.connection.username user #hibernate.connection.password password ## Mimer SQL #hibernate.dialect org.hibernate.dialect.MimerSQLDialect #hibernate.connection.driver_class com.mimer.jdbc.Driver #hibernate.connection.url jdbc:mimer:multi1 #hibernate.connection.username hibernate #hibernate.connection.password hibernate ## InterSystems Cache #hibernate.dialect org.hibernate.dialect.Cache71Dialect #hibernate.connection.driver_class com.intersys.jdbc.CacheDriver #hibernate.connection.username _SYSTEM #hibernate.connection.password SYS #hibernate.connection.url jdbc:Cache://127.0.0.1:1972/HIBERNATE ################################# ### Hibernate Connection Pool ### ################################# hibernate.connection.pool_size 1 ########################### ### C3P0 Connection Pool### ########################### #hibernate.c3p0.max_size 2 #hibernate.c3p0.min_size 2 #hibernate.c3p0.timeout 5000 #hibernate.c3p0.max_statements 100 #hibernate.c3p0.idle_test_period 3000 #hibernate.c3p0.acquire_increment 2 #hibernate.c3p0.validate false ############################## ### Proxool Connection Pool### ############################## ## Properties for external configuration of Proxool hibernate.proxool.pool_alias pool1 ## Only need one of the following #hibernate.proxool.existing_pool true #hibernate.proxool.xml proxool.xml #hibernate.proxool.properties proxool.properties ################################# ### Plugin ConnectionProvider ### ################################# ## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics) #hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider #hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider #hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider #hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider ####################### ### Transaction API ### ####################### ## Enable automatic flush during the JTA beforeCompletion() callback ## (This setting is relevant with or without the Transaction API) #hibernate.transaction.flush_before_completion ## Enable automatic session close at the end of transaction ## (This setting is relevant with or without the Transaction API) #hibernate.transaction.auto_close_session ## the Transaction API abstracts application code from the underlying JTA or JDBC transactions #hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory #hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory ## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI ## default is java:comp/UserTransaction ## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class #jta.UserTransaction jta/usertransaction #jta.UserTransaction javax.transaction.UserTransaction #jta.UserTransaction UserTransaction ## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager #hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup #hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup #hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup #hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup #hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup ############################## ### Miscellaneous Settings ### ############################## ## print all generated SQL to the console #hibernate.show_sql true ## format SQL in log and console hibernate.format_sql true ## add comments to the generated SQL #hibernate.use_sql_comments true ## generate statistics #hibernate.generate_statistics true ## auto schema export #hibernate.hbm2ddl.auto create-drop #hibernate.hbm2ddl.auto create #hibernate.hbm2ddl.auto update #hibernate.hbm2ddl.auto validate ## specify a default schema and catalog for unqualified tablenames #hibernate.default_schema test #hibernate.default_catalog test ## enable ordering of SQL UPDATEs by primary key #hibernate.order_updates true ## set the maximum depth of the outer join fetch tree hibernate.max_fetch_depth 1 ## set the default batch size for batch fetching #hibernate.default_batch_fetch_size 8 ## rollback generated identifier values of deleted entities to default values #hibernate.use_identifier_rollback true ## enable bytecode reflection optimizer (disabled by default) #hibernate.bytecode.use_reflection_optimizer true ##################### ### JDBC Settings ### ##################### ## specify a JDBC isolation level #hibernate.connection.isolation 4 ## enable JDBC autocommit (not recommended!) #hibernate.connection.autocommit true ## set the JDBC fetch size #hibernate.jdbc.fetch_size 25 ## set the maximum JDBC 2 batch size (a nonzero value enables batching) #hibernate.jdbc.batch_size 5 #hibernate.jdbc.batch_size 0 ## enable batch updates even for versioned data hibernate.jdbc.batch_versioned_data true ## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default) #hibernate.jdbc.use_scrollable_resultset true ## use streams when writing binary types to / from JDBC hibernate.jdbc.use_streams_for_binary true ## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row #hibernate.jdbc.use_get_generated_keys false ## choose a custom JDBC batcher # hibernate.jdbc.factory_class ## enable JDBC result set column alias caching ## (minor performance enhancement for broken JDBC drivers) # hibernate.jdbc.wrap_result_sets ## choose a custom SQL exception converter #hibernate.jdbc.sql_exception_converter ########################## ### Second-level Cache ### ########################## ## optimize cache for minimal "puts" instead of minimal "gets" (good for clustered cache) #hibernate.cache.use_minimal_puts true ## set a prefix for cache region names hibernate.cache.region_prefix hibernate.test ## disable the second-level cache #hibernate.cache.use_second_level_cache false ## enable the query cache #hibernate.cache.use_query_cache true ## store the second-level cache entries in a more human-friendly format #hibernate.cache.use_structured_entries true ## choose a cache implementation #hibernate.cache.region.factory_class org.hibernate.cache.infinispan.InfinispanRegionFactory #hibernate.cache.region.factory_class org.hibernate.cache.infinispan.JndiInfinispanRegionFactory #hibernate.cache.region.factory_class org.hibernate.cache.internal.EhCacheRegionFactory #hibernate.cache.region.factory_class org.hibernate.cache.internal.SingletonEhCacheRegionFactory hibernate.cache.region.factory_class org.hibernate.cache.internal.NoCachingRegionFactory ## choose a custom query cache implementation #hibernate.cache.query_cache_factory ############ ### JNDI ### ############ ## specify a JNDI name for the SessionFactory #hibernate.session_factory_name hibernate/session_factory ## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction; ## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which ## is the best approach in an application server #file system #hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory #hibernate.jndi.url file:/ #WebSphere #hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory #hibernate.jndi.url iiop://localhost:900/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值