zoukankan      html  css  js  c++  java
  • 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 想知道到底打印成什么样?自己去测试一下。。嘿嘿

  • 相关阅读:
    windows 创建python独立开发环境
    sql多列排序
    mysql 导入sql脚本中文乱码问题
    廖雪峰Python教学课后作业---datetime
    poj 1004:Financial Management(水题,求平均数)
    【POJ水题完成表】
    poj 1003:Hangover(水题,数学模拟)
    ytu 2558: 游起来吧!超妹!(水题,趣味数学题)
    poj 1005:I Think I Need a Houseboat(水题,模拟)
    hdu 2393:Higher Math(计算几何,水题)
  • 原文地址:https://www.cnblogs.com/ligui989/p/3444505.html
Copyright © 2011-2022 走看看