java缓存_Java的学习(31)hibernate日志 二级缓存

Log4j:java日志

添加jar包:

7311e7a4a44cd247aef80a742ce121f6.png

编写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的案例

86313a6cd2fd31d4aa78ba996c264763.png

274b860d8e07a264858137d1d8f6628b.png

一对一(外键)配置:需要单独指定一个字段为外键

caf86ed12d0de645abc822c08b8c7cdb.png

a75a7f1cff1f9454083c804b19a11081.png

一对一 (主键) 配置:不需要单独设置外键,主键ID就是外键

5b036a92b938e65b6147e2e46d68c5df.png

d7d47382871b715f15673cd2578df291.png

使用:

@Test
	

二级缓存(session销毁也有缓存)

一级缓存:session级别缓存,在一次请求中共享数据。(session销毁就没有缓存)

二级缓存:sessionFactory级别缓存,整个应用程序共享一个会话工厂共享一个二级缓存。

应用场景:很少被修改,经常读取的数据

步骤:导包

b056864e338762a8600ddcd1f0f4ccb3.png

配置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>

测试:(三次查询语句相同,所以只执行一次语句)

399ca3fd8e7ff145a0b98d50d5612c71.png

查询缓存(三级缓存)

HQL相同语句可以缓存内容

开启查询缓存

<!-- 开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>

测试

14fa39b804226465c76b5e8727d7e807.png

时间戳

fc26793cabc64b97cb016ea3a6fd3b06.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值