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 想知道到底打印成什么样?自己去测试一下。。嘿嘿