Hibernate 高级配置(数据库连接池和日志框架 Log4J)

数据库连接池配置

反问数据库,需要不断的创建和释放连接,假如访问量大的话,效率比较低级,服务器消耗大;
使用数据库连接池,我们可以根据实际项目的情况,定义连接池的连接个数,从而可以实现从连接池获取连
接,用户放回到连接池。从而有效的提高的系统的执行效率;
Hibernate 自带的连接池不是很好,有 bug;
推荐使用 C3P0,proxool 等

第一步:引入c3p0的jar包

第二步:

这里配置c3p0连接池,需要的jar包:

jar包位于hibernate压缩包的:hibernate-release-4.3.5.Final\lib\optional\c3p0

第三步:

1)在hibernate.properties中配置:

2)在hibernate.cfg.xml中配置:

<hibernate-configuration>

    <session-factory>

        <!--数据库连接设置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
       
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>

        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        
        <!-- 最小连接数 --> 
         <property name="c3p0.min_size">7</property> 
         <!-- 最大连接数 -->   
         <property name="c3p0.max_size">42</property> 
         <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->  
         <property name="c3p0.timeout">1800</property> 
         <!-- 最大的PreparedStatement的数量 -->   
         <property name="c3p0.max_statements">50</property> 
        
        <mapping resource="com/cy/model/Student.hbm.xml"/>
    </session-factory>

</hibernate-configuration>

第二节:配置日志框架 Log4J

Log4J 作为一个开源的优秀日志框架,被广泛使用,Hibernate4 必须包中直接支持 Log4J 日志框架;我们只需
要引入 Log4j jar 包,即可使用

hibernate默认使用的是简单日志框架;

简单日志框架里面也有使用log4j的整合包,这里使用log4j;

需要的jar包:

下面是项目中的简单使用:

src/log4j.properties:

//此句为将等级为INFO的日志信息输出到appender1,appender2这两个目的地

等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO、WARN、ERROR的log信息,而DEBUG信息不会被显示,这里定义等级为debug
log4j.rootLogger=debug,appender1,appender2


//定义输出端为控制台和D:/logFile.txt

log4j.appender.appender1=org.apache.log4j.ConsoleAppender 

log4j.appender.appender2=org.apache.log4j.FileAppender 
log4j.appender.appender2.File=D:/logFile.txt

//此句为定义名为stdout的输出端的layout是TTCCLayout类型(包含日志产生的时间、线程、类别等等信息)
还有其它的类型org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

 
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout  

StudentTest.java:

package com.cy.service;

import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.cy.model.Student;
import com.cy.util.HibernateUtil;

public class StudentTest {

    private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
    private Session session;

    //

在要输出日志的类中加入相关语句:

定义属性:static Logger logger = Logger.getLogger(LogDemo.class); //LogDemo为相关的类

在相应的方法中:

if (logger.isDebugEnabled()){

logger.debug(“System …..”);

}

    

    private Logger logger = Logger.getLogger(StudentTest.class);
    
    @Before
    public void setUp() throws Exception {
        session=sessionFactory.openSession(); 
        session.beginTransaction();
    }

    @After
    public void tearDown() throws Exception {
         session.getTransaction().commit();
         session.close();
    }
    
    @Test
    public void testSQLQuery(){
        String sql = "select * from t_student";
        Query query = session.createSQLQuery(sql).addEntity(Student.class);    //查询student,绑定Student实体
        List<Student> studentList = query.list();
        for(Student s: studentList){
            System.out.println(s);
        }
        
        logger.debug("这是一个debug信息");
        logger.info("这是一个info信息");
        logger.error("这是一个error信息");
    }

}

如果输出等级为info的话,只打印这是一个info信息和这是一个error信息,不打印这是一个debug信息这句话

执行testSQLQuery后,可以看到console:

同时D:\logFile.txt也记录了相关的日志;

猜你喜欢

转载自blog.csdn.net/qq_40135955/article/details/89047215