Log4j:java日志
添加jar包:
编写log4j.properties文件放入src目录中
#### direct messages to file hibernate.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=C:/Users/10640/java/hibernate.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout, file
log4j 日志级别 : fatal 致命错误 error 错误 warn 警告 info 信息 debug 调试信息 trace 堆栈信息 (由高到底顺序)文件中log4j.rootLogger的第一个参数
使用:
@Test
一对一的表关系
公司Company和地址Address的案例
一对一(外键)配置:需要单独指定一个字段为外键
一对一 (主键) 配置:不需要单独设置外键,主键ID就是外键
使用:
@Test
二级缓存(session销毁也有缓存)
一级缓存:session级别缓存,在一次请求中共享数据。(session销毁就没有缓存)
二级缓存:sessionFactory级别缓存,整个应用程序共享一个会话工厂,共享一个二级缓存。
应用场景:很少被修改,经常读取的数据
步骤:导包
配置hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 1、配置数据库连接的4个参数 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day1</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 是否显示sql语句 -->
<property name="show_sql">true</property>
<!-- 是否格式化sql语句 -->
<!--<property name="format_sql">true</property>-->
<!-- 是否自动提交事务 -->
<property name="hibernate.connection.autocommit">true</property>
<!-- hibernate.hbm2ddl.auto
配置映射文件与数据库表的关系
update:如果数据库有没表,自动帮你创表【常用】
如果hbm与数据表不一样,会更新
create:每次启动hibernate都帮你创建表
create-drop,每次启动hibernate都帮你创建表,执行完后删除表
validate:检验hbm文件,如果与数据库的字符不一至,就抛出异常【过掉】
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">2</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.timeout">5000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">false</property>
<!-- 配置开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 配置二级缓存实现,提供商-->
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<!-- 开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>
<!-- 2、配置JavaBean与表的映射文件 -->
<mapping resource="com/hibernate/domain/User.hbm.xml"/>
<mapping resource="com/hibernate/domain/Order.hbm.xml"/>
<mapping resource="com/hibernate/domain/Customer.hbm.xml"/>
<mapping resource="com/hibernate/domain/Student.hbm.xml"/>
<mapping resource="com/hibernate/domain/Course.hbm.xml"/>
<mapping resource="com/hibernate/domain/Company.hbm.xml"/>
<mapping resource="com/hibernate/domain/Address.hbm.xml"/>
<class-cache class="com.hibernate.domain.Customer" usage="read-only"></class-cache>
<!--<class-cache class="com.gyf.hibernate.domain.Order" usage="read-only"></class-cache>-->
<!-- 配置集合缓存 -->
<collection-cache collection="com.hibernate.domain.Customer.orders" usage="read-only"></collection-cache>
</session-factory>
</hibernate-configuration>
配置ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
测试:(三次查询语句相同,所以只执行一次语句)
查询缓存(三级缓存)
HQL相同语句可以缓存内容
开启查询缓存
<!-- 开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>
测试
时间戳