Hibernate—annotation 学习笔记 第16页 共109页
二、 介绍MYSQL的图形化客户端
这样的软件网络很多,主要自己动手做 三、 Hibernate.cfg.xml:hbm2ddl.auto
在SessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库. 使用 create-drop时,在显式关闭SessionFactory时,将drop掉数据库schema. 取值 validate | update | create | create-drop 四、 搭建日志环境并配置显示DDL语句
我们使用slf接口,然后使用log4j的实现。 1、 首先引入log4j的jar包(log4j-1.2.14.jar),
2、 然后再引入slf4j实现LOG4J和适配器jar包(slf4j-log4j12-1.5.8.jar)
3、 最后创建log4j的配置文件(log4j.properties),并加以修改,只要保留
log4j.logger.org.hibernate.tool.hbm2ddl=debug
五、 搭建Junit环境
1、首先引入Junit 类库 jar包 (junit-4.8.1.jar)
2、在项目名上右键→new→Source Folder→输入名称→finish
3、注意,你对哪个包进行测试,你就在测试下建立和那个包相同的包 4、建立测试类,需要在测试的方法前面加入”@Test” public class TeacherTest { 六、 ehibernate.cfg.xml : show_sql
输出所有SQL语句到控制台. 有一个另外的选择是把org.hibernate.SQL这个log category设为debug。
private static SessionFactory sf = null; @BeforeClass//表示Junit此类被加载到内存中就执行这个方法 public static void beforClass(){ } @Test//表示下面的方法是测试用的。 public void testTeacherSave(){ } @AfterClass//Junit在类结果时,自动关闭 public static void afterClass(){ }} sf.close(); Teacher t = new Teacher(); t.setId(6); t.setName(\); t.setTitle(\中级\); Session session = sf.openSession(); session.beginTransaction(); session.save(t); session.getTransaction().commit(); session.close(); sf = new AnnotationConfiguration().configure().buildSessionFactory(); Hibernate—annotation 学习笔记 第17页 共109页
取值: true | false 七、 hibernate.cfg.xml :format_sql
在log和console中打印出更漂亮的SQL。 取值: true | false True样式: 16:32:39,750 DEBUG SchemaExport:377 - create table Teacher ( id integer not null, name varchar(255), title varchar(255), primary key (id) ) False样式: 16:33:40,484 DEBUG SchemaExport:377 - create table Teacher (id integer not null, name varchar(255), title varchar(255), primary key (id)) 八、 表名和类名不同,对表名进行配置
Annotation:使用 @Table(name=”tableName”) 进行注解 例如: /** * @Entity 表示下面的这个Teacher是一个实体类 * @Table 表示映射到数据表中的表名,其中的name参数表示\表名称\ * @Id 表示主键Id,一般放在getXXX前面 */ @Entity @Table(name=\) public class Teacher { [??] } Xml:
Annotation:默认为@Basic
注意:如果在成员属性没有加入任何注解,则默认在前面加入了@Basic
Xml中不用写column
十、 字段名和属性名不同
Annotation:使用@Column(name=”columnName”)进行注解
例如: /** * @Entity 表示下面的这个Teacher是一个实体类 * @Table 表示映射到数据表中的表名,其中的name参数表示\表名称\ * @Column 表示实体类成员属性映射数据表中的字段名,其中name参数指定一个新的字段名 * @Id 表示主键Id Hibernate—annotation 学习笔记 第18页 共109页
*/ @Entity @Table(name=\) public class Teacher { ?? Xml:
不需要(持久化)psersistence的字段
@Column(name=\)//字段名与属性不同时 public String getName() { } return name; //设置主键使用@Id @Id public int getId() { } return id; private int id; private String name; private String title; 就是不实体类的某个成员属性不需要存入数据库中 Annotation:使用@Transient 进行注解就可以了。 例如:
@Transient public String getTitle() { } Xml:不写(就是不需要对这个成员属性进行映射) 十二、
映射日期与时间类型,指定时间精度
return title; Annotation:使用@Temporal(value=TemporalType)来注解表示日期和时间的注解
其中TemporalType有三个值:TemporalType.TIMESTAMP 表示yyyy-MM-dd HH:mm:ss
TemporalType.DATE TemporalType.TIME
表示yyyy-MM-dd 表示HH:mm:ss
@Temporal(value=TemporalType.DATE) public Date getBirthDate() { } return birthDate; 注意:当使用注解时,属性为value时,则这个属性名可以省略,例如:@Temporal(TemporalType) Xml:使用type属性指定hibernate类型
注意:hibernate日期时间类型有:date, time, timestamp,当然您也可以使用Java包装类
Hibernate—annotation 学习笔记 第19页 共109页
十三、
Annotation:使用@Enumerated(value=EnumType)来注解表示此成员属性为枚举映射到数据库
其中EnumType有二个值:①EnumType.STRING 表示直接将枚举名称存入数据库
②EnumType.ORDINAL 表示将枚举所对应的数值存入数据库
映射枚举类型
Xml:映射非常的麻烦,先要定义自定义类型,然后再使用这个定义的类型??
第12课 使用hibernate工具类将对象模型生成关系模型
(也就是实体类生成数据库中的表),完整代码如下: package com.wjt276.hibernate; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; /** * Hibernate工具
* 将对象模型生成关系模型(将对象生成数据库中的表) * 把hbm映射文件(或Annotation注解)转换成DDL * 生成数据表之前要求已经存在数据库 * 注:这个工具类建立好后,以后就不用建立了。以后直接Copy来用。 * @author wjt276 * @version 1.0 2009/10/16 */ public class ExportDB { public static void main(String[] args){ }} /* org.hibernate.cfg.Configuration类的作用: * 读取hibernate配置文件(hibernate.cfg.xml或hiberante.properties)的. * new Configuration()默认是读取hibernate.properties * 所以使用new Configuration().configure();来读取hibernate.cfg.xml配置文件 */ Configuration cfg = new AnnotationConfiguration().configure(); /* org.hibernate.tool.hbm2ddl.SchemaExport工具类: * 需要传入Configuration参数 * 此工具类可以将类导出生成数据库表 */ SchemaExport export = new SchemaExport(cfg); /** 开始导出 * 第一个参数:script 是否打印DDL信息 * 第二个参数:export 是否导出到数据库中生成表 */ export.create(true, true); 运行刚刚建立的ExportDB类中的main()方法,进行实际的导出类。
Hibernate—annotation 学习笔记 第20页 共109页
第13课 ID主键生成策略
一、 Xml方式
(2) type (可选): 标识Hibernate类型的名字(省略则使用hibernate默认类型),也可以自己配置其它hbernate类型(integer, long, short, float, double, character, byte, boolean, yes_no, true_false)
(2) length(可选):当type为varchar时,设置字段长度
(3) column (可选 - 默认为属性名): 主键字段的名字(省略则取name为字段名)。
(4) unsaved-value (可选 - 默认为一个切合实际(sensible)的值): 一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。 这可以把这种实例和从以前的session中装载过(可能又做过修改--译者注) 但未再次持久化的实例区分开来。
(5) access (可选 - 默认为property): Hibernate用来访问属性值的策略。 如果 name属性不存在,会认为这个类没有标识属性。 unsaved-value 属性在Hibernate3中几乎不再需要。
还有一个另外的
主键生成策略是必须配置
用来为该持久化类的实例生成唯一的标识。如果这个生成器实例需要某些配置值或者初始化参数, 用元素来传递。
increment
用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。
identity
对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。 (数据库自增)