Spring对持久层封装

合集下载

SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使⽤spring MVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServlet(分发器)2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller3.Controller调⽤业务逻辑处理后,返回ModelAndView4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图5.视图负责将结果显⽰到客户端Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。

另外spring的aop,事务管理等等都是我们经常⽤到的。

Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。

mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。

mybatis通过配置⽂件关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。

在每次与数据库交互时,通过sqlSessionFactory拿到⼀个sqlSession,再执⾏sql命令。

使⽤⽅法:要完成⼀个功能:1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。

2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。

Spring简介

Spring简介

Spring简介什么是Spring?spring是分层的avaSE以及javaEE应⽤于全栈的轻量级开源框架,以IOC(Inverse Of Control)控制反转,AOP(Aspect Oriented Programing)⾯向切⾯编程为核⼼,提供表现层SpringMVC以及持久层Spring,并且可整合多种其他开源框架。

spring的本质是管理对象,包括创建对象及维护对象之间的关系。

spring的优点1)⽅便解耦,简化开发通过spring的IOC可将对象的创建,以及对象之间的依赖都交由spring容器来进⾏管理,这样可以降低程序之间的耦合。

并且开发时也只需关注上层的应⽤,不⽤再多关注底层的应⽤。

2)AOP编程的⽀持spring⽀持AOP⾯向切⾯编程,许多OOP⾯向对象编程不能或很难实现的功能,都可通过AOP轻松实现。

3)声明式事务的⽀持可以将我们从单调烦闷的事务管理中解放出来,通过声明式事务的⽅式,可以灵活的进⾏事务管理,进⽽提⾼开发的质量和效率。

4)⽅便程序的测试可以⽤⾮容器依赖的编程⽅式进⾏⼏乎所有的测试⼯作,测试不再是昂贵的操作,⽽是随⼿可做的事情。

5)⽅便集成各种优秀的框架Spring可以降低各种框架的使⽤难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz等)的直接⽀持。

6)降低javaEE的API的使⽤难度Spring对 JavaEE API(如 JDBC、JavaMail、远程调⽤等)进⾏了薄薄的封装层,使这些API 的使⽤难度⼤为降低。

7)spring框架的源码是经典学习的案例Spring的源代码设计精妙、结构清晰、匠⼼独⽤,处处体现着⼤师对Java设计模式灵活运⽤以及对 Java技术的⾼深造诣。

它的源代码⽆疑是Java技术的最佳实践的范例。

通过Spring进⾏解耦什么叫程序的耦合?在程序中,对象之间相互依赖,相互传递数据,这种相互关联的程度越⾼,程序的耦合度就越⾼。

Struts、Spring、Hibernate三大框架的原理和优点

Struts、Spring、Hibernate三大框架的原理和优点

Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。

MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。

MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。

Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。

控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。

ActionServlet是一个通用的控制组件。

这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。

它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。

另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。

动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。

最后动作类把控制权传给后续的JSP 文件,后者生成视图。

所有这些控制逻辑利用Struts-config.xml文件来配置。

模型:模型以一个或多个java bean的形式存在。

这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。

Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。

基于Spring和Hibernate的JavaEE数据持久层的研究与实现

基于Spring和Hibernate的JavaEE数据持久层的研究与实现

据的 C U R D。目前 , 我们使用 的绝大 多数数据 库是关
系型数据 库 , 设 计 和开 发往 往 又 是 面 向对 象 的方 而 式 , 了提高数 据访 问的效 率 , 为 持久 层 的解 决方 案就
合理划 分数据持久 层体 系结构 : 用 I 使 Oc
技术 , 数据 源 信 息 注 入 到数 据操 作层 中 , 数 据 将 使 源层 和数 据操 作层 进 行分 离 , 降低 数据 源 和数 据 操
wh l i e,t e I t g a i n o p i g a d Hi e n t r m e r o sr c s a n r sr c u e wh c si c o d n e wih d t h n e r to f S r n n b r a e f a wo k c n t u t n i f a t u t r i h i n a c r a c t a a p r it n i r e s e tte ,ma i g p s i l h o s o p l g s k n o sb e t e l o e c u i .Th y t m sh g l t b e lx b e a d e p n i l . n e s se i i h y s a l ,fe i l n x a sb e
关键词 jv 企 业 版 aa 数 据持 久 层 控制反转 面 向 方 面 编 程
中 图分 类 号
TP 1. 2 3 11
S u n a i a i n of J v EE t dy a d Re lz t o a a Per i t nt Ti r b s d on sse e a e
Ke o d J v EE,d t e s t n i r OC,AOP yw r s aa a a p r i e tte ,I s

Spring核心技术详解

