Spring与ibatis整合学习心得

合集下载

殷广超_Spring学习心得

殷广超_Spring学习心得

对Spring 框架的学习心得一、概要介绍Spring 框架估计大家都已经了解。

它的目的是解决企业应用开发的复杂性,在功能上是用基本的JavaBean代替EJB,并提供了更多的企业应用功能。

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。

Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式。

现在把Spring主要的并且非常基础的IOC与AOP的应用一些心得给大家介绍一下。

1、核心容器:核心容器提供 Spring 框架的基本功能。

核心容器的主要组件是BeanFactory,它是工厂模式的实现。

BeanFactory 使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

2、 Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。

所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。

Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。

通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

这两个方面应该说在Spring中用到的非常广泛。

二、详细介绍1、IOC的说明IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。

所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。

从上图可以看到IOC主要包括两个部分的内容,一个是依赖查找、另外一个是依赖注入两个部分。

依赖查找就是容器提供回调接口和上下文环境给组件,例如EJB就是通过这种JNDI的方式进行上下文查找。

示例代码:InitialContext ctx = new InitialContext();Object obj = ctx.lookup(EJBProxy.JNDI);CPTransHome localhome(CPTransHome)PortableRemoteObject.narrow(obj,CPTransHome.class);依赖查找的主要问题是,这段代码必须依赖于JNDI环境,所以它不能在应用服务器之外运行,并且如果要用别的方式取代JNDI来查找资源和协作对象,就必须把JNDI代码抽出来重构到一个策略方法中去。

Spring集成ibtis

Spring集成ibtis

Spring集成iBATIS目录1 概述 (2)2与iBATIS的集成 (2)3声明式事务 (8)4 iBATIS适用场合 (11)1 概述iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。

但正如SpringA Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比,iBATIS独辟蹊径“iBATIS不是试图从根本上掩盖SQL,实际上,它是在拥抱SQL。

”但别犯愁:SQL本身具备了一些重要的功能,并且通过模板的使用,在Spring应用中采用iBATIS显得轻而易举。

在此摘录中,两位作者将和你一起安装iBATIS并将其集成进你的Spring应用中。

他们也阐明了怎样取得你已编写的SQL语句及把他们映射给iBATIS使用的Bean。

最后,还讨论了iBATIS的优缺点,及为什么是这样的一种方式,即所谓的“在完全OR与JDBC之间的一个幽雅的折衷。

”对象关系持久化(OR Persistence),对Java 开发人员而言,对象关系映射已然成为那类问题了。

我们需要处理功能(processing power)、较佳设计模式及更好持久化框架的组合,从而使解决持久化设计变得更加清晰。

最终,我们开始取得实质性的进展。

象Spring这样的框架就象是方程式的一部分,因为他们让对象关系映射(ORM)花较少的精力来做更多的事情。

你将看到三种框架:iBATIS, JDO及Hibernate1.iBATIS 是一种JDBC助手类框架,它给了你一些OR映射及使用OR的好处,但不带有太多的风险。

2.JDO是一种饱受争议的持久化标准,但它有着一些独特的实现,这使得JDO在行业中也算得上是最完美的持久化框架之一。

3.Hibernate 是在JBoss组织控制下的一开源持久化框架。

它可能是时下最为流行的持久化框架。

Ibatis+spring整合集成开发【原创】

Ibatis+spring整合集成开发【原创】

