Hibernate学习总结.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一.对象语言和操作数据库不匹配:模型不匹配(阻抗不匹配) ①.可以使用JDBC手动转换;sql参数和jdbc中用对象赋值 ②.使用ORM(Object Relation Mapping对象关系映射)框架:hibernate 二.Hibernate安装配置 ①.配置文件Hibernate.cfg.xml和Hperties ②.映射文件xxx.hbm.xml:对象模型和关系模型的映射 三.开发流程 1.由Domain Object - mapping - db 2.有DB开始,用工具生成mapping和Domain Object 3.由配置文件开始 四.Domain Object限制 1.默认的构造方法(必须的) 2.有无意义的标示符id(主键) 可选 3.非final的,对懒加载有影响 可选 Configuration SessionFactory Session Transaction Query Criteria Configuration类 Configuration类负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。 SessionFactory接口 SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。 Session接口 Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。Transaction接口   Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码 Query和Criteria接口   Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语句或SQL语句两种表达方式。PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。 saveOrUpdate是根据unsave-value的设定,判定是要save还是update操作 当不知道对象处于什么状态时,到底是保存还是更新,可以使用方法saveOrUpdate; 原理: hibernate根据id判断,如果数据库有值调用update,没有数据调用save; 2)saveOrUpdate与merge的区别:调用saveOrUpdate对象变成持久对象;调用merge对象还是脱管的 Users.hbm.xml中的id可以判断什么时候是瞬时状态: 主键判断: unsaved-value=-1可以设置主键是-1时候的对象是瞬时的; 保存时:判断unsaved-value的值与保存的id的值,如果两个值相等就表示没保存过,调用保存数据;(一般不更改此属性) int:0代表是瞬时对象 String:null代表是瞬时对象 evict()清理一集缓存 3、在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况: 1).查询全部字段的情况下,如from 实体类,list中封装的对象为实体类本身,各属性都将得到填充。 2).只查询一个字段,默认情况下,list中封装的是Object对象。 3).查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。 对于后两种情况,用标签遍历时不太方便,因为无法直接转换成实体类的对象。比较简单的解决方法是: 在hql中使用 select new 包名.类名(属性1,属性2……) from 实体类,同时在实体类中添加带参的构造方法,参数的个数和顺序与(属性1,属性2……) 保持一致,这样我们得到的list中存放的依然是实体类的对象,所查询到的属性得到了填充,使用起来更为方便。 4、一级缓存的管理   当应用程序调用Session的save()、update()、saveOrUpdate()、get()或load(),

文档评论(0)

lingyun51 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档