三大框架.doc

上传人:豆**** 文档编号:17435457 上传时间:2022-05-24 格式:DOC 页数:25 大小:367.50KB
返回 下载 相关 举报
三大框架.doc_第1页
第1页 / 共25页
三大框架.doc_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《三大框架.doc》由会员分享,可在线阅读,更多相关《三大框架.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流三大框架.精品文档.Hibernate一.是什么: Hibernate是轻量级的ORM框架。 1.ORM(ORMapping)ObjectRelation DBMappingJDBC Hibernate做的就是中间的部分 Application程序面向的是Object,操作的是Object,所以要吧DB中的数据映射成 Object它才能使用2.Object与RDB之间映射关系的特点(Hibernate中) (1)类跟表相对应 (UserModel对应于tbl_user) (2)类的属性跟表的字段相对应 (3)类的实例与表中具体的一条记录相对应

2、 (4)一个类可以对着多个表,一个表也可以对应对个类 (5)DB中的表可以没有主键,但是Object中必须设置主键作为PK字段,不为空且唯一。所以DB跟Object并不是一一映射的 (6)外键:DB中表与表之间的关系映射成为Object之间的关系。 (7)table中字段的个数和名称可以和Object中定义的不一样,在部署连接文件中将两 者连接起来即可二.能干什么?Hibernate不仅仅管理java类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC数据处理的时间。三.有什么? 体系结构图SessionFactory针对单个数据库映射经过编译后的内

3、存对象,是线程安全的。他是生成Session的工厂Session表示应用程序与持久层之间交互操作的一个单线程对象。持久化对象带有持久化状态的,具有业务功能的单线程对象。瞬时及托管对象那些没有与session关联的持久化类实例。事务Transaction应用程序用来指定原子操作单元范围的对象。ConnectionProvider连接池生成JDBC连接的工厂。TransactioinFactory生成Transaction对象实例的工厂。四.怎么用? 1.构建环境(建工程引包) 2.建model建table 3.做配置文件Hibernate文件分为两类 *.cfg.xml *.hbm.xml*.c

4、fg.xml a.缺省名称为 hibernate.cfg.xml b.存放在当前classes的根目录下 c.有如下四部分配置 与DB连接 可选配置(dialect) 资源文件注册(hbm.xml) 二级缓存*.hbm.xml a.与被描述的类同名 UserModel.hbm.xml b.存放位置必须与所描述类存放在同一文件夹下 c.四部分配置 类和表的映射 主键的映射 类的属性和DB中字段的映射 关系的映射 *类中默认的cfg.xml文件是hibernate.cfg.xml 若改变名称,在类中使用时要指出 new Configuration().configure(“cc.cfg.xml”)

5、.buildSessionFactory; *标准的JEE规范是通过服务器来实现的 *Hibernate 帮助我们做的是数据库中数据的持久化。 我们要做的是 Object(App中) Table(DB中) Client(App中) xml(Hibernate) *Blob 存储多大4G的非结构化二进制数据 Clob用来存储多大4G的字符数据第三部分 JDBC连接一. *.cfg.xml中JDBC连接最重要的设置.二.可选的配置属性1.org.hibernate.dialect.Oracle9iDialect(必选的)2.true3.hibernate.connection.isolation

6、设置JDBC事务隔离级别(建议选)4.hibernate.transaction.factory-class 想改变hibernate事务实现机制时用。 事务策略配置有三个标准的选择: org.hibernate.transaction.JDBCTransactionFactory 授权给数据库事务 org.hibernate.JTATransactionFactory JTA能做分布事务 org.hibernate.transaction. CMTransactionFactory5.jta.userTransaction 若四中选择的是JTA则这个必须选择6.hibernate.hbmzd

7、dl.auto 自动生成表三.JEE应用程序服务器的集成 1.container-managerd datasource:Hibernate能使用通过容器管理,并有JNDI提供的JDBC 连接2.自动JNDI绑定:Hibernate可以将SessionFactory绑定到JNDI3.JTAsession绑定:HibernateSession 可以自动绑定到JTA事务作用的范围,只需简单的从JNDI中查找sessionFactory并获得当前的Session4.JMX部署第四章 Persistence Class一.POJO1.四条主要规则u 实现一个默认的(即无参数的)构造方法(constru

8、ctor)u 提供一个标识属性(identifier property)u 使用非final的类 u 为持久化字段声明访问器(accessors)和是否可变的标志(mutators)2.实现继承(Inheritance)3.实现equals()和hashCode()4. Hibernate也支持动态模型 (在运行期使用Map的Map)和象DOM4J的树模型那样的实体表示。使用这种方法,你不用写持久化类,只写映射文件就行了。第五章 Basic O/R Mapping一. 1.hibernate-mappinghibernate-mapping schema=schemaName default-

