hibernate.cfg.xml中
hbm2ddl.auto
1.validate
创建时校验
2.update
xml或annotation和数据库中表不同时,hibernate帮助更新数据库
3. create (常用)
hibernate帮助创建表(会覆盖数据)
4. create-drop
create-drop:当session关闭时,hibernate会删除表
搭建日志环境,显示ddl语句
slf4j是日志的框架,可以用slf4J自己的实现、log4j、jdk logging api、apache commons-logging去实现
需要的jar包及对应pom.xml配置:
1. slf4j-api-1.5.8.jar 这个是hibernate自带的jar
2. 需要dom4j的实现类,因为slf4j本身的实现类不是很流行
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
3.需要将slf4j-api和dom4j实现类连接起来的jar,该场景属于适配器模式
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
4.把log4j.properties添加到maven-resouce文件中
log4j.properties例子文件到哪里取:可官网下载
hibernate-distribution-3.3.2.GA.jar包,在目录\project\etc中可找例子
5.可正常打印日志
show_sql
format_sql
类名和表明(即不相同时)怎样对应映射
如果table的name在idea中报错,则要在idea中把数据源配置上
在annotation中
@Entity
@Table(name="_Teacher")
public class Teacher {...}
在xml文件中
<class name="Student" table="_Student">
字段名和属性名相同
xml中,如果不配置字段,则该字段和数据表不存在对应关系
annotation方便一些,只需要给主键配置@Id,其他的字段默认映射(相当于字段名和数据库名字一样)
可以参考文档中的说明:
hibernate-annotations-3.4.0.GA\doc\reference\zh_cn\html
字段名和属性名不同
在annotation中
@Column(name = "_name")
public String getName() {
return name;
}
在xml文件中
<property name="name" column="_name"/>
不需要持久化的字段
在annotation中
@Transient
public String getYouWifeName() {
return youWifeName;
}
在xml文件中
不写该字段就行
时间和日期类型
对于Date类型字段
annotation中,默认既保存日期又保存时间,若想只保存其中一个,可
@Temporal
xml中
在properties中配置type即可,大多数情况没必要配hibernate的type,默认即可
映射枚举
使用annotation比较简单
public enum ZhiCheng {
A,B,C;
}
// @Enumerated(EnumType.STRING) 数据库中存A(当作字符串)
@Enumerated(EnumType.ORDINAL) // 数据库中存0(当作数组下标值)
public ZhiCheng getZhicheng() {
return zhicheng;
}
自定义类型(不重要)
字段的位置
annotation写在get方法上较好,写在field上会破坏java面向对象的封装性