7.表名和类名不同,对表名进行配置
用annotation时,实体类名和数据库表名不同时,可以用@Table(name="_teacher")注明 ,当映射到Teacher这个类时就会去找数据库中_teacher这个表
用xml文件,<class name="Student" table="_student">用table指明表名
8.字段名和属性名相同
默认@Basic,就是说字段上没写任何注解时,相当于加了@Basic这个注解
9.字段名和属性名不同
用annotation时,用@Column(name="_name")指定对应的字段名
在xml里面,用 <property name="name" column="column_name"></property>
10.不需要持久化的字段
使用annotation时,用@Transient注明,这样就不会存到数据库表里面去了
在xml里面就不用写进去了
11.时间和日期类型,指定时间精度
在java类里面定义一个时间类型往往用Date类型,包括了日期和时间。在数据库表里,默认的会存为datetime类型,日期和时间都保存了。如果只想保存日期或者只想保存时间,可以使用注解@Temporal(TemporalType.DATE)。在数据库中,表示时间类型的数据有DATE, TIME, 和 TIMESTAMP三种精度(即单纯的日期,时间,或者两者兼备). 可使用@Temporal注解来调整精度。学习的时候可以通过查文档与实际操作结合。
在xml中,写在property里面,用type="TIME"、type="DATE"、type="TIMESTAMP"。
Hibernate内置映射类型
Hibernate映射类型 | Java类型 | 标准SQL类型 | 大小 |
integer/int | java.lang.Integer/int | INTEGER | 4字节 |
long | java.lang.Long/long | BIGINT | 8字节 |
short | java.lang.Short/short | SMALLINT | 2字节 |
byte | java.lang.Byte/byte | TINYINT | 1字节 |
float | java.lang.Float/float | FLOAT | 4字节 |
double | java.lang.Double/double | DOUBLE | 8字节 |
big_decimal | java.math.BigDecimal | NUMERIC | |
character | java.lang.Character/java.lang.String/char | CHAR(1) | 定长字符 |
string | java.lang.String | VARCHAR | 变长字符 |
boolean/ yes_no/true_false | java.lang.Boolean/Boolean | BIT | 布尔类型 |
date | java.util.Date/java.sql.Date | DATE | 日期 |
timestamp | java.util.Date/java.util.Timestamp | TIMESTAMP | 日期 |
calendar | java.util.Calendar | TIMESTAMP | 日期 |
calendar_date | java.util.Calendar | DATE | 日期 |
binary | byte[] | BLOB |
BLOB |
text | java.lang.String | TEXT | CLOB |
serializable | 实现java.io.Serializablej接口的任意Java类 | BLOB | BLOB |
clob | java.sql.Clob | CLOB | CLOB |
blob | java.sql.Blob | BLOB | BLOB |
class | java.lang.Class | VARCHAR | 定长字符 |
locale | java.util.Locale | VARCHAR | 定长字符 |
timezone | java.util.TimeZone | VARCHAR | 定长字符 |
currency | java.util.Currency | VARCHAR | 定长字符 |
在大多数情况下都没有必要指定类型,由hibernate自动默认帮我们实现就可以了。
12.映射枚举类型
在annotation中用@Enumerated(EnumType.ORDINAL)存的是下标值或@Enumerated(EnumType.STRING)存的是字符串
xml中使用比较麻烦
13.字段映射的位置
有人放在field前面,也有人放在get方法前面,为了不破坏java的封装性,我们放在get方法前面。
保持field与get/set方法一致。