Spring核心技术详解

Spring核⼼技术详解⼀、Sring简介Spring是⼀个分层的Java SE/EE应⽤⼀站式的轻量级开源框架。

Spring核⼼是IOC和AOP。

Spring主要优点包括:⽅便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进⾏控制,避免硬编码造成的程序耦合度⾼。

AOP编程的⽀持,通过Spring提供的AOP功能,⽅便进⾏⾯向切⾯编程。

声明式事务的⽀持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式⽅式灵活地进⾏事务的管理,提⾼开发效率和质量。

⽅便程序的测试,可以⽤⾮容器依赖的编程⽅式进⾏⼏乎所有的测试⼯作。

⽅便集成各种优秀框架,Spring提供了对各种优秀框架的直接⽀持。

⼆、Spring体系结构如下图所⽰,整个spring框架按其所属功能可以划分为五个主要模块,这五个模块⼏乎为企业应⽤提供了所需的⼀切,从持久层、业务层到表现层都拥有相应的⽀持,这就是为什么称Spring是⼀站式框架的原因。

核⼼模块(Core Container) Spring的核⼼模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,⽤配置的⽅式进⾏依赖关系描述。

由IoC容器负责类的创建,管理,获取等。

BeanFactory接⼝是Spring框架的核⼼接⼝,实现了容器很多核⼼的功能。

Context模块构建于核⼼模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能。

ApplicationContext是Context模块的核⼼接⼝。

表达式语⾔(Expression Language)是统⼀表达式语⾔(EL)的⼀个扩展,⽀持设置和获取对象属性,调⽤对象⽅法,操作数组、集合等。

使⽤它可以很⽅便的通过表达式和Spring IoC容器进⾏交互。

AOP模块Spring AOP模块提供了满⾜AOP Alliance规范的实现,还整合了AspectJ这种AOP语⾔级的框架。

Spring中注解配置与xml配置分析

Spring中注解配置与xml配置分析

虽然 2.0 版本发布以来,Spring 陆续提供了十多个注解,但是提供的这些注解只是为了在某些情况下简化 XML 的配置,并非要取代 XML 配置方式。这一点可以从 Spring IoC 容器的初始化类可以看出:ApplicationContext 接口的最常用的实现类是 ClassPathXmlApplicationContext 和 FileSystemXmlApplicationContext,以及面向 Portlet 的 XmlPortletApplicationContext 和面向 web 的 XmlWebApplicationContext,它们都是面向 XML 的。Spring 3.0 新增了另外两个实现类:AnnotationConfigApplicationContext 和 AnnotationConfigWebApplicationContext。从名字便可以看出,它们是为注解而生,直接依赖于注解作为容器配置信息来源的 IoC 容器初始化类。由于 AnnotationConfigWebApplicationContext 是 AnnotationConfigApplicationContext 的 web 版本,其用法与后者相比几乎没有什么差别
也可以单独显式地来启用某个注解处理器,而且可以给处理器添加拦截器:
<be.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean class="monAnnotationBeanPostProcessor"/>
<mvc:annotation-driven />
当然了也可以使用如下的方式显式地加载:

Spring的HibernateTemplate

Spring的HibernateTemplate

使用spring的hibernateTemplate的方法分类:Struts+Hibernate+Spring2009-05-22 15:486178人阅读评论(6)收藏举报使用spring的hibernateTemplate的方法- [spring]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明/logs/24775065.html1.管理SessionFactory使用Spring整合Hibernate时我们不需要hibernate.cfg.xml文件。

首先,在applicationContext.xml中配置数据源(dataSource)bean和session工厂(sessionFactory)bean。

其中,在配置session工厂bean 时,应该注入三个方面的信息:●数据源bean●所有持久化类的配置文件●Hibernate的SessionFactory的属性Hibernate的SessionFactory的属性信息又包括两个内容,一,Hibernate的连接方法;二,不同数据库连接,启动时的选择。

2.为HibernateTemplate注入SessionFactory对象,通过HibernateT emplate来持久化对象Spring提供了HibernateTemplate,用于持久层访问,该模板无需打开Session及关闭Session。

它只要获得SessionFactory的引用,将可以只能地打开Session,并在持久化访问结束后关闭Session,程序开发只需完成持久层逻辑,通用的操作(如对数据库中数据的增,删,改,查)则有HibernateTemplate完成。

HibernateTemplate有三个构造函数,不论是用哪一种构造,要使HibernateTemplate能完成持久化操作,都必须向其传入一个SessionFactory的引用。

HibernateTemplate的用法有两种,一种是常规的用法,另一种是复杂的用。

《J2EE应用框架设计与项目开发》试题(附答案)

