1.Hibernate.cfg.xml:hbm2ddl.auto(用的比较多是create)
- Create 自动在数据库创建表
- Update 根据实体类更新表结构
- create-drop关闭SessionFactory 会把数据库创建好的表给删掉
- validate 对数据操作之前会检查表的结构是否与配置文件是否匹配
2.先建表还是先建类?先建表
3.搭建日志环境并配置显示DDL语句
- 问题? 控制台只显示插入的sql语句 未显示建表sql
- 日志框架 slf
- Hibernate 3.3.2所使用的slf 接口定义了一系列规范
- 具体的实现有很多种 1.slf4j 2.log4j 3.jdk logging api 4.appche commons-logging
- 用的较多log4j 可以用slf接口 log4j来实现( slf4j与log4j的关系:slf4j像是一个大管家,可以管理许多的日志框架,log4j是其中之一)
步骤:
- 添加slf4j-log4j12-1.5.5.jar包实现 slf4j与log4j之间的对接
- 添加log4j jar包 log4j-1.2.15.jar
- 编写Log4j配件文件 (API中复制)路径hibernate-distribution-3.3.2.GA\project\etc
- log4j.logger.org.hibernate.tool.hbm2ddl=debug可以在控制台把建表以及其他相关信息打印出来
4.hibernate.cfg.xml : show_sql 输出所有SQL语句到控制台
5.hibernate.cfg.xml :format_sql在log和console中打印出更漂亮的SQL
<!-- 格式化显示输出sql -->
<property name="format_sql">true</property>
6.表名和类名不同,对表名进行配置
- Annotation:@Table(name=”表名”)
- Xml:查询参考文档
7.字段名和属性相同
- Annotation:默认为@Basic,写不写都可以
- Xml中不用写column
8.字段名和属性不同
- Annotation:@Column( name=”列名”)(写在字段get方法上)
- Xml: 询参考文档
9.不需要persistence的字段
- Annotation:@Transient 定义不写入数据库,属性透明
- Xml不写
10.映射日期与时间类型,指定时间精度
a) Annotation:@Temporal(参数) 参数有3种 只显示时间,只显示日期,时间日期都显示
//@Temporal(TemporalType.DATE) 只显示日期
//@Temporal(TemporalType.TIME) 只显示时间
//@Temporal(TemporalType.TIMESTAMP) 显示日期与时间
b) xml:指定 type
<class name="Teacher" table="Teacher" >
<id name="id" column="id"></id>
<property name="name" type="time" />
</class>
11.映射枚举类型( 比较少用可以不会)
a)Annotation:
@Enumerated(EnumType.STRING) 字符串枚举类型
@Enumerated(EnumType.ORDINAL) 数序(数字)枚举类型(数据库存枚举的下标)
b) Xml:相当麻烦