zoukankan      html  css  js  c++  java
  • Hibernate学习11——Hibernate 高级配置(连接池、log4j)

    第一节:配置数据库连接池                                      

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

    jar包位于hibernate压缩包的:hibernate-release-4.3.5.Finalliboptionalc3p0

    文档中介绍了两种配置方式:

    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>

    测试代码:

    StudentTest.java:

    @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);
            }
        }
    View Code

    hibernate.cfg.xml:

    <?xml version='1.0' encoding='utf-8'?>
    <!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>
    
            <!--数据库连接设置 -->
            <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>
    View Code

    执行testSQLQuery,看到console启动打印c3p0相关信息:

    如果没有c3p0-0.9.2.1.jar,就会报错;
     
     
    第二节:配置日志框架Log4J                                              

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

    需要的jar包:

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

    src/log4j.properties:

    log4j.rootLogger=debug,appender1,appender2
    
    log4j.appender.appender1=org.apache.log4j.ConsoleAppender 
    
    log4j.appender.appender2=org.apache.log4j.FileAppender 
    log4j.appender.appender2.File=D:/logFile.txt
     
    log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
    log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout  
    View Code

    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;
        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信息");
        }
    
    }
    View Code

    执行testSQLQuery后,可以看到console:

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

  • 相关阅读:
    c++获取线程id
    一个基于c++的log库
    防止socket程序重启等待2MSL时间
    c++头文件循环引用
    Myeclipse 8.5 优化设置
    来道题 求解释
    MyEclipse常用设置笔记
    Ubuntu 学习笔记
    Linux 下常用命令
    Oracle 学习笔记 常用查询命令篇
  • 原文地址:https://www.cnblogs.com/tenWood/p/7259364.html
Copyright © 2011-2022 走看看