如果javabean类名与DB表名不同时:
@Entity
@Table(name="DB表名")
public class Teacher{
.....
}
XML修改方式:
<class name="Teacher" table="DB数据表名">
-----------------------------------------
对比:
如果XML中不配置<property>则该字段不做映射
Annotation中,默认都做映射
只需指明@Id 主键
默认属性名前是:@Basic
@Basic //默认都是Basic 可不写
public String getName()
{
return name;
}
如果字段(属性)名与列名不同:
XML修改:
<property name="name" column="列名"></property>
Annotation方式:
@Column(name="s_title")
public String getTitle() {
return
title;
}
这些注解都写在get()方法前,导包要javax.persistent下
因为是符合JPA标准的Annotation
-----------------------------------------
Annotation javaBean中,如果不想持久化某个属性:
@Transient //不持久化该属性
public String getYourWifeName()
{
return yourWifeName;
}
XML中则是不写该属性的<property>
-----------------------------------------
保存日期类型属性时:(并不多)
@Temporal(TemporalType.DATE)
public Date getBirthday()
{
return birthday;
}
TemporalType.DATE只保存日期
如果不指定@Temporal 则DB表字段类型为DATETIME
指定为TemporalType.DATE后,DB字段类型为DATE类型,只存日期
XML实现:
<property name="birthday" type="date" > 或
<property name="birthday" type="time" >
-----------------------------------------
当属性有枚举类型时:
使用XML映射Enum非常麻烦,去问谷老师,搜“Hibernate映射枚举类型”
Annotation配置:
@Enumerated(EnumType.STRING) //保存enum元素的值对应varchar
public ZhiCheng
getZhiCheng() {
return zhiCheng;
}
EnumType.ORDINAL是保存枚举元素的索引位置,对应数据库中integer(number)
-----------------------------------------
字段映射的位置:
注解写在Field前还是get()方法前?
都可以
如果写在Field前,则破坏了OOP的封装性,private成员不可以随意访问
大多数写在get()方法前
-----------------------------------------