《J2EE应用框架设计与项目开发》试题(附答案)

《J2EE应用框架设计与项目开发-2014》试题第一章J2EE体系结构一、单项选择题(每题2分,其中只有一个选择项为正确,多选、不选或错选该题均不得分)1、下列关于J2EE的说法,正确的是()A.是一套使用java进行企业级web应用开发的事实上的工业标准。

B.J2EE不是一种平台规范。

C.J2EE平台提供了多层分布式的应用模型,不能重新利用组件的能力。

D.J2EE不一定要基于J2SE。

答案:A2、J2ME是指()A.java to more enterpriseB.java 2 mobile editionC.java 2 micro editionD.java 2 mini edition答案:C3、J2EE的三层结构包括表示层、中间层、()A.服务层B.会话层C.保存层D.数据层答案:D4、在J2EE三层结构中,中间层与MVC设计模式中的()模块相对应。

A.视图B.控制器C.模型D.以上都不对答案:B5、JavaEE服务器与容器的关系是()A.服务器是javaEE容器基础,容器是它的一部分B.javaEE容器是服务器的基础,服务器是它的一部分C.二者没有什么关系D.服务器和容器指的是同样一个东西答案:A6、下列不属于J2EE标准服务的是()A.邮件服务B.安全服务C.短信服务D.消息服务答案:C7、下列不属于J2EE组成结构中的各元素的是()A.J2EE应用程序组件B.J2EE容器C.J2EE资源适配器D.J2EE磁盘答案:D8、下列那个不属于java技术框架SSH里面的()A.StrutsB.HiveC.SpringD.Hibernate答案:B二、多项选择题(其中有两个或两个以选择项为正确,不选、错选或多选均得0分,漏选则按选对率计分,每题3分。

)1、通常的瘦客户端多层次应用程序难于编写,是因为要设计多行复杂代码()A.用于事务处理B.用于状态管理C.用于多线程D.用于资源池E.用于其他的复杂的底层设计答案:ABCDE2、下列哪些是J2EE的标准服务:()A.邮件服务B.消息服务C.安全服务D.连接器提供的服务E.硬件检测服务答案:ABCD3、J2EE必须支持的应用组件有:()A.客户端应用程序B.代码编译器C.AppletsD.Servlets、JSP页面、JSF应用程序、过滤器、WEB事件监听器E.企业javabean组件答案:ACDE4、下列属于web服务器的是:()A.IISB.WeblogicC.ApacheD.TomcatE.Websphere答案:ACD三、判断题(每题1.5分)1、JAVA是由微软公司推出的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

事务管理对于J2EE 应用程序而言,事务的处理一般有两种模式:1.依赖特定事务资源的事务处理这是应用开发中最常见的模式,即通过特定资源提供的事务机制进行事务管理。

如通过JDBC、JTA 的rollback、commit方法;Hibernate Transaction 的rollback、commit方法等。

这种方法大家已经相当熟悉。

2.依赖容器的参数化事务管理通过容器提供的集约式参数化事务机制,实现事务的外部管理,如EJB 中的事务管理模式。

容器管理的参数化事务为程序开发提供了相当的灵活性,同时因为将事务委托给容器进行管理,应用逻辑中无需再编写事务代码,大大节省了代码量(特别是针对需要同时操作多个事务资源的应用),从而提高了生产率。

Spring事务管理能给我们带来什么?对于传统的基于特定事务资源的事务处理而言(如基于JDBC 的数据库访问),Spring 并不会对其产生什么影响,我们照样可以成功编写并运行这样的代码。

同时,Spring还提供了一些辅助类可供我们选择使用,这些辅助类简化了传统的数据库操作流程,在一定程度上节省了工作量,提高了编码效率。

对于依赖容器的参数化事务管理而言,Spring 则表现出了极大的价值。

Spring本身也是一个容器,只是相对EJB容器而言,Spring显得更为轻便小巧。

我们无需付出其他方面的代价,即可通过Spring实现基于容器的事务管理(本质上来讲,Spring的事务管理是基于动态AOP)。

下面这段xml配置片断展示了Spring中的事务设定方式:<beans><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"><value>com.mysql.jdbc.Driver </value></property><property name="url"><value>jdbc:mysql://localhost/test</value></property><property name="username"><value>user</value></property><property name="password"><value>mypass</value></property></bean><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTr ansactionManager"><property name="dataSource"><ref local="dataSource" /></property></bean><bean id="userDAO" class="erDAO"><property name="dataSource"><ref local="dataSource" /></property></bean><bean id="userDAOProxy"class="org.springframework.transaction.interceptor.Tran sactionProxyFactoryBean"><property name="transactionManager"><ref bean="transactionManager" /></property><property name="target"><ref local="userDAO" /></property><property name="transactionAttributes"><props><prop key="insert*">PROPAGATION_REQUIRED</prop><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop></props></property></bean></beans>配置中包含了dataSource,transactionManager 等资源定义。

