ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:43.92KB ,
资源ID:17965420      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17965420.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第三四五六章文档Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第三四五六章文档Word文件下载.docx

1、meta attribute=class-description Represents a single customer. author LindaSun/meta由于结点属性attribute值为class-description,所以这里面结点值主要是POJO的注释内容. 对应代码如下:/* Represents a single customer.* author LindaSun*/(2) extendsMypack.BusinessObject结点属性attribute值为extends,所以这里面结点值主要是POJO的继承的Class.对应代码如下:Public class Cu

2、stomer extends mypack.BusinessObject implements Serializable (3) field-descriptionIs the customer married 结点属性attribute值为field-description,表示给married的getMarried()方法添加注释,注释内容为Is the customer married.代码如下:* Is the customer marriedPublic Boolean getMarried() Return this.married;(4) id name=idint scope-

3、setprotected/id结点属性attribute值为scope-set,表示给id的setId()方法类型定义为protected.代码如下:protect void setId(Integer id) this.id=id;属性描述class-description指定描述类的JavaDocfield-description指定描述类的属性的JavaDocinterface如果为true, 表示生成接口而非类,默认为falseimplements指定类所实现的接口extends指定类继承的父类名generated-class重先指定生成的类名scope-class指定类的修饰符,默认

4、为public scope-set指定set 方法的修饰符,默认为public scope-get指定 get 方法的修饰符,默认为publicscope-field指定类的属性的修饰符,默认为privateuse-in-toString如果为true,表示在toString()方法中包含此属性gen-property如果为false,不会在Java类中生成此属性,默认为trueFinder-method指定find方法名,参见本章3.3节(5)meta attribute=”extends”mypack.BusinessObject./hibernate-mapping在整个配置文件开头加载

5、结点并指定属性attribute=”extends”,这时所有的类都会扩展mypack.BusinessObject类如果只希望紧靠着结点的第一个类扩展父类,那么只要给具体指定某一个类扩展其他类,可以结点嵌套在结点,以仅仅指定当前类扩展某一个类,如下(6)meta attribute=”scope-field”property name=”field1” type=”string”/property name=”field2” type=”string”/property name=”field3” type=”string”public以上结果 实质是下面意思:protected Strin

6、g field1;protected String field2;public String field3;由于在class结点开头嵌入了结点,并且属性attribute值为scope-field, 结点值为protected,所以class所有属性应该都protected,但name属性值为field3的结点property有一个子结点,且子结点meta attribute=”usesr-in-tostring”true( unique=”true”代表是唯一约束,不晓得oracle有没有这种功能?)property name=”time” type=”string”column name=

