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=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=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;
    }
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。