Spring与ibatis整合学习心得
殷广超_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集成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整合集成开发【原创】
<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的学习⼼得(计应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包导进来,然后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整合后,事务的问题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应用系统。
通过实例代码,分析了表现层、控制层、业务逻辑层和数据持久层实现过程。
最后指出了该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学习心得
控制反转(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实例。
spring整合ibatis事务管理
spring整合ibatis事务管理Spring通过DAO模式,提供了对iBATIS的良好⽀持。
SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建。
与hibernate类似,Spring 提供了SqlMapClientDaoSupport对象,我们的DAO可以继承这个类,通过它所提供的SqlMapClient Template对象来操纵数据库。
看起来这些概念都与hibernate类似。
通过SqlMapClientTemplate来操纵数据库的CRUD是没有问题的,这⾥⾯关键的问题是事务处理。
Spring提供了强⼤的声明式事务处理的功能,我们已经清楚hibernate中如何配置声明式的事务,那么在iBATIS中如何获得声明式事务的能⼒呢?第⼀,我们需要了解的是spring通过AOP来拦截⽅法的调⽤,从⽽在这些⽅法上⾯添加声明式事务处理的能⼒。
典型配置如下:applicationContext-common.xmlXml代码1. <!-- 配置事务特性 -->2.3. <tx:advice id="txAdvice"transaction-manager="事务管理器名称">4.5. <tx:attributes>6.7. <tx:method name="add*"propagation="REQUIRED"/>8.9. <tx:method name="del*"propagation="REQUIRED"/>10.11. <tx:method name="update*"propagation="REQUIRED"/>12.13. <tx:method name="*"read-only="true"/>14.15. </tx:attributes>16.17. </tx:advice>18.19.20.21. <!-- 配置哪些类的⽅法需要进⾏事务管理 -->22.23. <aop:config>24.25. <aop:pointcut id="allManagerMethod"expression="execution(* com.ibatis.manager.*.*(..))"/>26.27. <aop:advisor advice-ref="txAdvice"pointcut-ref="allManagerMethod"/>28.29. </aop:config>这些事务都是声明在业务逻辑层的对象上的。
J2EE学习心得
J2EE学习心得经过一学期对j2ee的学习,是我了解了很多关于三大框架ssh的知识。
虽然学的并不是很扎实但是经过多次的上机练习和这次的结课作业,使我接触到了更多的课外知识,更深刻地了解了三大框架,包括单个知识的应用。
springspring,它就是一个化解了许多在j2ee研发中常用的问题的强悍框架。
spring既是综合性的,也就是模块化的,基于分层架构,它能够并使开发者有效率单独的采用其中任何一部分。
spring由许多模块共同组成,比如,ioc容器、aop、mvc、持久性dao和remoting这些模块都就是相当耦合的,一些模块也就是单一制的。
spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。
spring的架构基础是基于使用javabean属性的inversionofcontrol容器。
然而,这仅仅是完整图景中的一部分:spring在使用ioc容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。
spring提供了唯一的数据访问抽象,包括简单和有效率的jdbc框架,极大的改进了效率并且减少了可能的错误。
spring的数据访问架构还集成了hibernate和其他o/rmapping解决方案。
spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如jta或者jdbc事务提供一个一致的编程模型。
spring 提供了一个用标准java语言编写的aop框架,它给pojos提供了声明式的事务管理和其他企业事务--如果需要--还能实现自己的aspects。
这个框架足够强大,使得应用程序能够抛开ejb的复杂性,同时享受着和传统ejb相关的关键服务。
spring还提供了可以和ioc容器集成的强大而灵活的mvcweb框架。
spring与myeclipse的集成其中,spring与myeclipse集成开发一个只应用spring的javaproject是也需要简单的集成步骤,现在简要介绍如下:1.建立一个javaproject2.添加spring的支持包:在目录树中选中工程名,右击选中下拉菜单中的myeclipse→addspringcapabilites…,按照出现的spring向导添加spring需要的类库和配置文件。
mybatis源码分析(三)mybatis-spring整合源码分析
二丶springboot自动装配的关键配置代码
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
1) 实例化SqlSessionFactory, 注意的是, SqlSessionFactoryBean是一个工厂Bean, 最后调用SqlSessionFactoryBean#getObject()生成 对应的SqlSessionFacatory
@Bean @ConditionalOnMissingBean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); factory.setDataSource(dataSource); factory.setVfs(SpringBootVFS.class); if (StringUtils.hasText(this.properties.getConfigLocation())) {
factory.setTypeAliasesSuperType(this.properties.getTypeAliasesSuperType()); } if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) {
factory.setTypeHandlersPackage(this.properties.getTypeHandlersPackage()); } if (!ObjectUtils.isEmpty(this.typeHandlers)) {
mybatis整合spring
mybatis整合springmybatis整合spring根据官方的说法,在ibatis3,也就是mybatis3问世之前,spring3的开发工作就已经完成了,所以spring3中还是没有对mybatis3的支持。
因此由mybatis社区自己开发了一个mybatis-spring用来满足mybatis用户整合spring的需求。
下面就将通过mybatis-spring来整合mybatis跟spring的用法做一个简单的介绍。
mapperfactorybean首先,我们需要从mybatis官网上下载mybatis-spring的jar包添加到我们项目的类路径下,当然也需要添加mybatis的相关jar包和spring的相关jar包。
我们知道在mybatis的所有操作都是基于一个sqlsession的,而sqlsession是由sqlsessionfactory来产生的,sqlsessionfactory又是由sqlsessionfactorybuilder来生成的。
但是mybatis-spring是基于sqlsessionfactorybean的。
在使用mybatis-spring的时候,我们也需要sqlsession,而且这个sqlsession是内嵌在程序中的,一般不需要我们直接访问。
sqlsession也是由sqlsessionfactory来产生的,但是mybatis-spring给我们封装了一个sqlsessionfactorybean,在这个bean里面还是通过sqlsessionfactorybuilder来建立对应的sqlsessionfactory,进而获取到对应的sqlsession。
通过sqlsessionfactorybean我们可以通过对其指定一些属性来提供mybatis的一些配置信息。
所以接下来我们需要在spring的applicationcontext配置文件中定义一个sqlsessionfactorybean。
Spring ibatis批量存储心得 2
Spring+ibatis批量存储心得 21、上回的心得中我强调了startBatch()的批处理的作用,但是其中的使用是个错误用法,并没有发挥出startBatch()的实力,对此给与观众的误导我将在此表示到欠,并贴出正确的用法public class LocalDaoImpl extends SqlMapClientDaoSupport implements LocalDao {public void insertBuNaTaxBatLst(final PaginatedList list){getSqlMapClientTemplate().execute(new SqlMapClientCallback() {public Object doInSqlMapClient(SqlMapExecutor executor)throws SQLException {executor.startBatch();// do some iBatis operations herefor(int i=0,count=list.size();i<count;i++){executor.insert("insertBuNaTaxBatLst", list.get(i));if (i % 50 == 0) {System.out.println("----" + i);//没有意义只为测试}}executor.executeBatch();return null;}});}}这样才能利用上startBatch()威力。
2、注意ibatis的事物默认情况下是自动提交的,如果发现速度上有问题可以留意一下,ibatis只有在显示的声明事物管理的情况下才自动将事物管理改为不自动方式。
3、还是startBatch(),据我测试分析这个鬼东西只有在executeBatch(),才把所有的语句提交到数据库,在提交之前缓存中保留了大量的sql语句和数据对象,很有可能out of memony,对此要留意,可以在大量数据要做插入时,分批用Batch,如:有40000条数据可将其分为4个Batch块,让后将这4个Batch用一个事物提交以保证数据完整性。
spring框架心得体会
spring框架心得体会Spring框架是一个非常流行的企业级Java应用程序开发框架,它具有良好的扩展性、灵活性和高效性。
通过使用Spring框架,我收获了以下几方面的体会和心得。
首先,Spring框架提供了一种基于IoC(控制反转)和AOP(面向切面编程)的开发模式。
这种模式使得应用程序的开发变得非常灵活,可以更加容易实现不同层之间的解耦和模块化。
通过IoC容器的帮助,我们可以将对象的创建和管理的责任转移到Spring框架中,从而降低了开发的复杂度和耦合度。
而通过AOP的支持,我们可以将横切关注点独立出来,实现业务逻辑和横切逻辑的分离,提高了代码的可维护性和可重用性。
其次,Spring框架具有非常丰富的功能和组件。
无论从数据访问、事务管理、Web开发、消息传递到安全性等方面,Spring框架都提供了各种各样的实现方式和配置选项。
例如,通过使用Spring的数据访问模块,我们可以非常方便地集成不同的数据源和ORM框架,实现对数据库的访问。
而使用Spring的事务管理功能,我们可以轻松地实现数据库事务的管理和控制。
使用Spring的Web开发模块,我们可以很容易地实现MVC架构,并且支持各种不同的Web框架和技术。
这些功能和组件的丰富性和可扩展性,使得开发人员可以根据自己的需求选择最适合自己项目的配置和实现方式。
此外,Spring框架还具有很好的可测试性。
在使用Spring框架的开发过程中,我们可以非常方便地使用单元测试和集成测试对应用程序进行测试。
通过使用Spring的依赖注入功能,我们可以很容易地将各个模块和组件进行解耦,把依赖关系交由Spring框架来管理。
这样,我们就可以方便地对每个模块和组件进行单独的测试,从而保证代码的质量和可靠性。
最后,Spring框架还提供了非常丰富的文档和社区支持。
在学习和使用Spring框架的过程中,我发现Spring官方文档详细全面,对框架的各个方面都有详细的介绍和示例代码。
spring框架心得体会
spring框架心得体会Spring框架作为Java企业级应用开发的重要工具,具有轻量级、灵活性、可扩展性等优势。
在我使用Spring框架的过程中,我有以下一些心得体会。
首先,Spring框架提供了依赖注入(Dependency Injection)机制,使得对象之间的依赖关系不再硬编码在代码中,而是通过配置文件进行管理。
这样的设计可以让程序的耦合度大大降低,增加了代码的可维护性和可扩展性。
通过依赖注入,我们可以将组件的创建、装配和管理交由Spring容器去完成,大大简化了开发的工作量。
其次,Spring框架提供了面向切面编程(Aspect-Oriented Programming)的支持。
通过使用切面(Aspect)和切点(Pointcut),我们可以将与业务逻辑无关的横切关注点(如日志记录、事务管理等)从业务代码中提取出来,以此实现关注点的分离。
这样一来,我们可以在不修改原有业务逻辑代码的情况下,灵活地增加、删除和修改关注点,提高了代码的重用性和系统的灵活性。
另外,Spring框架也提供了丰富的模块化功能。
无论是Web开发、数据访问、安全认证还是消息队列等,Spring框架都提供了相应的模块,使得开发者可以根据项目的需要选择使用。
这样的模块化设计,不仅提高了开发效率,也降低了项目的复杂度。
此外,Spring框架还为开发者提供了方便的测试支持。
利用Spring的测试框架,我们可以很方便地进行单元测试、集成测试和系统测试。
通过集成Spring框架和JUnit等测试框架,我们可以实现对Spring组件的自动化测试,保证代码的可靠性和稳定性。
在使用Spring框架的过程中,我也发现了一些需要注意的点。
首先,由于Spring框架是一个功能相对较为庞大而复杂的框架,因此在学习和使用时需要有一定的时间和精力投入。
其次,由于Spring框架提供了很多可扩展和可配置的功能,因此在项目中需要谨慎选择和配置所需要的功能,避免增加项目的复杂度和不必要的开销。
SpringBoot整合mybatis常见问题(小结)
SpringBoot整合mybatis常见问题(⼩结)Spring中常见问题1.NoSuchBeanDefinitionException2.'..Service' that could not be found service找不到3.port 80 was already in use 端⼝号被占⽤4.TemplateInputException 模板解析异常或找不到模板1.检查模板所在的⽬录是否与配置的前缀⽬录相同2.检查返回的模板是否存在,返回值类型是否⼀致3.检查配置前缀时是否以"/"斜杠结尾4.控制层的url与客户端的ur是否⼀致5. 404异常访问资源不存在6. 500异常 500异常要查看控制台Mybatis中常见问题1.springboot中添加maven依赖2.BadSqlGrammarException 错误的sql语句3.BindingException 绑定异常1.检查映射⽂件的路径配置与实际存储位置是否⼀致2.检查dao接⼝的类名是否与映射⽂件的namespace值相同(不能有空格)3.检查dao接⼝中的⽅法名是否在映射⽂件中有对应的id4.IllegalArgumentException原因:同样说我sql映射是否出现了重复性的定义(例如:分别以注解⽅式和xml配置⽂件⽅式进⾏定义,也就是说在同⼀个namespace下出现了重复的元素id)5.SAXParseException xml解析问题补充问题⼀:Mapper类 autowired失败原因:扫描mapper包没有配置或配置不正确解决:⽅案⼀:1. 启动类加@MapperScan("mapperPackagePath")⽅案⼆:增加配置类:package com.yx.readingwebsite.config;import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/*** MapperScannerConfigurer 配置DAO层*/@Configurationpublic class MyBatisMapperScannerConfig {@Beanpublic MapperScannerConfigurer getMapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setSqlSessionFactoryBeanName("sqlSessionFactory");msc.setBasePackage("com.yx.readingwebsite.mapper");return msc;}}问题⼆:Mapper扫描成功后,继续报错,org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):原因:xml的mapper SQL 和 Mapper接⼝没有绑定解决:⽅案⼀:全局配置⽂件application.yml增加mybatis配置【xml mapper包在resource⽬录下】mybatis:mapper-locations: classpath:mapper/*.xml⽅案⼆:增加配置类package com.yx.readingwebsite.config;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import org.springframework.transaction.annotation.TransactionManagementConfigurer;import javax.sql.DataSource;/*** 配置MyBatis,引⼊数据源,sqlSessionFactory,sqlSessionTemplate,事务管理器*/@Configuration //配置类@EnableTransactionManagement //允许使⽤事务管理器public class MyBatisModelConfig implements TransactionManagementConfigurer {@Autowiredprivate DataSource dataSource;@Bean(name = "sqlSessionFactory")public SqlSessionFactory getSqlSessionFactory(){SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();ssfb.setDataSource(dataSource); //设置数据源ssfb.setTypeAliasesPackage("com.yx.readingwebsite.model"); //设置扫描模型包【po】try {Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml");ssfb.setMapperLocations(resources);return ssfb.getObject();} catch (Exception e) {e.printStackTrace();throw new RuntimeException();}}@Bean //获得Session 模板,从⽽获得Sessionpublic SqlSessionTemplate getSqlSessionTemplate(SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}@Override //事务管理器public PlatformTransactionManager annotationDrivenTransactionManager() {return new DataSourceTransactionManager(dataSource);}}需要注意的是,xml版的mybatis⼀定要在sqlSessionFactory中指定mapperLocations,即下图总结:两种配置⽅案。
Spring事务管理及与mybatis整合的事务管理
数据访问事务处理in Spring+Mybatis3.0事务---保证了用户的每一次操作都是可靠的,即使出现了异常的访问,也不至于破坏后台数据的完整性;Java事务简介事务必须符合ISO/IEC所定制的ACID原则1)A(atomicity):原子性在事务执行的过程中,任何的失败就将导致事务的任何修改失效,2)C(consistency):一致性事务回滚时,事务所执行的内容必须恢复到初始状态,即事务执行前的状态3)I(isolation):隔离性事务执行过程中对数据的修改,在提交之前的数据对其他事务不可见4)D(durability):持久性已经提交的数据在事务执行失败时,数据的状态都是正确的.事务分类:全局事务(分布式事务):由应用服务器来管理(如JTA),同时可以用于多个事务性的资源;本地事务本地事务和资源相关,主要通过JDBC来实现在实际应用中,存在一种容器管理事务,容器事务主要是由javaEE应用服务器提供,容器事务大多给予JTA完成,事实上这是在容器中覆盖了JDBC和JTA事务.事务特性分析(use spring)TransactionDefinition 接口来定义事务属性。
Code:public interface TransactionDefinition{int getIsolationLevel();int getPropagationBehavior();int getTimeout();boolean isReadOnly();}事务机制a)事务隔离级别隔离级别是指若干个并发的事务之间的隔离程度。
TransactionDefinition 接口中定义了五个表示隔离级别的常量:TransactionDefinition.ISOLATION_DEFAULT(默认值):表示使用底层数据库的默认隔离级别。
对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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对象,从而能够连接操作数据库。