7、”TIME” index=”IDX_REGISTERED_TIME” sql-type=”date”/ 对当前字段,生成一个索引,索引名为IDX_REGISTERED_TIME, sql-type=”date”指的是当前字段在数据库中的类型,如果不指定这个类型,hbm2ddl工具会自动进行匹配,建议不指定,这样跨平台或数库移值时比较方便Create table CUTOMERS( NAME VARCHAR(15) NOT NULL, TIME DATECreate index IDX_REGISTERED_TIME on CUSTOMERS(TIME);以下结点各个属性的说明name设定字段的

8、名字length设定字段的长度过not-null如果为true,指明字段不允许为 null,默认为falseunique如果为true,指明字段有唯一约束,默认为falseindex给一个或多个字段建产索引Unique-key给多个字段设定唯一约束Foreign-key为外键约束命名,在one-to-onekey和元素中包含foreign-key属性,.如果没有设定此属性,hbm2ddl工具会自动外键约束随机生成唯一的名字.在双向关联中,inverse属性为true的一端不能设置foreign-key属性.Sql-type设定字段的SQL类型check设定SQL的检查约束第4章 对象-关系映射

9、基础本章主要内容如下: 持久化类的属性没有相关的getXXX()和setXXX()方法. 持久化类的属性在数据库表中没有对应的字段,或者数据库表中的字段在持久化类中没有对应的属性 控制Hibernate生成的insert和update语句 设置从持久化类映射到数据库表,以及持久化类的属性映射到数据库表的字段的命名策略4.1持久化类的属性及访问方法持久化类使用的javaBean的风格,为需要被访问的属性提供持久化方法;setXXX()和getXXX();例如: public String name和private String name 其中任何一种方式都无法 定义属性name的只读权限.只有下

10、面的持久化方法可以public String getName() return this.name;private String setName(String nme) return this.name = name; Java应用程序通过getXXX()来读取Test1对象并把信息输出,通过setXXX()把信息写到Test1对象 Hibernate:调用Test1对象getXXX()方法取Test1信息,并保存到数据库,调用setXXX()方法把从数据库取得的信息写入到Test1对象.(见示例)4.1.1 java对应的8种基本类型,byte、short、char、int、long、flo

11、at、double和boolean都有对应的包装类型(类),对于映射文件,类和对应基本类型是相同的 然而包装类型默认值为null,而基本类型无法表达null, 比如 整型默认值为0,而实现运用过程中,0通常会代表某种业务含义(上一次谈到这个问题),所以推荐使用包装类型(类).在hibernate中,hibernate会根据OID(OID在第5章会提到,实质是对象的标识,这里面通常指是的关系数据库中的主键)值是否为null来判断当前对象是临时状态还是游离状态,持久化该对象:如果OID为null,则为临时状态,这时保存时调用saveOrUpdate()方法实质调用是save()方法(插入);如果有

12、值则为游离状态, 这时保存时调用saveOrUpdate()方法实质调用是update()方法(修改).(这一点会在第7章讲到). 而基本类型无法做到使变量值为null,从而使对象一直处理游离状态.4.1.2 Hibernate 访问持久化类属性的策略 默认情况下,hibernate通常通过getXXX()和setXXX()来访问类的对象的属性信息与库表信息对应(存取) Hibernate还可以通过反射机构直接类的对象的属性信息与库表进对应(存取),采用这种机制对应时,映射文件对属性配置如下:property name=”name” access=”field”4.1.3 在持久化类的访问方法

13、中加入程序逻辑1.在持久化方法中加入程序逻辑public class Test1 implements java.io.Serializable . private String testNameA; private String testNameB; public String getTestName() return this.testNameA+ 连接 +this.testNameB; public void setTestName(String testName) StringTokenizer t = new StringTokenizer(testName); this.testN

14、ameA = t.nextToken(); this.testNameB = t.nextToken();如上面例子,只要映射文件,加了即可,类中无须加testName属性,hibernate并不会直接访问name属性,而是调用getTestName()和setTestName()方法,实际上建产了 Test1类中属性 testNameA和testNameB与表TEST1中字段TEST_NAME的映射.注意:这种情况下,由于类中没有testName属性,如果在映射文件,程序运行就会抛出异常,因为类中不存在testName属性,而这时 access=”field”说明hibernate会直接访问

15、Test1属性testName,当然会抛出异常( 见示例)在写HQL时,只映射文件有的字段才在HQL中直接拼写.如:testNameB在映射文件没有,这时如果写上:session.find(“from Test1 as c where c.testNameB=”xhtan”),这时运行会抛出异常,因为映射文件没有加载testNameB.2.在类的子成员中对应的setObj()方法中加入程序逻辑public class ZCustomer implements java.io.Serializable private Set ZOrders = new HashSet(0); private d

16、ouble avgPrice;这个属性不需要在映射文件中加载 private void setAvgPrice( double avgPrice) this.avgPrice = avgPrice;public Set getZOrders() calculatePrice(); return this.ZOrders; public void setZOrders(Set ZOrders) this.ZOrders = ZOrders;Private void calculatePrice() double avgPrice = 0.0; double totalPrice = 0.0; i

17、nt count = 0; if(getZOrder()!=null) Iterator iter = getZOrders().iterator(); while(iter.hasNext() Double orderPrice = (Order)iter.next().getPrice(); totalPrice += orderPrice; count +;上面是一个顾客与订单的关系,一个顾客有多个订单,每个订单有一自已钱数,而平均钱数,对于顾客表(ZCUSTOMER)没有存放平均钱数的字段,而且也没必要持久,如果为平均钱数单独再加个字段,这样数据在库中冗余,但有顾客又想查看自已平均消费

18、情况,这时就可以把这个平均钱数avgPrice作ZCustomer一个属性,而对应映射文件不须加这个属性结点,这样每次顾客订单发生变化时,平均钱数就计算一次,如上面.3.在Test1类的setXXX()方法中加数据验证逻辑.调用setXXX()地方有两个,一个是我们写的应用程序,另一个是hibernate.有时在应该程中调用类的setXXX()方法时,想在setXXX()中加上数据进行验证功能,而hibernate调用setXXX()方法时,注入的数据都从数据库取出来的,肯定正确,如果如前面说的setXXX()有个验证,这时验证就是冗余的.这时虽有验证我们可以通过 在映射文件加 ,这时持久化类

19、中, totalPrice属性类型最好时是转换类型而不是基本类型,因为如果上面SQL文结为空就是null,这时基本类型是表达不了,程序在这种情况下会抛出异常.4.1.5 控制insert和update语句 Hibernate 在初始化阶段,就会根据映射文件的映射信息,为所有的持久化类预定义以下SQL语句: Insert:insert into ZORDERS (ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values (?,? Update:update ZORDERS set ORDER_NUMBER=?,PRICE=?,CUSTOMER_ID=? Where ID

20、=?. Delete:delete from ZORDERS where ID=? Select: select ID,ORDER_NUMBER,PRICE,CUSTOMER_ID from ZORDERS where ID=?以上SQL文都存放在 SessionFactory的缓存中,在调用 save(),update(),delete(),load()方法时会找到相应的预定义的SQL语句,然后绑定参数.hibernate就是这样在动态的生成SQL语句,这些开销很小。但是如果关系数据库中的当前表字段比较多时运行这些SQL就比较耗时了,因为这些SQL文都对某数据所有字段的访问,对数据库会开销比

21、较大,这时就可以通过映射文件来精简动态SQL.例如下面设置:property name=”testName” update=”false” column=”TEST_NAME”/中由于加了 update=”false”表明update语句不会包含TEST_NAME字段。如下表是有这方面具体的规范:映射属性作用元素的insert属性如果为false,在insert语句中不包含该字段,表时该字段永运不能插入。默认为true元素的update属性如果为false,在update语句中不包含该字段,表时该字段永运不能被修改。元素的mutable属性如果为false,等价于所有的元素的update属性为

22、false,表示整个实例不能被更新。元素的dymic-insert属性如果为true,表示当保存一个对象时,会动态生成insert语句,只有这个字段取值不为null,才会把他包含到insert语句中.默认为false元素的dymic-update属性如果为true,表示当更新一个对象时,会动态生成update语句,只有这个字段取值有变化,才会把他包含到update语句中.默认为false如果为true,等价所有4.3 创建命名策略创建命策略,实质主要影响是hibernate的缓存中初化SQL文,与我编程没有影响(个人理解),本章讲的自定义命名策略主要是通过实现接口MyNamingStrategy,并系统启动时加载这个已实现的接口,从而实现创建命名策略package mypack;import net.sf.hibernate.cfg.NamingStrategy;import net.sf.hibernate.util.StringHelper;public class MyNamingStrategy

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1