Hibernate基础配置(一)

1 介绍MySQL的图形化客户端 SQL Manager 2007 Lite for MySSQL

 

2 hibernate.cfg.xml: hbm2ddl.auto

  <property name="hbm2ddl.auto">create</property> 表示如果数据库中没有表,会根据annotation或xxx.hbm.xml文件自动创建。

  <property name="hbm2ddl.auto">update</property> 表示如果程序中增加了一个字段,数据库中存在该表,会自动加上该字段。

  <property name="hbm2ddl.auto">create-drop</property> 表示在显式关闭SessionFactory时,将drop掉数据库schema。

  <property name="hbm2ddl.auto">validate</property> 表示创建好了表了,在往里面插数据或者做任何数据操作之前,都会自动检查数据库里面的表和我们的配置是不是对应得上。

  create比较常用,每次create会把数据丢失。

  a)先建表还是先建实体类

    实际共工作中,先建表,再生成类。建好数据库表后往往要对表做一些优化,比如说建索引、中间表、视图等等。用hibernate自动生成表,针对数据库优化的这些内容往往是不能自动生成的,所以实际工作中,往往是先建表再建实体类。

 

3.搭建Log4J日志环境,显示DDL语句

  hibernate用的日志接口是slf,可以用slf4j  nodep 、log4j 、jdk logging api 、apache commons-logging等来实现。hibernate3.3.2用的是slf4j nodep,但是用slf4j nodep来实现不是特别流行,所以换成log4j。

  我们去掉slf4j-nop-1.5.8.jar,加上log4j的实现log4j-1.2.15.jar.现在有了slf的api和log4j的实现,可是它们能不能自动对应起来呢?其实不行,它们中间需要一个转换器,把slf的接口转换成为log4j的接口,需要slf4j-log4j12-1.5.8.jar(此处应用了适配器模式)。使用log4j往往需要log4j的配置文件,log4j.propertise。这个文件在hibernate-distribution-3.3.2.GA/project/etc/log4j.propertiesf。复制到项目中,后台会打印出很多,可以将不想要的输出用#屏蔽掉。

  项目目录如下

  

4.搭建Junit环境

  加入Junit类库:Junit-4.7.jar

  将开发性的代码放在src目录下,将测试性的代码放在test目录下。要测试的那个类在哪个包下就在test下建什么包,然后建一个Junit test case。这里建TeacherTest.java

 

package hjj.lch.hibernate.model;

import static org.junit.Assert.*;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class TeacherTest {

    private static SessionFactory sf = null;
    
    @BeforeClass
    public static void beforeClass(){
        sf = new AnnotationConfiguration().configure().buildSessionFactory();
    }
    
    @Test
    public void testTeacherSave() {
        Teacher t = new Teacher(); 
        t.setId(1);
        t.setName("t1");
        t.setTitle("中级");
        
        Session session = sf.openSession();
        session.beginTransaction();
        session.save(t);
        session.getTransaction().commit();
        session.close();
    }

    @AfterClass
    public static void afterClass(){
        sf.close();
    }
}

 

在目录的hjj.lch.hibernate.model.TeacherTest.testTeacherSave()上右键junit test,测试没问题。Junit有一个bug,如一不小心在hibernate.cfg.xml里面某一个配置一不小心写错了,然后用Junit做测试,它不给你提示任何错误,就静悄悄的结束了,没有任何输出。这个bug有时候出,有时候不出。解决办法:在sf = new AnnotationConfiguration().configure().buildSessionFactory();这句话上加try catch语句块,也可以自己写个main方法,然后在main方法里面调用beforeClass(),在main方法里面执行这句话的时候,错误提示信息就会打印出来了。

 

5.hibernate.cfg.xml:show_sql    输出所有SQL语句到控制台. 有一个另外的选择是把org.hibernate.SQL这个log category设为debug

eg. true | false

 

6.hibernate.cfg.xml:format_sql   在log和console中打印出更漂亮的SQL。

取值 true | false 想知道到底打印成什么样?自己去测试一下。。嘿嘿

 

 

posted @ 2013-11-26 22:51  李鬼989  阅读(222)  评论(0编辑  收藏  举报