<parameterproperty="groupID"jdbcType="INTEGER"javaType="ng .Integer"mode="OUT"/> <parameterproperty="group_desc"jdbcType="VARCHAR"javaType="java.l ang.String"mode="OUT"/> <parameterproperty="selectLevel"jdbcType="VARCHAR"javaType="java. lang.String"mode="OUT"/> <parameterproperty="updateLevel"jdbcType="VARCHAR"javaType="java. lang.String"mode="OUT"/> <parameterproperty="addLelvel"jdbcType="VARCHAR"javaType=" ng.String"mode="OUT"/> <parameterproperty="delelteLevel"jdbcType="VARCHAR"javaType="java .lang.String"mode="OUT"/> <parameterproperty="Account_id"jdbcType="INTEGER"javaType="java.l ang.Integer"mode="OUT"/> <parameterproperty="Grade"jdbcType="INTEGER"javaType="ng.I nteger"mode="OUT"/> <parameterproperty="account"jdbcType="VARCHAR"javaType="ng .String"mode="OUT"/> <parameterproperty="Name"jdbcType="VARCHAR"javaType="ng.St ring"mode="OUT"/> <parameterproperty="Mobile"jdbcType="VARCHAR"javaType="ng. String"mode="OUT"/> <parameterproperty="Result"jdbcType="INTEGER"javaType="ng. Integer"mode="OUT"/> </parameterMap> <procedureid="login_user"parameterMap="login_pro"> <![CDATA[{ call procedure_ecsystem_login(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) }]]> </procedure> </sqlMap>

Spring的学习心得

Spring的学习心得

Spring的学习⼼得(计应134 袁振宇)Spring框架是⼀个轻量级的控制反转(IoC)技术和⾯向切⾯编程(AOP)技术的容器框架,它是为了解决企业应⽤开发的复杂性⽽创建的。

框架的主要优势之⼀就是其分层架构,分层架构允许编程⼈员选择使⽤哪⼀个组件,同时为 J2EE 应⽤程序开发提供集成的框架。

Spring完成EJB的事情是⽤基本的JavaBean。

Spring的不仅可以⽤于服务器端的开发。

从它的简单性、可测试性和松耦合的⾓度⽽⾔,很多的Java应⽤都可以⽤到Spring。

Spring的核⼼是控制反转(IoC)和⾯向切⾯(AOP)。

简单来说,Spring是⼀个分层的轻量级开源框架。

Spring 框架是⼀个分层架构,Spring框架系统不同于J2EE平台中的很多其他框架系统,Spring框架并不是⼀个⼀体化的整体框架系统,他采⽤的是分层架构设计和组件化实现。

它是由 7 个定义良好的模块组成。

Spring 模块构建在核⼼容器之上,核⼼容器定义了创建、配置和管理 bean 的⽅Spring 框架是⼀个分层架构,由 7 个定义良好的模块组成。

Spring 模块构建在核⼼容器之上,核⼼容器定义了创建、配置和管理 bean 的⽅式。

如图所⽰(图⽚来⾃⽹络)如何使⽤Spring呢,⽅法如下⾸先登陆⽹站下载Spring。

解压下载到的压缩包,解压缩之后的应有如下⼏个⽂件夹。

dist:该⽂件夹下放Spring的jar包,通常只需要Spring.jar⽂件即可。

该⽂件夹下还有⼀些类似spring-Xxx.jar的压缩包,这些压缩包是spring.jar压缩包的⼦模块压缩包。

除⾮确定整个J2EE应⽤只需要使⽤Spring的某⼀⽅⾯时,才考虑使⽤这种分模块压缩包。

docs:该⽂件夹下包含spring的相关⽂档、开发指南及API参考⽂档。

lib:该⽂件夹下包含spring编译和运⾏所依赖的第三⽅类库,该路径下的类库并不是spring必需的,但如果需要使⽤第三⽅类库的⽀持,这⾥的类库就是必需要的。

spring学习心得

spring学习心得

一、Spring入门体验小实例注意:用spring之前要将相应spring包导进来,然后bulid path才能用spring来开发。

