S2SH简介

Spring依赖注入:

  Spring管理action、service、Dao各层对象,实现松耦合

  传统的方式:调用者来创建被调用者;

 控制反转: Spring 被调用者实例化的工作不再由调用者实例。另一个说法,依赖注入: Spring容器完成实例化,然后注入到调用者中 

   工厂模式 调用者耦合工厂,而Spring只需要配置文件来管理各实例Bean。

依赖注入通常有两种方式:设值注入和构造注入

   设值注入:通过调用者中实现set 被调用者的方法来注入

   构造注入:调用者构造函数中传入被调用者参数 

hibernate

1.hibernate优点:

对象关系映射框架,对JDBC的轻量级的对象封装,可应用在任何使用JDBC的场合(BS/CS),hibernate可以在应用EJB的J2EE框架取代CMP,完成数据持久化。

2.事务与并发:

事务

hibernate操作事务和sql方式差不多,通过session主动获取transaction来实现事务控制,同时交由应用服务器提供的JTA来实现事务控制,可采用Spring的事务框架。

并发

并发多采用锁策略,和数据库基本相同,分为乐观锁和悲观锁两种策略。乐观锁策略在hibernate中推荐使用version和timestamp来实现,具体覆盖根据应用而定,如果采用最新修改的覆盖还是采用版本本地冲突策略等。悲观锁策略通过对象的锁方式来实现,如LockMode.READ.

一般用户不需要担心锁策略问题,通常情况下,为JDBC连接指定隔离级别,然后给数据去搞定就行了额。高级用户有时需要进行一个排他的悲观锁定,或者在一个新的事务启动的时候,重新进行锁定。hibernate总是使用数据库的锁定机制,从不在内存中锁定对象。

如果数据卡不知从用户设置锁模式,hibernate将适当的替代模式,确保应用程序可移植性。从以下方式来指定锁定模式。

session.load()的时候指定锁定模式LockMode;

session.lock()

Query.setLoadMode()

3.hibernate提升性能方法:

(1)lazy load懒加载

hibernate懒加载:hibernate在获取一个PO的时候,将同时获取PO中的属性,PO中的集合及集合中的对象的属性、集合。

hibernate3默认的lazy设置为true,只有在调用属性、集合时才会从缓存或数据库中加载。

(2)cache缓存

hibernate对于cache有一级缓存和二级缓存。一级缓存是必需的,位于session部分;二级缓存是可选的,由开发人员指定。hibernate3默认使用EhCache,也可切换为OsCache、JbossCache对集群的支持。

二级缓存的设置:hbm.xml文件中增加Cache元素,指明用哪种策略:read-only,read-write等;或者直接在hibernate.cfg.xml中增加class-cache全局指定。

(3)高效的查询语句

采用占位符的数据库查询,只需要语法分析器分析一次,在参数不同的情况下不会重复解析,提高系统性能。

(4)配置

hibernate.cfg.xml中jdbc.fetch_size的设置等,连接池方面的设置,对于B/S应用尽量采用应用服务器的JNDI的方式。

4.面向对象思想的核心三要素封装、继承、多态,hibernate下如何发挥这三要素来优化持久化层的设计

(1)封装

hibernate中component的概念,采用细粒度级的领域模型设计。如:在User对象中记录User的firstname和lastname这些信息,而在其他表也有这种需求。则把firstname、lastname组装为UserName对象作为Component对象放入User中,在User中使用user.getUserName.getFirstName。同时hibernate还支持Elements、Properties元素。

(2)继承

一、单表策略

类和子类中的属性都放在一张表中,对子类属性不多的情况采用。hibernate采用@hibernate.subclass方式实现

二、每个子类一张表

@hibernate.join-subclass、@hibernate.join-subclass-key的组合方式,采用主键关联的方式

或者@hibernate.join-subclass、@hibernate.discriminator组合方式,采用discriminator(鉴别器)字段关联的方式

三、每个具体类一张表

适合类层次结构上有一定数量的抽象类情况下使用

一种显示多态方式,@hibernate.union-subclass;一种隐式多态方式,每个具体类的PO独立建表,在它的映射文件中将看不出任何的接口、抽象类的关系,对抽象类需指明abstract=true.

(3)多态

查询中体现。User和Employee分别继承自Person,同时Person和Organization对象关联。我们通过Organization获取关联的Person时得到的可能是User,也可能是Employee

转载于:https://my.oschina.net/OQKuDOtsbYT2/blog/162136

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值