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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

hibernate部分总结.docx

1、hibernate部分总结Hibernate总结第一章1. 其实体类需要实现java.io.Serializable接口并添加默认无参构造方法和getter/setter方法2. 映射文件的名字一般为实体类名.hbm.xml,通常和实体类放在一个包中IllHistory.hbm.xml(实体映射)!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN open_id 解析如下: id元素,用来定义属性到表主键的映射 name :标识属性的名称 type:标识Hibernate类型的名称 generat

2、or元素,用来设置主键的生成方式 class:用来设置主键生成器 property元素,用来设置实体类属性 name:用来设置实体类的属性名 type:用来设置实体类属性的类型 column元素,用来设置与实体类属性对应的表字段 name:用来设置字段名 length:用来设置字段长度 not-null:用来设置是否为空,true表示不能为空 precision:用来设置小数长度 scale:用来设置小数点后面的位数Hibernate核心接口1Configuration接口:读取src中的Hibernate配置文件并以此创建SessionFactory对象。Configuration conf

3、ig=new Configuration().configure();SessionFactory接口:初始化Hibernate并创建session对象SessionFactory factory=config.buildSessionFactory();Session接口:负责保存、更新、删除、加载及查询对象,相当于JDBC中的Connection。Session session=factory.openSession();Transaction:管理事务Transaction tr=session.beginTransaction();备注:SessionFactory是线程安全的,可以被

4、多个线程调用,所以一个程序一般只需一个SessionFactory;而Session不是线程安全的,所以让多个线程共享一个Session将会出现问题。Java为解决多线程程序的并发问题提供了ThreadLocal类,通常把Session放到ThreadLocal中解决多线程并发问题 进程是应用程序在操作系统上的执行单元。 线程是某个进程中更细分的执行单元。 一个应用程序至少有一个进程,一个进程至少有一个线程。 ThreadLocal是Java中的线程类,用来管理Java应用程序的线程。session接口的方法 save(Object o)将临时状态的对象数据插入到数据库中。调用save方法时,

5、并不会立即向数据库中插入数据,而是放到session缓存中。当提交事务时,清理session缓存,产生insert语句。 备注: save方法把对象的临时状态变为持久化状态,所以在调用此方法后对属性进行改变会产生update语句 update(Object o)将脱管状态的对象数据更新到数据库中 saveOrUpdate() saveOrUpdate方法兼具save()和update()方法的功能,并且会判断对象是脱管状态还是临时状态,然后自动调用合适的方法。 get(Class,id)第一个参数设置类名,第二个参数设置主键值,即通过主键值查询记录并封装成对象返回。get方法被调用时并不一定会

6、产生select语句,因为get方法首先会在session缓存中进行查找,找到后直接返回;如果没找到才会产生select语句从数据库中查找。 load(Class,id)与get方法相同,区别在于:如果最后没查询到数据并且加载方式是立即加载,get方法会返回null;load方法会出现ObjectNotFoundException异常。 delete(Object o)删除一个处于持久化状态或脱管状态的对象调用delete方法时,并不会立即进行删除操作,而是当提交事务时,清理session缓存,产生delete语句。 实体对象的生命周期中包括3种状态: 临时状态(transient) 持久化状

7、态(persistent) 游离状态(detached)实体对象生命周期的3种状态可以相互转换 第二章Hibernate映射关联关系单向一对多、单向多对一、双向一对多/多对一、一对一关联是指:表与表之间数据彼此联系的方式,表现为主外键关联映射关联关系是指:把表之间的关联关系映射到实体类和xxx.hbm.xml文件中,通过Hibernate以面向对象的方式间接操纵表之间的关联关系延迟加载lazy属性lazy属性设为true,表示使用延迟检索策略;设为false,表示使用立即检索策略。默认值为true。它可以应用于class元素,例如: 也可以应用于set元素,例如: 当执行Session的loa

8、d方法(get方法不支持延迟检索)时,Hibernate不会立即执行查询classes表的select语句,仅仅返回Classes类的代理类的实例,这个代理类具由以下特征:1. 由Hibernate在运行时动态生成,它扩展了Classes类,因此它继承了Classes类的所有属性和方法。2. 当Hibernate创建Classes代理类实例时,属性都为null,因此这个代理类实例占用的内存很少。3. 当应用程序第一次访问Classes代理类实例时(例如调用c.getXXX()或c.setXXX()方法), Hibernate才会初始化代理类实例,在初始化过程中执行select语句,真正从数据库

9、中加载Classes对象的所有数据。备注:如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。inverse属性inverse属性用来设置双向关联关系的维护方,即由谁来管理、维护主外键关系,默认值是false,常用于一对多关联关系中。false表示一的一方是关系的维护方,true表示多的一方是关系的维护方。 在上一个示例中,当inverse为默认值false时,表示维护方是一的一方(班级),那么在生成的sql语句中会额外多出来update语句,这表示一的一方(班级

10、)在主动维护主外键关系,防止出错。 当把inverse的值改为true时,表示维护方是多的一方(学生),那么在生成的sql语句中不会额外多出来update语句。 所以建议在一对多关联关系中,把维护方交给多的一方 多对一关联关系总是设成“inverse=false”的,而且这个属性在Mapping中是不存在的,即保证维护方是多的一方 比喻:董事长和员工之间是一对多/多对一关联关系 董事长要认识每一个员工很不容易,但是每个员工都认识董事长。当更换董事长时,如果把维护方交给一的一方(董事长),那就需要挨个通知每一个员工;如果把维护方交给多的一方(员工),那就不需要挨个通知员工了。cascade属性用