Code:package com.service;public class ByeService{private String name;public String getName() {return name;}public void setName(String name) { = name;}public void sayBye(){System.out.println("Lily say byebye to "+name);}}package com.service;public class UserService {private String name;private ByeService byService;public ByeService getByService() {return byService;}public void setByService(ByeService byService) {this.byService = byService;}public String getName() {return name;}public void setName(String name) { = name;}public void sayHello() {System.out.println("Lily"+" say hello to "+name);byService.sayBye();}}package com.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; import erService;public class Test {public static void main(String[] args) {// TODO Auto-generated method stub//使用传统方法来调用UserService的sayHello方法/* UserService userService = new UserService();userService.setName("小丽");userService.sayHello();*///现在用spring来完成上面的任务//1.得到spring的applicationContext对象ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//从ac(代表容器applicationContext)中取得对应的beanUserService us =(UserService) ac.getBean("userService");us.sayHello();//从ac(代表容器applicationContext)中取得对应的bean/*ByeService byeService = (ByeService) ac.getBean("byeService");byeService.sayBye();*/}}XML:<?xml version="1.0" encoding="utf-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><!-- 在容器文件中配置bean(service/dao/domain/action/数据源) --><!-- bean元素的作用是,当我们的spring框架加载的时候,spring就会自动创建一个bean对象,并放入内存相当于执行了:UserService userService = new UserService;userService.setName("小丽");--><bean id="userService" class="erService"><!-- 这里就体现了注入的概念 --><property name="name"><value>小丽</value></property><!-- 在userService中引用 byeService bean --><property name="byService" ref="byeService"/></bean><bean id="byeService" class="com.service.ByeService"><!-- 下面这种给值方式和上面是一个效果,都可以 --><property name="name" value="小鱼"/></bean></beans><!--spring容器不但可以配置bean、注入属性,而且还可以维护bean与bean之间的关系 -->Result:Lily say hello to 小丽Lily say byebye to 小鱼二、什么是Spring和IOC?Spring其实就是一个容器框架,用于配置bean并维护bean之间关系的框架。

spring+ibatis整合后,事务的问题

spring+ibatis整合后,事务的问题

spring+ibatis整合后,事务的问题ibatis独⽴事务处理String resource="SqlMapConfig.xml";Reader reader = null;try {reader = Resources.getResourceAsReader(resource);} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(reader);spring编程事务处理transactionTemplate = (TransactionTemplate)factory.getBean("transactionTemplate");List<Testtb> tbs = null;tbs = transactionTemplate.execute(new TransactionCallback(){public Object doInTransaction(TransactionStatus ts){try{}catch (Exception e){ts.setRollbackOnly();}finally{}}});spring 声明事务<bean id="propertyConfig"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location"><value>jdbc.properties</value></property></bean><bean id="dataSource"class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName"><value>java:comp/env/jdbc/mysqlDB</value></property></bean><!--<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"><value>${jdbc.driver}</value></property><property name="url"><value>${jdbc.url}</value></property><property name="username"><value>${ername}</value></property><property name="password"><value>${jdbc.password}</value></property></bean>--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /></bean><bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager" ref="transactionManager"/></bean><aop:config><aop:pointcut id="pointcut1" expression="execution(* com.ibc.service.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/></aop:config><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="InsertSomedata" isolation="READ_COMMITTED" propagation="REQUIRED" rollback-for="ng.Exception"/></tx:attributes></tx:advice><tx:annotation-driven transaction-manager="transactionManager"/><bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager" /><property name="transactionAttributes"><props><prop key="InsertSomedata">PROPAGATION_REQUIRED,-Exception</prop></props></property></bean><!--绿⾊部分任选⼀种⽅法即可--><!--<bean id="beanNameAutoProxyCreator"class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames"><list><value>testDatabaseImpl1</value></list></property><property name="interceptorNames"><value>transactionInterceptor</value></property></bean>--><bean id="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><property name="configLocation"><value>SqlMapConfig.xml</value></property><property name="dataSource"><ref bean="dataSource" /></property></bean><bean id="sqlMapClientTemplate"class="org.springframework.orm.ibatis.SqlMapClientTemplate"><property name="sqlMapClient"><ref bean="sqlMapClient" /></property></bean><!--public class TestDatabaseImpl extends SqlMapClientDaoSupport implements TestDatabase{}(1)这个class必须继承于SqlMapClientDaoSupport , spring 才能管理ibatis的事务。

基于ExtJs、Spring和iBATIS的Web系统应用研究

基于ExtJs、Spring和iBATIS的Web系统应用研究

基于ExtJs、Spring和iBATIS的Web系统应用研究摘要:在分析ExtJs、Spring和iBATIS三种开源框架特点的基础之上,提出了集成这三种框架的Web应用系统。

通过实例代码,分析了表现层、控制层、业务逻辑层和数据持久层实现过程。

最后指出了该Web应用系统的优势,以及在开发指标管理系统时的注意事项。

关键词:ExtJs;Spring;iBATIS;富因特网应用;Web应用0引言随着技术的发展,Ajax技术的出现,B/S结构的Web应用逐渐向富客户端发展。

富客户端技术集成了桌面应用的交互性和传统Web应用的部署灵活性,为用户提供一个更丰富、更高和更全方位的网络体验。

ExtJS框架便是一种与后台技术无关的,可以用来开发富客户端的前端Ajax框架。

在开发基于J2EE的中小型企业级的Web应用时,强调的是系统的敏捷开发、可扩展性以及易于维护。

然而,传统的基于EJB的重量级框架技术由于其复杂性,往往使开发过程事倍功半。

类似于Spring的轻量级框架的出现,正好解决上述问题。

目前,轻量级框架的发展已经成为推动J2EE技术发展的重要推动力,成为新一代J2EE 技术构架的基础。

本文通过对ExtJs、Spring和iBATIS的整合研究,探索用户体验好、系统开发高效、可复用性和易于维护的集成框架平台,为指标管理系统的开发提供较好的框架技术支撑。

1开源框架介绍1.1ExtJs框架ExtJs框架是一个强大的JavaScript类库,提供了可重用的对象和部件,简化了开发,丰富了客户端界面效果。

它基于纯HTML/CSS 和JavaScript技术,灵活采用JSON/XML作为交换格式,提供丰富的跨浏览器UI组件,使服务端表示层的负荷减轻,从而达到客户端RIA 应用。

1.2Spring框架Spring是一个提供了解决J2EE问题的一站式框架,包括核心容器、Spring Context、Spring AOP、Spring DAO、Spring ORM、Spring Web和Spring MVC七个模块。

spring学习心得

spring学习心得

控制反转(IoC):spring容器根据配置文件信息,负责创建某类实例,并为实例设置属性值——这种由spring 容器为对象设置属性的方式被称为控制反转Spring的核心机制:依赖注入当某个java实例需要其他java实例时,系统自动提供所需要的实例,无需程序显式获取使用依赖注入不仅可以为Bean注入普通的属性值,还可以注入其他Bean的引用所谓依赖注入,就是在在运行期间,有外部容器动态地将依赖对象注入到组件中(构造方法和set方法)不管是控制反转还是依赖注入,其含义完全相同:当某个java实例(调用者)需要另一个java实例(被调用者)时,在传统的程序设计过程中,在传统的程序设计当中,通常由调用者来创建被调用者的实例在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常是由spring容器来完成,然后注入调用者,因此也称为依赖注入依赖注入通常有两种:1)设值注入:设值注入是指IoC容器使用属性的setter方法来注入被依赖的实例2)构造注入:这种利用构造器来设置依赖关系的方式,被称为构造注入两种注入方式的区别:创建Person实例中Axe属性的时机不同——设值注入是先通过无参数的构造器创建一个bean实例,然后调用对应的setter方法注入依赖关系;而构造注入则直接调用有参数的构造器,当bean实例创建完成后,已经完成了依赖关系的注入Spring提供的服务1)事物管理服务2)JMS服务(Java消息服务是基于java的消息中间件、是javaEE的一部分、用于在多个Java应用之间发送消息、该机制使得多个分布式应用可以异步通信、提高软件可靠性、降低耦合度)3)Spring core核心服务4)持久化服务ApplicationContext事件机制:Spring的事件机制与所有的事件机制都基本相似,它们都需要事件源、事件、事件监听器,此处的事件源是ApplicationContext,且事件必须有java程序显式触发Spring事件框架有两个重要成员:1)ApplicationEvent:容器事件,必须由ApplicationContext发布2)ApplicationListener:监听器,可由容器中的任何监听器bean担任通过ApplicationEvent类和ApplicationListener接口,可实现ApplicationContext的事件处理如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被触发在默认情况下,当spring创建ApplicationContext容器时,Spring会自动预初始化容器中所有的singleton实例,如果我们不想让Spring容器预初始化某个singleton Bean,则可为该<bean…/>元素增加lazy-init属性,指定该属性为true,则Spring不会预初始化该Bean实例,如下面配置文件所示:<bean id=”bean2” class=”lee.Test2” lazy-init=”true”/>容器中Bean的作用域当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域,Spring支持如下的5种作用域1)singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例2)prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Beans时,都将产生一个新的Bean实例3)request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求都将会产生不同的Bean实例。

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

