hibernate培训教程(编辑修改稿)内容摘要:

么做的。 property name=twoStrings type= column name=first_string/ column name=second_string/ /property 注意使用 column标签来把一个属性映射到多个字段的做法。 用户的例子 设计:用户, id name 映射: 一、安装 二、持久化类( Persistent Class) Hibernate 培训教程 Email: 版权所有,如果转载和篡改,请注明出处 11 持久化类不需要实现什么特别的接口,也不需要从一个特别的持久化根类继承下来。 Hibernate 也不需要使用任何编译期处理,比如字节码增强操作,它独立的使用 Java 反射机制和运行时类增强(通过 CGLIB)。 所以,在 Hibernate 中, POJO 的类不需要任何前提条件,我们就可以把它映射成为数据库表。 持久化类必须遵循的原则: 为类的持久化类字段申明访问方法( Get/set)。 Hibernate 对 JavaBeans 风格的属性实行持久化。 实 现 一 个 默 认 的构 造 方 法( constructor )。 这 样 的话 Hibernate 就 可 以使 用()来实例化它们。 如果是集合类型 的属性,它的类型必须定义为集合的接口。 例如: List、 Set 提供一个标识属性( identifier property)。 如果没有该属性,一些功能不起作用,比如:级联更新( Cascaded updates) ()。 三、 hibernate 映射文件 四、应用: 之后做个总结,特别是 CRUD 操作。 Hibernate 映射声明( Mapping declaration) 一、 DOCTYPE 声明。 一个 XML document 应该在文档的起始位置有一个 XML 的声明,可能跟随着一个DOCTYPE 的声明。 一个 DOCTYPE 声明告诉一个 XML parser 这个 XML 文档遵循了哪一个 DTD(Document Type Declaration)。 Parser 可以用此信息来确认这个 XML 文档包含的仅是这个 DTD 声明的 XML element。 例如: ?xml version=? !DOCTYPE hibernatemapping PUBLIC //Hibernate/Hibernate Mapping DTD DTD 可以从上述 URL 中获取,或者在 ,或 文件中找到。 Hibernate 总是会在它的 classptah 中首先搜索 DTD 文件。 二、 hibernatemapping 它是文档的根( root),可以包含多个类的映射,但一般只包含一个类。 hibernatemapping schema=schemaName (1) defaultcascade=none|saveupdate (2) autoimport=true|false (3) Hibernate 培训教程 Email: 版权所有,如果转载和篡改,请注明出处 12 package= (4) / ( 1)、 schema(可选 ):数据库 Schema Name ( 2)、 defaultcascade(可选,默认为 none):默认的级联风格 ( 3)、 autoimport(可选,默认为 true):是否允许在查询语言中使用非完全限定的类名即只用类的名称,不用加入包名(仅限本映射文件中定义的类)。 ( 4)、 package(可选 ),如果该映射文件中定义的类名不包含 package,则使用这里定义的 package 作为类名的前缀。 注:( 3)默认的值是“ true”,如果有多个类的名字相同,则必须将该值设为 false。 三、 class 用 class 元素来定义一个持久化类。 class name=ClassName (1) table=tableName (2) discriminatorvalue=discriminator_value (3) mutable=true|false (4) schema=owner (5) proxy=ProxyInterface (6) dynamicupdate=true|false (7) dynamicinsert=true|false (8) selectbeforeupdate=true|false (9) polymorphism=implicit|explicit (10) where=arbitrary sql where condition (11) persister=PersisterClass (12) batchsize=N (13) optimisticlock=none|version|dirty|all (14) lazy=true|false (15) / name:持久化类(或 Java 接口)的全名。 table:对应的数据库表名。 discriminatorvalue(鉴别值)(可选,默认和类名一样):一个用于区分不同子类的值,在多态行为中使用。 mutable(可选,默认值为 true):表明该类是否可以改变。 如果将它设为 false,则应用程序不能对此类对应的数据进行修改和删除。 schema(可选 ):覆盖在根 hibernatemapping元素中指定的 schema 名字。 proxy(可选 ):指定一个接口,在延迟装载时作为代理使用。 你可以在这里使用该 类自己的名字。 dynamicupdate(动态更新) (可选,默认为 false): 指定用于 UPDATE 的 SQL 将会在运行时动态生成,并且只更新那些改变过的字段。 dynamicinsert(动态插入) (可选 , 默认为 false): 指定用于 INSERT 的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。 selectbeforeupdate (可选,默认值为 false): 指定 Hibernate 除非确定对象的确被修Hibernate 培训教程 Email: 版权所有,如果转载和篡改,请注明出处 13 改了,不会执行 SQL UPDATE 操作。 在特定场合(实际上,只会发 生在一个临时对象关联到一个新的 session 中去,执行 update()的时候),这说明 Hibernate 会在UPDATE 之前执行一次额外的 SQL SELECT 操作,来决定是否应该进行 UPDATE。 polymorphism(多形,多态) (可选 , 默认值为 implicit (隐式 )): 界定是隐式还是显式的使用查询多态。 1 where (可选 ) 指定一个附加的 SQLWHERE 条件,在抓取这个类的对象时会一直增加这个条件。 1 persister (可选 ): 指定一个定制的 ClassPersister。 1 batchsize (可选 ,默认是 1) 指定一个用于根据标识符抓取实例时使用的 batch size(批次抓取数量)。 1 optimisticlock(乐观锁定) (可选,默认是 version): 决定乐观锁定的策略。 1 lazy(延迟) (可选 ): 假若设置 lazy=true,就是设置这个类自己的名字作为proxy 接口的一种等价快捷形式。 四、 id 持久化类必须要声明一个字段对应数据库表的主键。 id name=propertyName (1) type=typename (2) column=column_name (3) unsavedvalue=any|none|null|id_value (4) access=field|property|ClassName (5) generator class=generatorClass/ /id (1)、 name(可选):标识属性的名称。 (2)、 type(可选 ):标识 Hibernate 类型的名字。 (3)、 column(可选-默认为属性名 ):对应数据库表的主键字段的名字。 (4)、 unsavedvalue(可选-默认为 null):这个值用来判断对象是否要保存。 如果一个对象 id值与该值相等时, Hibernate 则会认为该对象是一个新的对象,并没有持据化到数据库中。 举例:假如一个新建对象的属性 id 的类型为 int,我们知道如果不给 id 赋值,它默认的值就应该是“ 0”,如果 这时 unsavedvalue 是默认的 null。 则当保存这个新建对象,调用 session. SaveOrUpdate()方法时会抛出异常。 因为 id 的值不等于 null,所以 Hibernate 会认为该对象已经保存,它会去执行 update 操作。 Generator 主键生成器,每个主键都必须定义相应的主键生成策略。 它用来为持久化类实例生成唯一的标识。 例如: id name=id type=long column=uid unsavedvalue=0 generator class= param name=tableuid_table/param param name=columnnext_hi_value_column/param /generator /id 所有的生成器都实现 接口。 这是一个非常简单的接口 ;Hibernate 培训教程 Email: 版权所有,。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。