这些资源都为一个名为userDAOProxy 的TransactionProxyFactoryBean 服务,而userDAOProxy 则对包含实际数据逻辑的userDAO进行了事务性封装。

可以看到,在userDAOProxy 的"transactionAttributes"属性中,我们定义了针对userDAO 的事务策略,即将所有名称以insert 开始的方法(如UserDAO.insertUser方法)纳入事务管理范围。

如果此方法中抛出异常,则Spring将当前事务回滚,如果方法正常结束,则提交事务。

而对所有名称以get 开始的方法(如UserDAO.getUser 方法)则以只读的事务处理机制进行处理。

(设为只读型事务,可以使持久层尝试对数据操作进行优化,如对于只读事务Hibernate将不执行flush操作,而某些数据库连接池和JDBC 驱动也对只读型操作进行了特别优化。

)结合上面这段申明带来的感性认知,最为关键的两点是:1.Spring可以将任意Java Class 纳入事务管理这里的UserDAO只是我们编写的一个普通Java Class,其中包含了一些基本的数据应用逻辑。

通过Spring,我们即可简单的实现事务的可配置化。

也就是说,我们可以随意为某个类的某个方法指定事务管理机制。

2.Spring事务管理并不依赖特定的事务资源。

EJB 容器必须依赖于JTA 提供事务支持。

而Spring 的事务管理则支持JDBC、JTA 等多种事务资源。

这为我们提供了更多的选择,从而也使得我们的系统部署更加灵活。

对Spring事务管理机制进行简单分析之后,我们将结合持久层封装的具体事务应用机制,对Spring中的事务管理进行更具实效的探讨。

JDBCSpring对JDBC进行了良好的封装,通过提供相应的模板和辅助类,在相当程度上降低了JDBC操作的复杂性。

并且得益于Spring良好的隔离设计,JDBC封装类库可以脱离Spring Context独立使用,也就是说,即使系统并没有采用Spring作为结构性框架,我们也可以单独使用Spring的JDBC部分(spring-dao.jar)来改善我们的代码。

作为对比,首先让我们来看一段传统的JDBC代码:Connection conn =null;Statement stmt = null;try {conn = dataSource.getConnection();stmt = con.createStatement();stmt.executeUpdate("UPDATE user SET age = 18 WHERE id = 'erica'");} finally {if (stmt != null) {try {stmt.close();} catch (SQLException ex) {logger.warn("Exception in closing JDBC Statement", ex);}}if (conn != null) {try {conn.close();} catch (SQLException ex) {logger.warn("Exception in closing JDBC Connection", ex);}}}上面的代码非常常见。

为了执行一个SQL语句,我们必须编写22行代码,而其中21行与应用逻辑并无关联,并且,这样的代码还会在系统其他地方(也许是每个需要数据库访问的地方)重复出现。

于是,大家开始寻找一些设计模式以改进如此的设计,Template 模式的应用是其中一种典型的改进方案。

Spring的JDBC封装,很大一部分就是借助Template模式实现,它提供了一个优秀的JDBC模板库,借助这个工具,我们可以简单有效的对传统的JDBC编码方式加以改进。

下面是借助Spring JDBC Template修改过的代码,这段代码完成了与上面代码相同的功能。

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update("UPDATE user SET age = 10 WHERE id = 'erica'");可以看到,两行代码完成了上面需要19行代码实现的功能。

所有冗余的代码都通过合理的抽象汇集到了JdbcTemplate中。

无需感叹,借助Template模式,我们大致也能实现这样一个模板,不过,Spring的设计者已经提前完成了这一步骤。

org.springframework.jdbc.core.JdbcTemplate中包含了这个模板实现的代码,经过Spring设计小组精心设计,这个实现可以算的上是模板应用的典范。

特别是回调(CallBack)的使用,使得整个模板结构清晰高效。

值得一读。

再对上面的例子进行一些改进,通过PrepareStatement执行update操作以避免SQL Injection 漏洞9:JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update("UPDATE user SET age = ? WHERE id = ?",new PreparedStatementSetter() {public void setValues(PreparedStatementSetter ps)throws SQLException {ps.setInt(1, 18);ps.setString(2, "erica");}});可以看到,上面引用了update方法的另一个版本,传入的参数有两个,第一个用于创建PreparedStatement的SQL。

相关文档
最新文档