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

  • 相关阅读:
    算法----(1)冒泡排序
    淘宝爬虫
    爬虫_豆瓣电影top250 (正则表达式)
    爬虫_猫眼电影top100(正则表达式)
    Android 简单调用摄像头
    Android 简单天气预报
    思维模型
    This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you
    Android studio preview界面无法预览,报错render problem
    Android studio 3.1.2报错,no target device found
  • 原文地址:https://www.cnblogs.com/ligui989/p/3444505.html
Copyright © 2011-2022 走看看