9、cascade=cascade_style default-lazy=true|false schema (可选): 数据库schema的名称。 default-cascade (可选 - 默认为 none): 默认的级联风格。 default-lazy (可选 - 默认为 true): 指定了未明确注明lazy属性的Java属性和集合类, Hibernate会采取什么样的默认加载风格。 2.Classclass name=ClassName table=tableName dynamic-update=true|false dynamic-insert=true|false optimist

10、ic-lock=none|version|dirty|all lazy=true|falsename (可选): 持久化类(或者接口)的Java全限定名。 如果这个属性不存在, Hibernate将假定这是一个非POJO的实体映射。table (可选 - 默认是类的非全限定名): 对应的数据库表名。dynamic-update (可选, 默认为 false): 指定用于UPDATE 的SQL将会在运行时 动态生成,并且只更新那些改变过的字段。dynamic-insert (可选, 默认为 false): 指定用于INSERT的 SQL 将会在运行时动态 生成,并且只包含那些非空值字段。opti

11、mistic-lock(乐观锁定)(可选,默认是version): 决定乐观锁定的策略。lazy (可选): 通过设置lazy=false, 所有的延迟加载(Lazy fetching)功能将被全 部禁用(disabled)。如果你打开了dynamic-update,你可以选择几种乐观锁定的策略: version(版本检查) 检查version/timestamp字段 all(全部) 检查全部字段 dirty(脏检查)只检察修改过的字段 none(不检查)不使用乐观锁定 3. id被映射的类必须定义对应数据库表主键字段。大多数类有一个JavaBeans风格的属性, 为每一个实例包含唯一的标识。

12、 元素定义了该属性到数据库表主键字段的映射。id name=propertyName type=typename column=column_name name (可选): 标识属性的名字。 type (可选): 标识Hibernate类型的名字。 column (可选 - 默认为属性名): 主键字段的名字。 4. Generator可选的子元素是一个Java类的名字, 用来为该持久化类的实例生成唯一的标识。 uid_table next_hi_value_column assigned 让应用程序在save()之前为对象分配一个标示符。这是 元素没有指定时的默认生成策略。5. 元素为类定义了

13、一个持久化的,JavaBean风格的属性。property name=propertyName column=column_name type=typenamename: 属性的名字,以小写字母开头。 column (可选 - 默认为属性名字): 对应的数据库字段名。 也可以通过嵌套的 元素指定。 type (可选): 一个Hibernate类型的名字。 第十章 与对象共事1. Hibernate对象状态(object states)瞬时(Transient) - 由new操作符创建,且尚未与Hibernate Session 关联的对象被认定为瞬时(Transient)的。持久(Persis

14、tent) - 持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。脱管(Detached) - 与持久(Persistent)对象关联的Session被关闭后,对象就变为脱管 (Detached)的。2. 装载对象load和get区别:a.load先查内存,有就用,没有再查数据库。Get直接查数据库。b.查数据库没有之后,load报例外,get返回null。3.修改持久对象先load出对象,在对其作修改,然后调用flush();4.修改脱管(Detached)对象Hibernate通过提供Session.update()或Session.m

15、erge() 重新关联脱管实例的办法来支持这种模型。5. 自动状态检测Hibernate的用户曾要求一个既可自动分配新持久化标识(identifier)保存瞬时(transient)对象,又可更新/重新关联脱管(detached)实例的通用方法。 saveOrUpdate()方法实现了这个功能。 6. 使用Session.delete()会把对象的状态从数据库中移除。7.拼接hql字符串进行查询*Hinbernate中的缓存问题一、一级缓存 一级缓存的生命周期和session的生命周期一致,当前sessioin一旦关闭,一级缓存就消失,因此一级缓存也叫session级的缓存或事务级缓存,一级缓

16、存只存实体对象的 ,它不会缓存一般的对象属性(查询缓存可以),即当获得对象后,就将该对象的缓存起来,如果在同一session中如果再去获取这个对象时,它会先判断缓存中有没有该对象的ID,如果有就直接从缓存中取出,反之则去数据库中取,取的同时将该对象的缓存起来,有以下方法可以支持一级缓存: * get() * load() * iterate(查询实体对象) 其中 Query 和Criteria的list() 只会缓存,但不会使用缓存(除非结合查询缓存)。二、二级缓存 二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享,二级缓存的生命周期和Se

