- 浏览: 59942 次
- 性别:
- 来自: 深圳
最新评论
-
netwelfare:
文章内容有点晦涩,推荐博主看看这篇文章吧,讲解的更通俗易懂一些 ...
https和http区别 -
mumian0417:
stu1,stu2,需要继承studao
spring ibatis整合
文章分为2大部分,第1部分谈Spring对ibatis的整合,第2部分谈谈Spring事务管理,第一部分成功实现了,第二部分在实现的时候出现了问题,希望各位高手能多多指点。
一 spring整合ibatis
1 创建ibatis功能类
由于ibatis是基于半自动ORM框架的,对于每个DAO都需要手动编写功能类和xml配置文件,写起来是很费事的。所以,我们选用ibatis的代码自动生成器去生成具体的功能类。
下面是用代码自动生成器生成的功能类:
abatorConfig.xml文件,这个配置文件是ibatis的代码自动生成器需要配置的文件。
自动生成的pojo:
package com.whpu.computershop.ibatis.pojo;
自动生成的studao接口和studaoimpl实现类:
自动生成的studao配置文件,当然SqlMapConfig.xml文件需要手动去编写的。
配置spring的配置文件去整合IBatis的功能类
上面注释掉的部分是spring的事务管理,本来想用spring去控制ibatis的事务管理,但没用成功,希望各位高手能看看,问题出在哪里?
测试类:
下面是测试结果:
张三
男
1班
20
二 Spring事务管理
Spring事务管理可以让我们的事务在失败时能自动回滚,Spring的事务管理主要有两种实现方式,编程式和声明式。对于编程式,可以用统一的模版去处理事务,但个人感觉违背了侵入式的编程思想。声明式是很现在用的最多的事务处理方式,只需要配置spring的配置文件就可以了,很方便。spring2.x和spring1.x的配置方式是不一样的。
我用的是spring1.x的配置方式,但在实现时出了问题,也不知道为什么,希望高手指出。
Spring application.xml文件
在成功插入第一条数据后,插入第二条会失败,我想失败后事务自动回滚,但第一条的数据依然成功插入了。感觉是配置文件有问题,但具体也不太清楚。
一 spring整合ibatis
1 创建ibatis功能类
由于ibatis是基于半自动ORM框架的,对于每个DAO都需要手动编写功能类和xml配置文件,写起来是很费事的。所以,我们选用ibatis的代码自动生成器去生成具体的功能类。
下面是用代码自动生成器生成的功能类:
abatorConfig.xml文件,这个配置文件是ibatis的代码自动生成器需要配置的文件。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE abatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN" "http://ibatis.apache.org/dtd/abator-config_1_0.dtd" > <abatorConfiguration > <abatorContext > <jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver" connectionURL="jdbc:sqlserver://localhost:1433;databaseName=mydb" userId="sa" password="841026" > <classPathEntry location="F:/Program Files/workspace/SpringTranslateDemo/driver/sqljdbc.jar" /> </jdbcConnection> <javaModelGenerator targetPackage="com.whpu.computershop.ibatis.pojo" targetProject="SpringTranslateDemo" /> <sqlMapGenerator targetPackage="com.whpu.upanddown.ibatis.config" targetProject="SpringTranslateDemo" /> <daoGenerator targetPackage="com.whpu.upanddown.ibatis.dao" targetProject="SpringTranslateDemo" type="GENERIC-CI" /> <table schema="dbo" tableName="student" > </table> </abatorContext> </abatorConfiguration>
自动生成的pojo:
package com.whpu.computershop.ibatis.pojo;
public class Student { /** * This field was generated by Abator for iBATIS. * This field corresponds to the database column dbo.student.stuid * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ private Integer stuid; /** * This field was generated by Abator for iBATIS. * This field corresponds to the database column dbo.student.stuname * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ private String stuname; /** * This field was generated by Abator for iBATIS. * This field corresponds to the database column dbo.student.stusex * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ private String stusex; /** * This field was generated by Abator for iBATIS. * This field corresponds to the database column dbo.student.stuage * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ private Integer stuage; /** * This field was generated by Abator for iBATIS. * This field corresponds to the database column dbo.student.stuclass * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ private String stuclass; /** * This method was generated by Abator for iBATIS. * This method returns the value of the database column dbo.student.stuid * * @return the value of dbo.student.stuid * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public Integer getStuid() { return stuid; } /** * This method was generated by Abator for iBATIS. * This method sets the value of the database column dbo.student.stuid * * @param stuid the value for dbo.student.stuid * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public void setStuid(Integer stuid) { this.stuid = stuid; } /** * This method was generated by Abator for iBATIS. * This method returns the value of the database column dbo.student.stuname * * @return the value of dbo.student.stuname * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public String getStuname() { return stuname; } /** * This method was generated by Abator for iBATIS. * This method sets the value of the database column dbo.student.stuname * * @param stuname the value for dbo.student.stuname * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public void setStuname(String stuname) { this.stuname = stuname; } /** * This method was generated by Abator for iBATIS. * This method returns the value of the database column dbo.student.stusex * * @return the value of dbo.student.stusex * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public String getStusex() { return stusex; } /** * This method was generated by Abator for iBATIS. * This method sets the value of the database column dbo.student.stusex * * @param stusex the value for dbo.student.stusex * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public void setStusex(String stusex) { this.stusex = stusex; } /** * This method was generated by Abator for iBATIS. * This method returns the value of the database column dbo.student.stuage * * @return the value of dbo.student.stuage * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public Integer getStuage() { return stuage; } /** * This method was generated by Abator for iBATIS. * This method sets the value of the database column dbo.student.stuage * * @param stuage the value for dbo.student.stuage * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public void setStuage(Integer stuage) { this.stuage = stuage; } /** * This method was generated by Abator for iBATIS. * This method returns the value of the database column dbo.student.stuclass * * @return the value of dbo.student.stuclass * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public String getStuclass() { return stuclass; } /** * This method was generated by Abator for iBATIS. * This method sets the value of the database column dbo.student.stuclass * * @param stuclass the value for dbo.student.stuclass * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public void setStuclass(String stuclass) { this.stuclass = stuclass; } }
自动生成的studao接口和studaoimpl实现类:
package com.whpu.upanddown.ibatis.dao; import com.whpu.computershop.ibatis.pojo.Student; import com.whpu.computershop.ibatis.pojo.StudentExample; import java.sql.SQLException; import java.util.List; public interface StudentDAO { /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ void insert(Student record) ; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ int updateByPrimaryKey(Student record) throws SQLException; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ int updateByPrimaryKeySelective(Student record) throws SQLException; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ List selectByExample(StudentExample example) throws SQLException; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ Student selectByPrimaryKey(Integer stuid) throws SQLException; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ int deleteByExample(StudentExample example) throws SQLException; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ int deleteByPrimaryKey(Integer stuid) throws SQLException; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ int countByExample(StudentExample example) throws SQLException; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ int updateByExampleSelective(Student record, StudentExample example) throws SQLException; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ int updateByExample(Student record, StudentExample example) throws SQLException; List selectByname(String name) throws SQLException; List selectByclassname(String classname) throws SQLException; }
package com.whpu.upanddown.ibatis.dao; import com.ibatis.sqlmap.client.SqlMapClient; import com.whpu.computershop.ibatis.pojo.Student; import com.whpu.computershop.ibatis.pojo.StudentExample; import java.sql.SQLException; import java.util.List; public class StudentDAOImpl implements StudentDAO { /** * This field was generated by Abator for iBATIS. * This field corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ private SqlMapClient sqlMapClient; /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public StudentDAOImpl(SqlMapClient sqlMapClient) { super(); this.sqlMapClient = sqlMapClient; } public StudentDAOImpl(){ super(); } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public void insert(Student record) { try { sqlMapClient.insert("dbo_student.abatorgenerated_insert", record); sqlMapClient.insert("dbo_student.abatorgenerated_insert", record); } catch (SQLException e) { e.printStackTrace(); } } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public int updateByPrimaryKey(Student record) throws SQLException { int rows = sqlMapClient.update("dbo_student.abatorgenerated_updateByPrimaryKey", record); return rows; } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public int updateByPrimaryKeySelective(Student record) throws SQLException { int rows = sqlMapClient.update("dbo_student.abatorgenerated_updateByPrimaryKeySelective", record); return rows; } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public List selectByExample(StudentExample example) throws SQLException { List list = sqlMapClient.queryForList("dbo_student.abatorgenerated_selectByExample", example); return list; } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public Student selectByPrimaryKey(Integer stuid) throws SQLException { Student key = new Student(); key.setStuid(stuid); Student record = (Student) sqlMapClient.queryForObject("dbo_student.abatorgenerated_selectByPrimaryKey", key); return record; } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public int deleteByExample(StudentExample example) throws SQLException { int rows = sqlMapClient.delete("dbo_student.abatorgenerated_deleteByExample", example); return rows; } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public int deleteByPrimaryKey(Integer stuid) throws SQLException { Student key = new Student(); key.setStuid(stuid); int rows = sqlMapClient.delete("dbo_student.abatorgenerated_deleteByPrimaryKey", key); return rows; } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public int countByExample(StudentExample example) throws SQLException { Integer count = (Integer) sqlMapClient.queryForObject("dbo_student.abatorgenerated_countByExample", example); return count.intValue(); } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public int updateByExampleSelective(Student record, StudentExample example) throws SQLException { UpdateByExampleParms parms = new UpdateByExampleParms(record, example); int rows = sqlMapClient.update("dbo_student.abatorgenerated_updateByExampleSelective", parms); return rows; } /** * This method was generated by Abator for iBATIS. * This method corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ public int updateByExample(Student record, StudentExample example) throws SQLException { UpdateByExampleParms parms = new UpdateByExampleParms(record, example); int rows = sqlMapClient.update("dbo_student.abatorgenerated_updateByExample", parms); return rows; } /** * This class was generated by Abator for iBATIS. * This class corresponds to the database table dbo.student * * @abatorgenerated Thu Feb 11 21:34:33 CST 2010 */ private static class UpdateByExampleParms extends StudentExample { private Object record; public UpdateByExampleParms(Object record, StudentExample example) { super(example); this.record = record; } public Object getRecord() { return record; } } public List selectByname(String stuname) throws SQLException { List list=sqlMapClient.queryForList("dbo_student.selectbystuname", stuname); return list; } public List selectByclassname(String classname) throws SQLException { List list=sqlMapClient.queryForList("dbo_student.selectbyclassname", classname); return list; } public void setSqlMapClient(SqlMapClient sqlMapClient) { this.sqlMapClient = sqlMapClient; } }
自动生成的studao配置文件,当然SqlMapConfig.xml文件需要手动去编写的。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > <sqlMap namespace="dbo_student" > <resultMap id="abatorgenerated_StudentResult" class="com.whpu.computershop.ibatis.pojo.Student" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> <result column="stuid" property="stuid" jdbcType="INTEGER" /> <result column="stuname" property="stuname" jdbcType="VARCHAR" /> <result column="stusex" property="stusex" jdbcType="VARCHAR" /> <result column="stuage" property="stuage" jdbcType="INTEGER" /> <result column="stuclass" property="stuclass" jdbcType="VARCHAR" /> </resultMap> <sql id="abatorgenerated_Example_Where_Clause" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> <iterate property="oredCriteria" conjunction="or" prepend="where" removeFirstPrepend="iterate" > <isEqual property="oredCriteria[].valid" compareValue="true" > ( <iterate prepend="and" property="oredCriteria[].criteriaWithoutValue" conjunction="and" > $oredCriteria[].criteriaWithoutValue[]$ </iterate> <iterate prepend="and" property="oredCriteria[].criteriaWithSingleValue" conjunction="and" > $oredCriteria[].criteriaWithSingleValue[].condition$ #oredCriteria[].criteriaWithSingleValue[].value# </iterate> <iterate prepend="and" property="oredCriteria[].criteriaWithListValue" conjunction="and" > $oredCriteria[].criteriaWithListValue[].condition$ <iterate property="oredCriteria[].criteriaWithListValue[].values" open="(" close=")" conjunction="," > #oredCriteria[].criteriaWithListValue[].values[]# </iterate> </iterate> <iterate prepend="and" property="oredCriteria[].criteriaWithBetweenValue" conjunction="and" > $oredCriteria[].criteriaWithBetweenValue[].condition$ #oredCriteria[].criteriaWithBetweenValue[].values[0]# and #oredCriteria[].criteriaWithBetweenValue[].values[1]# </iterate> ) </isEqual> </iterate> </sql> <select id="abatorgenerated_selectByPrimaryKey" resultMap="abatorgenerated_StudentResult" parameterClass="com.whpu.computershop.ibatis.pojo.Student" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> select stuid, stuname, stusex, stuage, stuclass from dbo.student where stuid = #stuid:INTEGER# </select> <select id="abatorgenerated_selectByExample" resultMap="abatorgenerated_StudentResult" parameterClass="com.whpu.computershop.ibatis.pojo.StudentExample" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> select stuid, stuname, stusex, stuage, stuclass from dbo.student <isParameterPresent > <include refid="dbo_student.abatorgenerated_Example_Where_Clause" /> <isNotNull property="orderByClause" > order by $orderByClause$ </isNotNull> </isParameterPresent> </select> <delete id="abatorgenerated_deleteByPrimaryKey" parameterClass="com.whpu.computershop.ibatis.pojo.Student" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> delete from dbo.student where stuid = #stuid:INTEGER# </delete> <delete id="abatorgenerated_deleteByExample" parameterClass="com.whpu.computershop.ibatis.pojo.StudentExample" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> delete from dbo.student <include refid="dbo_student.abatorgenerated_Example_Where_Clause" /> </delete> <insert id="abatorgenerated_insert" parameterClass="com.whpu.computershop.ibatis.pojo.Student" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> insert into dbo.student (stuid, stuname, stusex, stuage, stuclass) values (#stuid:INTEGER#, #stuname:VARCHAR#, #stusex:VARCHAR#, #stuage:INTEGER#, #stuclass:VARCHAR#) </insert> <update id="abatorgenerated_updateByPrimaryKey" parameterClass="com.whpu.computershop.ibatis.pojo.Student" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> update dbo.student set stuname = #stuname:VARCHAR#, stusex = #stusex:VARCHAR#, stuage = #stuage:INTEGER#, stuclass = #stuclass:VARCHAR# where stuid = #stuid:INTEGER# </update> <update id="abatorgenerated_updateByPrimaryKeySelective" parameterClass="com.whpu.computershop.ibatis.pojo.Student" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> update dbo.student <dynamic prepend="set" > <isNotNull prepend="," property="stuname" > stuname = #stuname:VARCHAR# </isNotNull> <isNotNull prepend="," property="stusex" > stusex = #stusex:VARCHAR# </isNotNull> <isNotNull prepend="," property="stuage" > stuage = #stuage:INTEGER# </isNotNull> <isNotNull prepend="," property="stuclass" > stuclass = #stuclass:VARCHAR# </isNotNull> </dynamic> where stuid = #stuid:INTEGER# </update> <select id="abatorgenerated_countByExample" parameterClass="com.whpu.computershop.ibatis.pojo.StudentExample" resultClass="java.lang.Integer" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> select count(*) from dbo.student <include refid="dbo_student.abatorgenerated_Example_Where_Clause" /> </select> <update id="abatorgenerated_updateByExampleSelective" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> update dbo.student <dynamic prepend="set" > <isNotNull prepend="," property="record.stuid" > stuid = #record.stuid:INTEGER# </isNotNull> <isNotNull prepend="," property="record.stuname" > stuname = #record.stuname:VARCHAR# </isNotNull> <isNotNull prepend="," property="record.stusex" > stusex = #record.stusex:VARCHAR# </isNotNull> <isNotNull prepend="," property="record.stuage" > stuage = #record.stuage:INTEGER# </isNotNull> <isNotNull prepend="," property="record.stuclass" > stuclass = #record.stuclass:VARCHAR# </isNotNull> </dynamic> <isParameterPresent > <include refid="dbo_student.abatorgenerated_Example_Where_Clause" /> </isParameterPresent> </update> <update id="abatorgenerated_updateByExample" > <!-- WARNING - This element is automatically generated by Abator for iBATIS, do not modify. This element was generated on Thu Feb 11 21:34:33 CST 2010. --> update dbo.student set stuid = #record.stuid:INTEGER#, stuname = #record.stuname:VARCHAR#, stusex = #record.stusex:VARCHAR#, stuage = #record.stuage:INTEGER#, stuclass = #record.stuclass:VARCHAR# <isParameterPresent > <include refid="dbo_student.abatorgenerated_Example_Where_Clause" /> </isParameterPresent> </update> <select id="selectbystuname" resultMap="abatorgenerated_StudentResult" parameterClass="java.lang.String" > select stuid, stuname, stusex, stuage, stuclass from dbo.student where stuname=#name# </select> <select id="selectbystuclass" resultMap="abatorgenerated_StudentResult" parameterClass="java.lang.String" > select * from dbo.student as stu where stu.stuclass=#stuclass# </select> </sqlMap>
配置spring的配置文件去整合IBatis的功能类
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 利用spring的DriverManagerDataSource类配置数据源 --> <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"> </property> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=mydb"> </property> <property name="username" value="sa"></property> <property name="password" value="841026"></property> </bean> <!-- 利用spring的SqlMapClientFactoryBean类生成sqlmapclient工厂--> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"> <ref bean="datasource" /> </property> <property name="configLocation" value="com/hjy/SpringTranslateDemo/core/SqlMapConfig.xml"> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="datasource" /> </property> </bean> <bean id="studentdaoimpl" class="com.whpu.upanddown.ibatis.dao.StudentDAOImpl"> <property name="sqlMapClient"> <ref bean="sqlMapClient" /> </property> </bean> <!-- 利用spring的TransactionProxyFactoryBean去对事务进行自动管理 --> <!-- <bean id="studao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref local="transactionManager" /> </property> <property name="target"> <ref local="studentdaoimpl" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> --> <bean id="stu1" class="com.whpu.computershop.ibatis.pojo.Student"> <property name="stuid" value="23"></property> <property name="stuage" value="12"></property> <property name="stuclass" value="1班"></property> <property name="stusex" value="男"></property> </bean> <bean id="stu2" class="com.whpu.computershop.ibatis.pojo.Student"> <property name="stuid" value="1"></property> <property name="stuage" value="13"></property> <property name="stuclass" value="2班"></property> <property name="stusex" value="女"></property> </bean> </beans>
上面注释掉的部分是spring的事务管理,本来想用spring去控制ibatis的事务管理,但没用成功,希望各位高手能看看,问题出在哪里?
测试类:
package com.hjy.SpringTranslateDemo.Test; import java.sql.SQLException; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.ibatis.sqlmap.client.SqlMapClient; import com.whpu.computershop.ibatis.pojo.Student; import com.whpu.upanddown.ibatis.dao.StudentDAO; import com.whpu.upanddown.ibatis.dao.StudentDAOImpl; public class Test { /** * @param args */ public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext( "applicationContext.xml"); SqlMapClient sqlmap = (SqlMapClient) ac.getBean("sqlMapClient"); // StudentDAO studao = (StudentDAO) ac.getBean("studao"); // studentdaoimpl StudentDAO studao = (StudentDAO) ac.getBean("studao"); List list; try { list = studao.selectByname("张三"); Student stu = (Student) list.iterator().next(); System.out.println(stu.getStuname()); System.out.println(stu.getStusex()); System.out.println(stu.getStuclass()); System.out.println(stu.getStuage()); } catch (SQLException e) { e.printStackTrace(); } } }
下面是测试结果:
张三
男
1班
20
二 Spring事务管理
Spring事务管理可以让我们的事务在失败时能自动回滚,Spring的事务管理主要有两种实现方式,编程式和声明式。对于编程式,可以用统一的模版去处理事务,但个人感觉违背了侵入式的编程思想。声明式是很现在用的最多的事务处理方式,只需要配置spring的配置文件就可以了,很方便。spring2.x和spring1.x的配置方式是不一样的。
我用的是spring1.x的配置方式,但在实现时出了问题,也不知道为什么,希望高手指出。
Spring application.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 利用spring的DriverManagerDataSource类配置数据源 --> <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"> </property> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=mydb"> </property> <property name="username" value="sa"></property> <property name="password" value="841026"></property> </bean> <!-- 利用spring的SqlMapClientFactoryBean类生成sqlmapclient工厂--> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"> <ref bean="datasource" /> </property> <property name="configLocation" value="com/hjy/SpringTranslateDemo/core/SqlMapConfig.xml"> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="datasource" /> </property> </bean> <bean id="studentdaoimpl" class="com.whpu.upanddown.ibatis.dao.StudentDAOImpl"> <property name="sqlMapClient"> <ref bean="sqlMapClient" /> </property> </bean> <!-- 利用spring的TransactionProxyFactoryBean去对事务进行自动管理 --> <bean id="studao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref local="transactionManager" /> </property> <property name="target"> <ref local="studentdaoimpl" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="stu1" class="com.whpu.computershop.ibatis.pojo.Student"> <property name="stuid" value="23"></property> <property name="stuage" value="12"></property> <property name="stuclass" value="1班"></property> <property name="stusex" value="男"></property> </bean> <bean id="stu2" class="com.whpu.computershop.ibatis.pojo.Student"> <property name="stuid" value="1"></property> <property name="stuage" value="13"></property> <property name="stuclass" value="2班"></property> <property name="stusex" value="女"></property> </bean> </beans>
在成功插入第一条数据后,插入第二条会失败,我想失败后事务自动回滚,但第一条的数据依然成功插入了。感觉是配置文件有问题,但具体也不太清楚。
相关推荐
简单的 struts2 spring ibatis 整合架构
spring ibatis整合所需jar包
struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码
亲手做的一个spring ibatis整合,刚刚接触ibatis,二话不说,ibatis环境先搭建好。
springMVC spring ibatis整合jar
struts2 spring ibatis整合,以及用户登陆时的拦截器操作,并记录日志的操作
spring与ibatis整合集成实例 spring与ibatis整合集成实例
SSI框架搭建实例教程(struts spring ibatis整合 附切面事物处理)
spring_ibatis整合案例
里面有spring+struts2+ibatis整合的jar包,
一共18个jar包,包括了sitemesh等常用jar包,一般系统都足够了
包括commons-dbcp-1.2.2.jar,commons-logging-1.1.jar,commons-pool-1.3.jar,ibatis-2.3.4.jar,log4j-over-slf4j-1.6.1.jar,ojdbc14.jar,spring-2.5.6.jar
STRUTS2+SPRING+IBATIS 下载后用ECLIPSE打开 结构清晰。 去掉了JAR包 需要的请与我联系 QQ81611911
Struts2+Spring+Ibatis ,里面实现了登录功能, 可供初学者学习,代码很详细, 注释很多, 还可以用于做项目
struts2 spring ibatis 项目整合源码
spring3.2与Ibatis整合,在servlet中获取bean
Struts2 Spring Ibatis实例整合 里面实现了用户登录注册查询删除 认真体会里面的架构
struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例 struts2、spring、ibatis整合实例
struts2 + spring + ibatis 整合例子,仓库:search.maven.org
ibatis与spring 框架整合