Spring与ibatis整合学习心得
梁飞虎首先,明确一下ibatis在此工程中的作用相当于hibernate,就是进行数据库的访问,也就是连接操作数据库用的。

因此常说的SSH结构也可用SSI来取代,只是ibatis是一个轻量级的框架。

在spring.jar包中有org.springframework.orm.ibatis.SqlMapClientFactoryBean类,此类用于读取ibatis中的配置文件(总配置文件)sqlMapConfig.xml,具体的配置位置是在applicationContext.xml中:
标记1
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation">
<value>WEB-INF/sqlMapConfig.xml</value>
</property>
</bean>
而sqlMapConfig.xml文件中包含ibatis的map文件信息,这点不再详述。

SqlMapClientFactoryBean,这个class实现了两个interface:FactoryBean和InitializingBean,InitializingBean只有一个方法afterPropertiesSet()
spring调用构造函数后,发现它实现了InitializingBean接口,所以还会调用afterPropertiesSet来进一步初始化此class。

sqlMapClient 就是在这里面创建的。

至此一个完整的工厂创建完成。

FactoryBean接口主要方法就是public Object getObject();
要知道SqlMapClientFactoryBean是一个工厂类,他的作用就是你需要的时候调用它的一个方法,它就会返回你一个你需要的对象。

