Hibernate---基础配置

hibernate.cfg.xml里可以设置一个值显示更详细的sql语句:

<property name="format_sql">true</property>
  • 表明和类名不同的时候, 需要对表名进行配置

Annotation的情况:

1. Teacher.java  , 加@Table(name="--")

@Entity
@Table(name="_Teacher")

运行 junit自动生成 _teacher这个表

 

XML的情况:

1. 修改配置文件Student.hbm.xml:

<class name="Student" table="_student">

StudentTest.java, 内容如下:

package com.bjsxt.hibernate.model;

import static org.junit.Assert.*;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class StudentTest {
	private static SessionFactory sf=null;
	@BeforeClass
	public static void beforeClass(){
		sf=new AnnotationConfiguration().configure().buildSessionFactory();
	}
	@Test
	public void testStudentSave() {
		Student s =new Student();
		s.setId(4);
		s.setName("wdfd");
		s.setAge(30);
		
		Session session =  sf.openSession();
		session.beginTransaction();
		session.save(s);
		session.getTransaction().commit();
		session.close();
		sf.close();
	}
	@AfterClass
	public static void afterClass(){
		sf.close();
	}

}

 

  • 如果是字段名和属性名不同的话:

Annotation方式:

1. 在Teacher.java里加入如下信息 @Column(name="--")

@Column(name="_name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

XML方式:

1. 修改配置文件Student.hbm.xml:

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

  

  • 如果类里有个属性不想存在数据库里

Annotation方式: 在类里 该属性get方法之前 加@Transient

XML方式:  直接不写

  • 映射日期与时间类型

Annotation方式:

1. 在类里 添加一个Date类型属性,并生成get set方法:

private Date birthDate;
	
	public Date getBirthDate() {
		return birthDate;
	}
	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}

2. 在TeacherTest里写入一行:

t.setBirthDate(new Date());

结果:  2016-04-19 16:15:54

我们只想要年月日, 只需要加入@Temporal(TemporalType.DATE)

XML方式:  指定type, 很麻烦

 

  • 映射枚举类型:

Annotation方式: @Enumerated(EnumType.STRING)

1. 在Teacher.java同目录下新建一个Enum: Zhicheng.java, 内容如下:

package com.bjsxt.hibernate.model;

public enum Zhicheng {
	A,B,C
}

2. 在 Teacher.java里加入字段:

private Zhicheng zc;
	@Enumerated(EnumType.STRING)
	public Zhicheng getZc() {
		return zc;
	}
	public void setZc(Zhicheng zc) {
		this.zc = zc;
	}

3. 在TeacherTest.Java里加入:

t.setZc(Zhicheng.A);

运行出来的_teacher表里有个zc, 值为A

如果用 @Enumerated(EnumType.STRING) , zc的值为0.

 

junit有个bug, 就是在@beforeclass里出现异常的时候错误不会报出来, 会吞掉,

解决方法1: @beforeclass加try..catch.

解决方法2:在test方法里写个main方法,调用beforeClass()方法.

posted @ 2016-04-20 13:16  wujixing909  阅读(139)  评论(0编辑  收藏  举报