我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > Log4j日志环境与JUnit测试环境的搭建
总共48086条微博

动态微博

查看: 1252|回复: 0

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

[复制链接]

279

主题

41

听众

689

金钱

版主

该用户从未签到

跳转到指定楼层
楼主
发表于 2015-02-14 19:26:52 |只看该作者 |倒序浏览
本章讲解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-drop

create:在在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.properties

log4j.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,进行测试

控制台输出如下,可以看到里面包含了删除表,创建表的语句

! K" p" [- q9 l8 {
4,搭建JUnit测试环境

需要 junit4.7.zip

引入jar文件:junit4.7junit-4.7.jar

建立与src同级的目录test,并设置为测试目录,用于存放测试代码

2 \- J  z- l9 T3 Z

测试:

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();        }}


! b1 A9 ~' v' Y. }) l

错误记录

注释掉org.jacq.hibernate.model.Event类的getId方法的@Id注解,再执行

出异常:org.hibernate.AnnotationException: No identifier specified for entity

4 x$ f) s/ L& M9 [; |& E  ~5 X
5,控制台SQL打印方式

因为在hibernate.cfg.xml配置文件中配置了

所以保存数据时控制台输入语句

添加了 format_sql 配置:格式化输出语句

输出

, `" A3 D; g1 X

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表