当然此处返回的就是一个sqlMapClient 对象。

所以这里的getObject实现就是把sqlMapClient 返回给调用者。

spring就是根据接口里的定义来调用getObject方法的,这样可以忽略到底是调用的那个对象的实例(也就是不关心调用的是哪个factory)。

也不关心返回的是什么对象,spring只知道调用了getObject就可以得到此factory所创建的对象就够了。

标记2
<bean id="zjjyyxDao"
class="com.cdc.capital.ibatis.dao.impl.ZjjyyxDaoImpl">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean>
public class ZjjyyxDaoImpl extends SqlMapClientDaoSupport implements ZjjyyxDAO{
/**
*资金划转录入
*@param yxb
*@return int
*/
public int saveZjjyyx(ZjjyyxBean yxb){
return this.getSqlMapClientTemplate().update("insertZjjyyx", yxb);
}
}
SqlMapClientDaoSupport类有setSqlMapClient(SqlMapClient)方法,通过标记1 和标记2处的配置,再结合Spring的IOC功能,可以得知SqlMapClientFactoryBean读取的sqlMapConfig.xml文件的信息已经传递到了SqlMapClientDaoSupport中。

所以,他调用自己的get…方法可以获得到和ibatis一样的SqlMapClient对象,从而能够连接操作数据库。

相关文档
最新文档