17、ssionFactory的生命周期一致。hibernate为实现二级缓存,只提供二级缓存的接口供第三方来实现。二级缓存也是缓存实体对象 ,其实现原理与一级缓存的差不多吧,其方法与一级的相同,只是缓存的生命周期不一样而已: * get() * load() * iterate(查询实体对象)其中 Query 和Criteria的list() 只会缓存,但不会使用缓存(除非结合查询缓存)。什么样的数据适合存放到第二级缓存中?1、很少被修改的数据 2、不是很重要的数据,允许出现偶尔并发的数据3、不会被并发访问的数据4、参考数据 不适合存放到第二级缓存的数据?1、经常被修改的数据2、财务数据,绝对不允

18、许出现并发3、与其他应用共享的数据。*各种控制的流程1.save(model) topo 事务判断要不要提交。我们写了mit(),他才会瓶sql往下走。 通过po得到一个全路径拼出model.hbm.xml,到.cfg.xml中找到hbm.xml。 动态拼sql。 得到连接。 执行JDBC。2.update(model) 注意:dynamic-update只生成改过的字段 topo(dynamic-updatehuixian load一遍) mit po找到model.hbm.xml 拼sql 得到连接 执行JDBC(merge其实是借用po的表,装to,因为session实力池中相同主键的实

19、例只有一个) 3.get(model类,主键值;)(双主键时,传一个封装双主键的主键类) 依据model类找到model类.hbm.xml 动态拼sql 执行sql的rs rs类实例(反射技术)load(model类,主键值;)在以上步骤前加一步:在内存中查找4.query 词法分析(HQL)得到类名 类名model.hbm.xml 动态拼sql 会有两个结果:object 各个类实例的集合 返回若cfg.xml中两个model名称相同,路径不同,则在xml中的类名部分要是全路径Spring一.是什么: Java/JEE Application Framework二.有什么?COREAOP表现

20、层 DAO ORM逻辑层层数据服务层 JEESpring Web MVCwebworkstrutsSpring Web三.能干什么 Spring 可以做一个超级的粘合平台,把我们所有用到的技术集成到一起,形成一个 整体。 (1)IOC/DI(Inversion of control/Dependency Injection) (2)提供应用的服务 (3)AOP (4)各种技术的集成第三章 控制反转器1.IOC(Inversion of Control) 控制反转ASpringBC正向:App去控制外部东西反向:Spring控制AppAPP Spring控制了App所有的外部资源。(如A要调用B

21、类或者C类时,由Spring给A类提供,而不是在A类中直接调用。即A依赖于Spring给他注入外部资源)IOC/DI是从不同角度来说明控制反转。2. (1)Bean:组成应用的主体(backbone)及由Spring IOC容器所管理的对象。即由Spring容器初始化装配及管理对象。 (2)由Spring去控制App外部资源的优点: a.松散耦合 b.是App模块化,提高组件复用性 c.由Spring组装,理想是实现软件工业化(3)接口应用:Application Context ApplicationContext完全由BeanFactory扩展而来,因而BeanFactory所具备的能力和

22、 行为也适用于ApplicationContext。3.怎么用? (1)配置XML(applicationContext xml 放到src的根目录下) (2)搭建开发环境 (3)写App (4)Client调用4.怎么学?(主要是xml文件和ApplicationContext中的方法) (1)Bean的定义信息(applicationContext xml中)a.类的定义:全限顶类名,通常是已定义bean的实际实现类。如果通过调用static Factory方法来实现实例化bean,而不是使用常见的constructor,哪么类名实际上 就是工厂类的类名 b.行为的定义:及创建模式(pro

23、totype还是singleton),自动装配模式,以来检查 模式,初始化以及销毁方法,这些定义决定bean在容器中的行为。 c.Constructor的定义及属性值(constructor有参无参) d.bean之间的关系 (即在xml中要配置这四项) *声明事务的六种属性 Required/Required New,Support/Not Support,Mandatory/Never3.3依赖 3.3.1注入依赖(DI) 3.3.1.1 DI背后的基本原理是对象之间的依赖关系,只会通过以下几种方式来实现 (1)构造器的参数 (2)工厂方法的参数 (3)构造函数或者工厂方法创建的对象设置属

24、性 容器的工作就是创建bean时注入那些依赖关系 DI有两种注入方式 (1)setter注入getter,setter方法都有缺陷,所以一般class中的属性的前两个字母都不要大写, 如JDBC中url,name,password,服务器的port等都可以通过注入实现,逻辑层调用数据层时可将工厂改为给逻辑层注入一个接口即可 public class ExampleBean private AnotherBean beanOne; private YetAnotherBean beanTwo; private int i; public void setBeanOne(AnotherBean b

25、eanOne) this.beanOne = beanOne; public void setBeanTwo(YetAnotherBean beanTwo) this.beanTwo = beanTwo; public void setIntegerProperty(int i) this.i = i; (2)构造器注入 Java中一般都是属性私有化,通过public的getter和setter来交互。 在构造器参数定义中使用type属性显示设置,也可用index属性设置,默认 是按照在bean中声明属性的顺序。优先选index,次选type最后选default。public class Ex

