攻城狮在路上(壹) Hibernate(十五)--- Hibernate的高级配置
一、配置数据库连接池:
1、使用默认的数据库连接池:
Hibernate提供了默认了数据库连接池,它的实现类为DriverManegerConnectionProvider,如果在Hibernate的配置文件中没有明确配置任何连接池,Hibernate就会使用这个默认的连接池。
注意:在开发正式的商业软件产品时,不能使用这个连接池,因为它不是成熟的专业连接池产品,缺乏响应大批量并发请求及荣错的能力。
2、使用配置文件指定的数据库连接池:
hibernate.properties配置C3P0连接池的实例代码:
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=300
hibernate.c3p0.max_statements=50
hibernate.c3p0.idle_test_period=3000
c3p0的配置选项:
| 配置选项 | 描述 |
| min_size | 在连接池中可用的数据库连接的最少数目 |
| max_size | 在连接池中可用的数据库连接的最大数目 |
| timeout | 设定数据库连接的过期时间,以秒为单位。如果连接池中的某个数据库连接处于空闲状态的时间超过timeout时间,就会从连接池中清除。 |
| max_statements | 可以被缓存的PreparedStatement实例的最大数目。缓存适量的PreparedStatement实例,能够大大提高Hibernate的性能。 |
| idle_test_period | 在使数据库连接自动生效之前处于空闲状态的时间,以秒为单位。 |
不同的连接池有不同的配置选项,在org.hibernate.cfg.Enviroment类的JavaDoc文档中,描述了当前Hibernate支撑的各种连接池的配置选项。
如果使用用户提供的其他类型的连接池,首先要为这个连接池创建ConnectionProvider实现类,然后在配置文件中的hibernate.connection.provider_class=xxx显式指定。
3、从容器中获取数据源:
在受管理环境中,容器负责构造数据源,即javax.sql.DataSource实例,然后发布为JNDI资源。
在不受管理的环境中,有些Servlet容器,如tomcat,也能负责构造数据源,并发布weJNDI资源。
以tomcat为例,配置分为两步:
A、在tomcat的server.xml中增加配置:
<Resuorce name="jdbc/SAMPLEDB"
auth="Container/Application"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="1234"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/SAMPLEDB?autoReconnect=true"/>
B、在hibernate.properties中配置:
hibernate.connection.datasource=java:comp/env/jdbc/SAMPLEDB
4、有Java应用本身提供数据库连接:
使用SessionFactory.openSession(Connection conn);来实现。
如果Session使用的是Java应用提供的Connection实例,那么Hibernate的二级缓存就会失效,Hibernate不能对同一个数据库事务执行的多条SQL语句进行跟踪。
二、配置事务类型:暂不做理解。
三、把SessionFactory与JNDI绑定:暂不做理解。
四、配置日志:暂不做笔记。
五、使用XML格式的配置文件:
在hibernate.cfg.xml中配置,实例代码:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory >
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/sampledb
</property>
<property name="connection.username">
root
</property>
<property name="connection.password">
1234
</property> <property name="show_sql">true</property> <property name="use_sql_comments">
true
</property> <mapping resource="mypack/Customer.hbm.xml" />
<mapping resource="mypack/Order.hbm.xml" />
</session-factory>
</hibernate-configuration>
攻城狮在路上(壹) Hibernate(十五)--- Hibernate的高级配置的更多相关文章
- 攻城狮在路上(壹) Hibernate(十八)--- 管理Hibernate的缓存
一般Session的缓存被称为Hibernate的第一级缓存,SessionFactory的外置缓存是一个可配置的缓存插件,称为Hibernate的第二级缓存.一.缓存的基本原理: 1.持久化层的缓存 ...
- 攻城狮在路上(壹) Hibernate(十六)--- Hibernate声明数据库事务
一.数据库事务的概念: 数据库的ACID特征:Atomic.Consistency.Isolation.Durability.原子性.一致性.隔离性.持久性.不同的隔离级别引发的不同问题. 事务的AC ...
- 攻城狮在路上(壹) Hibernate(九)--- Hibernate的映射类型
Hibernate采用映射类型作为Java类型和SQL类型的桥梁,对应type属性.分为两种:内置映射类型和客户化映射类型.一.内置映射类型: 1.Java基本类型的Hibernate映射类型: Ja ...
- 攻城狮在路上(壹) Hibernate(七)--- 通过Hibernate操纵对象(下)
一.与触发器协同工作: 当Hibernate与数据库的触发器协同工作时,会出现以下两类问题: 1.触发器使Session缓存中的数据和数据库中的不一致: 出现此问题的原因是触发器运行在数据库内,它执行 ...
- 攻城狮在路上(壹) Hibernate(二)--- 第一个hibernate程序
1.直接通过JDBC API持久化实体域对象: A.java.sql常用接口和类: DriverManager:驱动程序管理器,负责创建数据库连接. Connection:代表数据库连接. State ...
- 攻城狮在路上(壹) Hibernate(十四)--- Hibernate的检索方式(下)
本节介绍HQL和QBC的高级用法:各种连接查询.投影查询.报表查询.动态查询.集合过滤和子查询等.另外将归纳优化查询程序代码,从而提高查询性能的各种技巧.一.连接查询: HQL与QBC支持的各种连接类 ...
- 攻城狮在路上(壹) Hibernate(十二)--- Hibernate的检索策略
本文依旧以Customer类和Order类进行说明.一.引言: Hibernate检索Customer对象时立即检索与之关联的Order对象,这种检索策略为立即检索策略.立即检索策略存在两大不足: A ...
- 攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合
一.映射Set(集):未排序,无重复. 实例代码: <set name="images" table="IMAGES" lazy="true&q ...
- 攻城狮在路上(壹) Hibernate(十三)--- Hibernate的检索方式(上)
Hibernate提供了以下几种检索对象的方式: A.导航对象图检索方式. B.OID检索方式.Session.get() load(); C.HQL检索方式.Query. D.QBC检索方式.Que ...
随机推荐
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- php使用文件缓存
使用php读取mysql中的数据很简单,数据量不大的时候,mysql的性能还是不错的.但是有些查询可能比较耗时,这时可以把查询出的结果,缓存起来,减轻mysql的查询压力. 缓存的方法有几种:使用me ...
- div里包含img底部必定多出空白的解决办法
研究了很久,自己写了js代码都解决不了.最后还是靠万能的网友解决了这一问题! 问题:adding.margin.border都设为0,无效.怎么样都多出3px. 解决方案: 1.设置div{ font ...
- Python自动化之sqlalchemy复合外键
复合外键用法 metadata = MetaData(engine) classedu = Table('classedu', metadata, # Column('qq', BigInteger, ...
- 【GoLang】golang 中可变参数的 定义、传递 示例
支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表的函数. package main import "fmt" // 这个函数 ...
- [20160731][转]JAVA当中变量什么时候需要初始化
1. 对于类的成员变量,不管程序有没有显式的进行初始化,Java虚拟机都会先自动给它初始化为默认值. 默认值如下: Boolean false ...
- pip 安装命令
pip官网文档 https://pip.pypa.io/en/latest/reference/pip.html 若没有将c:\Python27\Scripts加入到path环境变量,可以在c:\Py ...
- [Linux]非外网环境下配置lnmp心得
1.安装gcc编译器 基本所有编译安装包都需要gcc编译器,而且编译安装gcc也需要一个编译器,这是一个悖论.所以,这里只能寻求rpm包安装.但是rpm包需要匹配特定的操作系统内核,所以没有一个通用的 ...
- 21. javacript高级程序设计-Ajax与Comet
1. Ajax与Comet 1.1 XMLHttpRequest对象 IE5是第一款引入XHR对象的浏览器,IE5中是通过MSXML库中的一个ActiveX对象实现的.因此在IE中可能存在MSXML2 ...
- Linux 命令执行结果输出到屏幕的同时写入到文件中
tee命令可以做到这一点: 例:ls -al /home | tee log 就可以把命令输出的内容显示在屏幕上的同时也输出至文件log.