使用工具:IntelliJ IDEA 2017.2.5 x64
MySql-8.0.1
hibernate-release-5.3.1.Final
导入的jar包:
以及连接MySql的jdbc包、和log4j
hibernate配置文件:
<mapping class="com.entity.ItemsEntity"/>
<mapping resource="com/entity/ItemsEntity.hbm.xml"/>
<mapping class="com.entity.OrderdetailEntity"/>
<mapping resource="com/entity/OrderdetailEntity.hbm.xml"/>
<mapping class="com.entity.OrdersEntity"/>
<mapping resource="com/entity/OrdersEntity.hbm.xml"/>
<mapping class="com.entity.UserEntity"/>
<mapping resource="com/entity/UserEntity.hbm.xml"/>
</session-factory>
其中的解释
Hibernate配置文件
hibernate.cfg.xml的常用属性
1.JDBC连接属性
2.C3P0数据库连接池属性
3.其他
练习:C3P0数据库连接池属性
第一步:导入jar包:
hibernate-release-5.2.12.Final\lib\optional\c3p0
第二步:加入Hibernate配置
-hibernate.c3p0.max_size:数据库连接池的最大连接数
-hibernate.c3p0.min_size:数据库连接池的最小连接数
-hibernate.c3p0.acquire_increment:当数据库连接池中的连接耗尽时,同一时刻获取多少个数据库连接
-hibernate.c3p0.timeout:数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁
-hibernate.c3p0.idle_test_period:表示连接池检测线程多长时间检测一次池内的所有连接对象是否超时。连接池本身不会把自己从连接池中移除,而是专门有有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次被使用时间和当前时间差来和timeout做对比,进而决定是否销毁这个连接对象。
-hibernate.c3p0.max_statements:缓存Statement对象的数量
Log4j的配置文件
log4j.rootCategory=INFO, stdout , R
#标准输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#输出格式
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
#文件路径
log4j.appender.R.File=learnHibernate.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.logger.com.neusoft=DEBUG
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
log4j.logger.org.displaytag=ERROR
log4j.logger.org.springframework=DEBUG
log4j.logger.com.ibatis.db=WARN
log4j.logger.org.apache.velocity=FATAL
log4j.logger.com.canoo.webtest=WARN
#hibernate的配置
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG
#log4j.logger.org.logicalcobwebs=WARN
然后idea连接数据库learn,通过持久化工具生成hibernate的表文件类和xml映射文件。
对hibernate进行封装
package com.utils;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
/**
* @author hyp
* Project name is LearnHibernate
* Include in com.utils
* hyp create at 2018/7/25
**/
public class HibernateUtil {
public static final SessionFactory sessionFactory;
//创建sessionFactory
static
{
try
{
// 采用默认的hibernate.cfg.xml来启动一个Configuration的实例
Configuration cfg = new Configuration()
.configure();
// 以Configuration实例来创建SessionFactory实例
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
sessionFactory = cfg.buildSessionFactory(serviceRegistry);
}
catch (Throwable ex)
{
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
// ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步
public static final ThreadLocal<Session> session
= new ThreadLocal<Session>();
//创建Session
public static Session currentSession()
throws HibernateException
{
//通过线程对象.get()方法安全创建Session
Session s = session.get();
// 如果该线程还没有Session,则创建一个新的Session
if (s == null)
{
s = sessionFactory.openSession();
// 将获得的Session变量存储在ThreadLocal变量session里
session.set(s);
}
return s;
}
//关闭Session
public static void closeSession()
throws HibernateException
{
Session s = session.get();
if (s != null) {
s.close();
}
session.set(null);
}
}
在接下来是创建DAO类,并对DAO类进行测试。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章