一.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; } }