




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
表示层(struts处于表示层)、业务层(Spring)、持久层(hibernate让对象冬眠)、数据库单项依赖Hibernate (不要管表或是触发器等)Apache ojbSun JdoORACLE ToplinkEJB(CMP)、JPAIBatis【更轻量级】有面向对象的数据库但使用不广泛,如果使用广泛以上的框架将没有存在的意义Hibernate有两种配置文件.properties和.xml/Configuration cg = new Configuration();/这里默认调用.propertiesConfiguration cfg = new Configuration().configure();/读取hibernate.cfg.xml文件,如果这里文件名是hibernate.xml时configure(“hibernate.xml”);不想看到Client java代码执行的详细信息可以将perties中将一些信息用#进行注释.hibernate=.hibernate.type=.hibernate.tool.hbm2ddl=debuglog4j.rootLogger=warn, stdout这条不能注释hibernate.cfg.xml文件中为了方便跟踪true这样就可以显示sql语句hibernate不适合聚集项目开发(批量的查询,批量的删除,批量的修改等等),第二、如果使用特定的数据库优化机制(特定的sql优化,它是依赖于数据库)就不适合了(sql是hibenate 自动生成的是无法控制的) 领域对象 存储过程hibernate的优点1、提高生产力(不要写jdbc语句)2、开发更对象化3、移植性好(适配器的配置)4、支持透明持久化(即倾入性比较少,换其他框架比较方便【轻量级框架】spring也是轻量级的)不依赖于容器,测试方便Hibernate 是用log4j进行日志记录的(将perties拷贝到项目中,这样会更好跟踪hibernate的一些细节、更容易进行调试,没有的话,控制出错它是不会进行打印的)一个数据库对应一个SessionFactory(表,映射都放在这里面)SessionFactory(重量级【创建比较耗时,最好只创建一次,避免多次创建】,线程安全)与二级缓存(进程级的缓存)有关hibernate默认实现了连接池,还可以继承第三方的连接池Session 可以认为是对Connection做了一层包装当你openSession()时,并不代表它就open了一个Connection只有真正用的时候它才会去拿Connection(它会到连接池里面拿在配置文件中我们并没有看到连接池的配置,因为 hibernate默认实现连接池你可以设置连接池的大小【在perties中hibernate.connection.pool_size 1这里默认为1】,还可以集成第三方(比如ddcp【就是tomcat所使用的】)的连接池)Session这里面管理了,而Connection仅仅就是一个连接,所以学hibernate就得学缓存就比如save一个对象的时候,先放到缓存一份(对实体对象生命周期的管理)Session用完必须关闭(一个业务请求打开一个Session。Session关闭事务也关闭),Session是非线程安全的ApplicationHperties,xml MappingDataBase业务逻辑层Hiberante核心接口UserTypeQueryTransationSessionSessionFactoryConfiguration持久化层InterceptorPersistClassLifecycleValidatableJNDIJTAJDBCJNDI (java名称和目录接口)是主要是管理我们对象的,特别是EJB应用,它会把EJB都放在JNDI这棵树上,它就像一个电话簿一样,一个人的姓名对应着他的一个电话,它就是这样管理的,一个友好字符串对应一个实例,那么都在这里面管理,我讲的是tomcat连接池,也是这种方式来做的。使用它的好处:1,我们的对象可以统一管理2,我们可以不依赖于具体的实现。JDBC 从事务看,它属于本地事务(指只能对一个数据库进行操作)(比如不能进行银行转账)DRP数据库JTA(java Transation Api【其实是一个容器】)全局事务使用它我们才具体跨资源的事务能力,它实现了两阶段提交协议(只有在提交之前没有任何问题,才有事务提交,有问题就回滚)这里可以知道hibernate可以使用jta事务,jdbc,也可以访问jNDi数据源Query接口支持hql(查询实体类,这里是不同数据库的适配器)、sql(查询表)Lifecycle(hibernate2.x)、Validatable接口不建议使用,有倾入性Inteceptor接口代替Lifesycle的作用,如果你想拿到比如save前和后的一些事件,没有倾入性UserType 与数据库之间类型转化,觉得hibernate的转化不适合你的要求,你也可以自己配置比如说一个人有十个邮箱,hibernate是通过两张表进行存储的,但我们想让这是个邮箱以“,”隔开存在一个字段上持久化对象的生命周期(lifecycle)瞬时对象(Transient Objects)持久化对象(Persist Objects)离线对象(Detached Objects)使用Junit进行单元测试首先项目中创建source folder Session接口的基本用法及生命周期示例Session对应一级缓存了解hibernate的CRUD操作(save,update,delete,get,load等)了解get和load的区别1、 get不支持lazy,load支持lazy(是指在使用时才会加载对象才会向数据发送请求生成sql语句)2、 采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常Transient状态的特征1、 在数据库中没有与之匹配的数据2、 没有纳入session的管理Persistent状态的特征1、 persistent状态的对象在数据库有与之对应的数据2、 纳入了session的管理3、 在清理缓存(或脏数据的检查)的时候,会和数据库同步清理缓存判断缓存有没有发生变化Detached状态的特征1、 在数据中有与之匹配的数据2、 没有纳入session的管理Query接口Query支持hql(hibernate查询语言)语句ORM框架中都有自己的一套数据库查询语言,比如EJB,与之对应的ejbqlHibernate的分页Hibernate解决了阻抗不匹配(对象中继承,而关系数据库没有继承)Oop、ooa、ood基本映射标签和属性介绍auto-importpackage主键生成策略uuid效率高,但字符串的查找肯定没有数字(即自增的)的快native数据库要维护一张表来实现自增上面两种都可以Assigned实体类名、属性名和sql的关键字重复,这样是不允许的需要修改,使用table或column进行重命名比如:如果实体对象的名字为Group,这是一定需要自己命名,因为group是数据库的关键字实体类的设计原则1、 实现一个默认的(即无参数的)构造方法(constructor)2、 提供一个标识属性(identifier property)(可选)与业务无关的属性标识3、 使用非final的类 (可选)4、 为持久化字段声明访问器(accessors)即是提供get,set方法多对一的关联映射关联映射的本质1、 将关联关系映射到数据库。所谓的关联关系是对象模型在内存中的一个或多个引用会在多的一端加入一个外键,指向一的一端,这个外键是由中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致1、理解级联的含义 是对象的连锁操作一对一的关联映射单向:1、主键关联2、唯一外键关联使用uuidhibernate生成主键,/因为user的主键生成策略采用的是uuid,所以调用完成save后,知识将user纳入到了session的管理/不会发出insert语句,但是已经生成,session中的existsInDatabase状态为falsesession.save(user);/调用flush,hibernate会清理缓存,执行sql/如果数据的隔离级别设置为未提交读,那么我们可以看到flush过的数据/并且session中的existsInDatabase状态为true;session.flush();/提交事务/默认情况下commit操作会完成先执行flush清理缓存,所以不显示的调用flush/comit后数据是无法回滚的mit();使用native数据库自动生成主键id/因为user的主键生策划那个策略为native,所以调用session.save后,将执行insert语句,返回由数据库生成的id/纳入session的管理,修改session中existsInDatabase状态为true;/如果数据的隔离级别设置为未提交读,那么我们可以看到flush过的数据session.save(user);数据库隔离级别是否存在脏读是否存在不可重复读是否存在读1、 read uncommitted(未提交读) YYY2、 read committed(提交读) NYY3、 repeatable read(可重复读)NNY4、 Serializable(序列化读)NNN通过select tx_isolation;oracle 使用2,mysql使用3;可以通过set transaction islocation level read uncommitted;多对多关联关系1、 只有多对多和一对多的双向加载才会用到inverse属性2、 还可以通过增加一个实体类,通过两个实现多对多延迟加载hibernate是采用第三方的库(CGLIB)来实现延迟加载的这个给我们的类生成代理类,之前JDK可以动态生成代理类(完成日志的记录,完成了事务的声明式事务),代理类可以控制源对象并且可以增强源对象的能力之间动态代理的区别CGLIB可以对类进行代理,而JDK只能对实现接口的类进行代理JDK他们的接口是一致,而CGLIB继承了父类生成子类hibernate lazy策略可以使用在:1、标签上,可以取值:true/false 3.x默认为true;之前默认为false2、标签上,可以取值:true/false需要类增强工具【用到此方式进行lazy加载,比如说对于属性是一个文本域属性】3、标签,可以取值,true/false/extra4单端关联上,可以取值:false/proxy/onproxylazy概念:只有真正使用该对象,才会创建,对于hibernate而言,真正使用的时候才会发出sqlhibernate支持lazy、策略,只有在session打开状态下有效继承映射一个类继承树映射成一张表隐式多态和显示多态HQLHibernate查询概述:数据查询与检索是Hibernate中的一个亮点,相对其他ORM实现而言,Hibernate提供了灵活多样的查询机制标准化对象查询(Criteria Query):以对象的方式进行查询,将查询语句封装为对象操作。优点:可读性好,复合Java程序员的编码习惯。缺点:不够成熟,不支持投影(projection)或统计函数(aggregation)Hibernate语言查询(Hibernate Query Language,HQL):它是完全面向对象的查询语言,查询功能非常强大,具有多态、关联等特性。Hibernate官方推荐使用HQL进行查询Native SQL Queries(原生SQL语句):直接使用标准SQL语句或跟特定数据库相关的SQL进行查询。例子:标准的对象查询(Criteria Query)查询用户名以J开头的所有用户Criteria criteria = session.createCriteria(User.class);criteria.add(Expression.like(“name”,”J%”);List users = criteria.list();Hibernate语言查询HQL用面向对象的方式生成sql1、以类和属性来代替表和数据列2、支持多态3、支持各种关联4、减少了SQL的冗余HQL支持所有的关系数据库操作1、 连接(joins,包括inner,outer,full joins),笛卡尔积(cartesian products)2、 投影3、 聚合(Aggregation,max,avg)和分组(group)4、 排序(Odering)5、 子查询(Subqueries)6、 Sql函数(SQL function calls)例子:Hibernate查询语言查询用户以“J”开头的所有用户Quer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广西促销活动方案策划公司
- 平台网络安全应急预案方案
- 策划餐饮行业活动方案
- 亚运游园活动方案策划
- 班级活动策划方案公司问题
- 舟山建筑沙盘大赛方案设计
- 骨髓穿刺术的护理
- 统计工作年底工作总结
- 项目咨询方案报价明细
- 全民健身中心活动策划方案
- 公安援疆工作总结
- 湖南省益阳市2026届高三9月教学质量监测数学试题(含答案)
- 第8课《网络新世界》第一课时-统编版《道德与法治》四年级上册教学课件
- 2025秋人教版美术七年级第一单元 峥嵘岁月第1课 情感表达2
- 2025年审计部招聘考试模拟题及答案详解
- 2025年招聘市场年中洞察报告-瀚纳仕
- 2025年大学生英语六级必考词汇表全部汇编(带音标)
- 外科颅内和椎管内血管性疾病 课件
- DL∕T 1867-2018 电力需求响应信息交换规范
- 版良性前列腺增生诊疗指南PPT
- 【EHS领导力培训】安全领导力与执行力培训(86页)
评论
0/150
提交评论