11、来设置级联操作,例如:删除某个班级时是否级联删除该班的学生 取值有:all、none、save-update、delete,默认值是none第三章第四章Hibernate检索方式: 1.HQL(Hibernate Query Language)是面向对象的查询语言,具有丰富灵活的特性。是使用最为广泛的一中检索方式,也是官方推荐的查询模式 2.QBC 3.本地查询Hibernate检索方式的功能:可以在查询语句中设定查询条件,可以动态绑定参数支持分页查询支持多表连接查询支持分组查询,可以使用having和group by关键字支持聚合函数,如sum()、min()、max()等可调用用户自定义函

12、数、存储过程支持子查询HQL检索步骤:Query接口 方法名 功能说明 List list() 适合结果集是多行,返回一个集合 Object uniqueResult() 适合查询返回单个对象 int executeUpdate() 适合增、删、改语句,返回受影响的行数HQL简单实体查询 (查询所有部门)public void testQueryAllDept() String hql = from Dept; Query query = session.createQuery(hql); List deptList = query.list(); for(Dept dept:deptList

13、) System.out.println(部门名称:+dept.getDeptName(); HQL语句本身不区分大小写,但其中出现的类名和属性名区分大小写通过占位符绑定public void testQueryAllDept() String hql = from Dept as model where model.deptName = ?; Query query = session.createQuery(hql); query.setString(0, test); List deptList = query.list(); for(Dept dept:deptList) System

14、.out.println(部门名称:+dept.getDeptName(); 通过命名参数绑定public void testQueryByParamsName() String hql =from Dept as model where model.deptName =:deptName and model.createDate =:createDate ; Query query = session.createQuery(hql); query.setString(deptName, test); query.setString(createDate, 2000-03-11); List

15、 deptList = query.list(); for(Dept dept:deptList) System.out.println(部门名称:+dept.getDeptName(); System.out.println(创建日期:+dept.getCreateDate(); HQL多表连接查询SQL语句通过join子句实现了多表之间的联合查询,HQL也提供了相应的联合查询机制1.inner join(内连接):inner join只返回两个表中连接字段相等的行2.left outer join(左外连接):left join返回包括左表中的所有记录和右表中联结字段相等的记录.3.rig

16、ht outer join(右外连接):right join返回包括右表中的所有记录和左表中联结字段相等的记录 .备注:使用HQL进行多表连接查询时,Query接口的list方法返回的集合中存储的并不是实体对象,而是数组对象。预先抓取预先抓取是指Hibernate如何使用外连接来获得对象的关联实例或集合。预先抓取对应的配置属性是fetch=join.备注:1.不采用预先抓取时,每查询一个学生就会产生2条SQL语句,如果将来查询的学生很多或者关联的层次很深,那么产生的SQL语句的数量将不敢想象。2.采用预先抓取后,不管查询多少个学生,不管关联的层次有多深,只会产生1条多表连接SQL语句。3.在实

17、际应用中,一对多和多对多推荐使用延迟加载,一对一和多对一推荐使用预先抓取。4.另外需要注意的是:如果使用HQL,那么即使配置了预先抓取也会被忽略。在关联关系操作中,从使用的角度看,预先抓取和立即加载的效果是一样的,但是预先抓取可以减少SQL语句的数量。和外连接相比,预先抓取将初始化代理对象的引用,把对象的数据填充完毕。但是外连接默认仅把对象组装好,而不会初始化对象之间的引用关系。第五章Criteriakraitiri检索Criteria查询即QBC(Query By Criteria)Criteria查询通过面向对象的设计,将数据查询条件封装为一个对象 public void testQuer

18、yDept() Criteria criteria = session.createCriteria(Dept.class); List deptList = criteria.list(); for(Dept dept:deptList) System.out.println(dept.getDeptName(); Criteria本身只是一个查询容器,具体的条件通过Criteria.add方法添加到Criteria实例中 List emps=null;Session s=MySessionFactory.getSession();try t=s.beginTransaction(); Cr

19、iteria c=s.createCriteria(Emp.class); c.add(Restrictions.ge(sal, b); c.add(Restrictions.le(sal, e); emps=c.list(); mit(); catch (Exception ee) t.rollback(); ee.printStackTrace();finally MySessionFactory.closeSession();return emps;Criteria查询语法的查询限定机制:方法 描述Expression.eq 对应SQL条件中的“ field = value ”Expre

20、ssion.gt 对应SQL条件中的“ field value ”Expression.ge 对应SQL条件中的“ field = value ”Expression.lt 对应SQL条件中的“ field value ”Expression.le 对应SQL条件中的“ field fieldExpression.geProperty 用于比较两个属性之间的值,对应SQL条件中的field = fieldExpression.ltProperty 用于比较两个属性之间的值,对应SQL条件中的field fieldExpression.leProperty 用于比较两个属性之间的值,对应SQL条

21、件中的field = fieldCriteria的setFirstResult和setMaxResults方法可以限制一次查询返回的记录范围 /criteria 分页查询public void testQueryByPage() Criteria criteria = session.createCriteria(Dept.class); criteria.setFirstResult(2); criteria.setMaxResults(2); List deptList = criteria.list(); for(Dept dept:deptList) System.out.println(部门ID:+dept.getDeptId(); System.out.println(部门名称:+dept.getDeptName(); System.out.println(创建日期:+dept.getCreateDate();

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

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