拧巴人 发表于 2015-2-14 19:26

Log4j日志环境与JUnit测试环境的搭建

本章讲解hibernate的Log4j日志环境与JUnit测试环境的搭建1,概念补充2,hibernate.hbm2ddl.auto参数使用3,log4j日志系统配置4,搭建JUnit测试环境5,控制台SQL打印方式1,概念补充对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping):该技术主要用于实现程序对象到关系数据库数据的映射!hibernate就是一种ORM框架2,hibernate.hbm2ddl.auto参数使用(请读者自行测试效果)hibernate.cfg.xml 配置文件中配置以下参数的作用参数参数取值 validate | update | create | create-dropcreate:在在SessionFactory创建时,自动检查数据库结构,若配置的实体类在数据库中没有对应的表,则创建表;若有,则删除原先的表,再重新创建(导致数据丢失)。create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。update:常用,建立好数据库的前提下,第一次加载hibernate时根据model类自动建立表结构,以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会建立。validate :每次加载hibernate时,验证数据库表结构是否与映射的实体类相符合。实体类:package org.jacq.hibernate.model;import javax.persistence.Entity;import javax.persistence.Id;@Entitypublic class Dog {      private String name;      private int age;      public Dog() {      }      public Dog(String name, int age) {                this.name = name;                this.age = age;      }      @Id      public String getName() {                return name;      }      public void setName(String name) {                this.name = name;      }      public int getAge() {                return age;      }      public void setAge(int age) {                this.age = age;      }}配置3,log4j日志系统配置hibernate默认使用slf4j的日志实现方式,我们改为更常用的Log4j日志系统所需jar文件:apache-log4j-1.2.15.zip移除Jar文件:slf4j-nop-1.5.8.jar添加:apache-log4j-1.2.15/log4j-1.2.15.jar为了使slf4j日志接口与Log4j日志实现关联起来,还需要 slf4j-1.5.8 文件夹下的 slf4j-log4j12-1.5.8.jar使用Log4j来实现slf4j的接口规范是一种适配器设计模式的使用场景.添加配置文件log4j.properties到项目src下可以从 hibernate-distribution-3.3.2.GA 中搜索得到log4j的配置文件log4j.propertieslog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%nlog4j.rootLogger=warn, stdout#log4j.logger.org.hibernate.test=infolog4j.logger.org.hibernate.tool.hbm2ddl=debug这样hibernate会将创建删除表的SQL语句以及其他很多信息都输出到控制台,将上述hbm2ddl.auto参数改为create,进行测试控制台输出如下,可以看到里面包含了删除表,创建表的语句
4,搭建JUnit测试环境需要 junit4.7.zip引入jar文件:junit4.7junit-4.7.jar建立与src同级的目录test,并设置为测试目录,用于存放测试代码
测试:package org.jacq.hibernate.model;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import java.util.Date;public class EventTest {      private static SessionFactory sessionFactory = null;      @BeforeClass      public static void beforeClass(){                sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();      }      @Test      public void saveEvent(){                Event event = new Event(6L,"hellokitty",new Date());                /**               * session可以看做是Connection               * */                Session session = sessionFactory.openSession();                session.beginTransaction();                session.save(event);                session.getTransaction().commit();                session.close();      }      @AfterClass      public static void afterClass(){                sessionFactory.close();      }}
错误记录注释掉org.jacq.hibernate.model.Event类的getId方法的@Id注解,再执行出异常:org.hibernate.AnnotationException: No identifier specified for entity
5,控制台SQL打印方式因为在hibernate.cfg.xml配置文件中配置了所以保存数据时控制台输入语句添加了 format_sql 配置:格式化输出语句输出
页: [1]
查看完整版本: Log4j日志环境与JUnit测试环境的搭建