Hibernate的基础配置
1)MySQL客户端的工具使用
图形界面:
<!-- 写update只是更新操作,也可以写create, 这样写create的话程序运行的时候就会把数据库里的内容全部删除并且重新创建,当然,前提是数据库必须存在,因为hibernate只会创建表结构, 不会创建数据库,如果指定的数据库不存在,hibernate则会抛出异常 --> <property name="hbm2ddl.auto">update</property> |
在做分析和设计的时候:先建立表结构,在建立类,类和类之间是有关系的,关系体现在方法上面。
2) 搭建日志环境显示DDL语句
日志大搭建在上文已经有解决方案了。
<property name="show_sql">true</property> 显示输出SQL语句 <property name="format_sql">true</property> |
显示输出SQL格式 |
3)字段和属性的对应
注解:都需要位于javax.persistence.*;可以使用@Entity
A)表名和类名不同,对类名进行配置
表名和类中定义的名称不同使用@Table(name="table_name")
private String user_id; //@使用注解 annotation @Entity @Table(name="admin_log") public class Ith_Admin_Log { } |
B)字段名和属性相同
C)字段名和属性不同
字段名和表中的字段名不同使用@Column(name="xxx"),不用写@column 与默认的@Basic效果一样
Xml中不用写 column
private String user_id; @Column(name="add_user") public String getUser_id() { return user_id; } public void setUser_id(String user_id) { this.user_id = user_id; } |
D)不需要持久化字段:@Transient (transient)透明的
定义@transient注解属性是透明的,数据库无需知道定义
注解使用日期可以使用@Temportal(TemportalType.DATE)
Hibernate annotation字段映射位置,应该放在get上面
为什么不加属性上面。因为属性本身就是私有的,私有的本身就不需要别人调用。
Annotation:@Temporal(参数) 参数有3种 只显示时间,只显示日期,时间日期都显示 //@Temporal(TemporalType.DATE) 只显示日期 //@Temporal(TemporalType.TIME) 只显示时间 //@Temporal(TemporalType.TIMESTAMP) 显示日期与时间 Xml:指定 type <class name="Teacher" table="Teacher" > <id name="id" column="id"></id> <property name="name" type="time" /> </class> |
private Date add_date; @Temporal(TemporalType.DATE) public Date getAdd_date() { return add_date; } public void setAdd_date(Date add_date) { this.add_date = add_date; } |
E映射枚举类型( 比较少用)
a) @Enumerated
@Enumerated(EnumType.ORDINAL) 枚举类型按位置数,如:0,1,2 ...存储
@Enumerated(EnumType.STRING) 枚举类型按设定值存储DB
xml:麻烦
<!--EndFragment-->