首页 > 代码库 > hibernate学习笔记_基础配置

hibernate学习笔记_基础配置

一.hibernate.cfg.xml: hbni2ddl.auto

二.搭建日志环境并配置显示DDL语句

我们使用slf接口,然后使用log4j的实现。

1、  首先引入log4j的jar包(log4j-1.2.14.jar),

2、  然后再引入slf4j实现LOG4J和适配器jar包(slf4j-log4j12-1.5.8.jar)

3、  最后创建log4j的配置文件(log4j.properties),并加以修改,只要保留

  log4j.logger.org.hibernate.tool.hbm2ddl=debug

三.搭建Junit环境

1、首先引入Junit 类库 jar包 (junit-4.8.1.jar)

2、在项目名上右键→new→Source Folder→输入名称→finish

3、注意,你对哪个包进行测试,你就在测试下建立和那个包相同的包

4、建立测试类,需要在测试的方法前面加入”@Test”

package com.bjsxt.hibernate.model;import static org.junit.Assert.*;import org.hibernate.HibernateException;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;    @BeforeClass    public static void beforeClass(){        try {            sf=new AnnotationConfiguration().configure().buildSessionFactory();        } catch (HibernateException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    @Test    public void testTeacherSave() {        Teacher t=new Teacher();        t.setId(3);        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();    }}


四.ehibernate.cfg.xml : show_sql

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

取值: true | false

五,hibernate.cfg.xml :format_sql

六,表名和类名不同,对表名进行配置

Annotation:使用 @Table(name=”tableName”) 进行注解

@Entity@Table(name="_Teacher")public class Teacher {    private int id;    private String name;    private String title;    private String money;    private Date birthDay;    private ZhiCheng zhiCheng;。。。。。}

 

七,字段名和属性相同

Annotation:默认为@Basic

注意:如果在成员属性没有加入任何注解,则默认在前面加入了@Basic

Xml中不用写column

八,字段名和属性名不同

Annotation:使用@Column(name=”columnName”)进行注解

@Column(name="_name")    public String getName() {        return name;    }

 

Xml:

<property name="name" column="_name"/> 

 

九,不需要(持久化)psersistence的字段

就是实体类的某个成员属性不需要存入数据库中

Annotation:使用@Transient 进行注解就可以了。

@Transient    public String getMoney() {        return money;    }    public void setMoney(String money) {        this.money = money;    }

 


Xml:不写(就是不需要对这个成员属性进行映射

十,映射日期与时间类型,指定时间精度

Annotation:使用@Temporal(value=http://www.mamicode.com/TemporalType)来注解表示日期和时间的注解

            其中TemporalType有三个值:TemporalType.TIMESTAMP 表示yyyy-MM-dd HH:mm:ss

                                     TemporalType.DATE      表示yyyy-MM-dd

                                     TemporalType.TIME      表示HH:mm:ss

@Temporal(TemporalType.DATE)//数据库中只存日期,不存时间    public Date getBirthDay() {        return birthDay;    }    public void setBirthDay(Date birthDay) {        this.birthDay = birthDay;    }

 

注意:当使用注解时,属性为value时,则这个属性名可以省略,例如:@Temporal(TemporalType)

Xml:使用type属性指定hibernate类型

<property name="birthDate" type="date"/>

 

注意:hibernate日期时间类型有:date, time, timestamp,当然您也可以使用Java包装类

十一,映射枚举类型

Annotation:使用@Enumerated(value=http://www.mamicode.com/EnumType)来注解表示此成员属性为枚举映射到数据库

        其中EnumType有二个值:①EnumType.STRING  表示直接将枚举名称存入数据库

                             ②EnumType.ORDINAL 表示将枚举所对应的数值存入数据库

@Enumerated(EnumType.STRING)//string 在数据库中映射成字符串,而oridinal会映射成int类型从0开始    public ZhiCheng getZhiCheng() {        return zhiCheng;    }    public void setZhiCheng(ZhiCheng zhiCheng) {        this.zhiCheng = zhiCheng;    }

 

Xml:映射非常的麻烦,先要定义自定义类型,然后再使用这个定义的类型……

总结:

package com.bjsxt.hibernate.model;import java.util.Date;import java.util.Enumeration;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.EnumType;import javax.persistence.Enumerated;import javax.persistence.Id;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;import javax.persistence.Transient;@Entity@Table(name="_Teacher")public class Teacher {    private int id;    private String name;    private String title;    private String money;    private Date birthDay;    private ZhiCheng zhiCheng;        @Id    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    @Column(name="_name")    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    @Transient    public String getMoney() {        return money;    }    public void setMoney(String money) {        this.money = money;    }    @Temporal(TemporalType.DATE)//数据库中只存日期,不存时间    public Date getBirthDay() {        return birthDay;    }    public void setBirthDay(Date birthDay) {        this.birthDay = birthDay;    }    @Enumerated(EnumType.STRING)//string 在数据库中映射成字符串,而oridinal会映射成int类型从0开始    public ZhiCheng getZhiCheng() {        return zhiCheng;    }    public void setZhiCheng(ZhiCheng zhiCheng) {        this.zhiCheng = zhiCheng;    }}

 

hibernate学习笔记_基础配置