26、ampleBean private AnotherBean beanOne; private YetAnotherBean beanTwo; private int i; public ExampleBean( AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) this.beanOne = anotherBean; this.beanTwo = yetAnotherBean; this.i = i; public class ExampleBean private ExampleBean(.) public stati

27、c ExampleBean createInstance ( AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) ExampleBean eb = new ExampleBean (.); / some other operations return eb; (3)方法注入对于具有不同生命周期的bean来说,在调用一个singleton类型bean A的某个方法时,需要引用另一个非singleton(prototype)类型的bean B,对于bean A来说,容器只会创建一次,这样就没法在需要的时候每次让容器为bean

28、 A提供一个新的的bean B实例。Lookup方法注入利用了容器的覆盖受容器管理的bean方法的能力,从而返回指定名字的bean实例。在上述场景中,Lookup方法注入适用于原型bean(尽管它也适用于singleton bean,但在那种情况下直接注入一个实例就够了)。Lookup方法注入的内部机制是Spring利用了CGLIB库在运行时生成二进制代码功能,通过动态创建Lookup方法bean的子类而达到复写Lookup方法的目的。3.3.1.2处理bean的依赖关系通常按一下步骤进行 a.根据定义bean的配置文件创建并初始化BeanFactory实例(或 ApplicationCont

29、ext) b.每个bean的依赖将以属性构造器参数,或静态工厂方法参数的形式出现。 当这些bean被实际创建时,这些依赖也将会提供给该bean c.每个属性或构造参数既可以是一个实际的值,也可以是该容器中另一个 bean的引用 d.每个指定的属性或构造器参数值必须能够被转换成属性或构造参数所需的 类型 3.3.3bean属性及构造器参数详解 1.直接量(基本类型、Strings类型等。)元素通过字符串来指定属性或构造器参数的值。a. idref元素idref元素用来将容器内其它bean的id传给 或 元素,同时提供错误验证功能。 b.ref元素该元素用来将bean中指定属性的值设置为对容器中的

30、另外一个bean的引用。第一种形式:是通过使用标记指定bean属性的目标bean,通过该标签可以引用同一容器或父容器内的任何bean(无论是否在同一XML文件中)。XML bean元素的值既可以是指定bean的id值也可以是其name值。第二种形式是使用ref的local属性指定目标bean,它可以利用XML解析器来验证所引用的bean是否存在同一文件中。local属性值必须是目标bean的id属性值。c.内部bean所谓的内部bean(inner bean)是指在一个bean的或 元素中使用元素定义的bean。内部bean定义不需要有id或name属性。 d. 集合通过、及元素可以定义和设置

31、与Java Collection类型对应List、Set、Map及Properties的值。e. Nulls f. 组合属性名称当设置bean的组合属性时,除了最后一个属性外,只要其他属性值不为null,组合或嵌套属性名是完全合法的。 foo bean有个fred属性,此属性有个 bob属性,而bob属性又有个sammy属性,最后把sammy属性设置为123。为了让此定义能工作, foo的fred属性及fred 的bob属性在bean被构造后都必须非空,否则将抛出NullPointerException异常。g. depends-on 多数情况下,一个bean对另一个bean的依赖最简单的做法

32、就是将一个bean 设置为另外一个bean的属性。在xml配置文件中最常见的就是使用元素。 depends-on属性可以用于当前bean初始化之前显式地强制一个或多个bean被初始化。 h. 延迟初始化beanApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化。一个延迟初始化bean将告诉IoC 容器是在启动时还是在第一次被用到时实例化。 i. 自动装配(autowire)不要使用3.4.bean的作用域(*)1.Singleton作用域当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的be

33、an实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。2.Prototype作用域Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。*对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。3.request4.session5.global session3.5.定制bean特性3.5.1. Lifecycle接口a.初始化回调即在XML配置文件中通过指定init-met

34、hod属性来完成。b. 析构回调在XML配置文件中通过指定destroy-method属性来完成。3.8. ApplicationContext它由BeanFactory接口派生而来,因而提供了BeanFactory所有的功能。为了以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,context包还提供了以下的功能: MessageSource, 提供国际化的消息访问 资源访问,如URL和文件 事件传播,实现了ApplicationListener接口的bean 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层MessageSource, 提供国际化的消息访问String getMessage(String code, Object args, String default, Locale loc):用来从MessageSource获取消息的基本方法。如果在指定的locale中没有找到消息,则使用默认的消息。args中的参数将使用标准类库中的MessageFormat来作消息中替换值。 bean id=messageSource class=org.springframework.context

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