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()方法.
浙公网安备 33010602011771号