zoukankan      html  css  js  c++  java
  • spring ibatis整合

      文章分为2大部分,第1部分谈Spring对ibatis的整合,第2部分谈谈Spring事务管理,第一部分成功实现了,第二部分在实现的时候出现了问题,希望各位高手能多多指点。 
      一 spring整合ibatis 
      1 创建ibatis功能类 
      由于ibatis是基于半自动ORM框架的,对于每个DAO都需要手动编写功能类和xml配置文件,写起来是很费事的。所以,我们选用ibatis的代码自动生成器去生成具体的功能类。 
    下面是用代码自动生成器生成的功能类: 
      abatorConfig.xml文件,这个配置文件是ibatis的代码自动生成器需要配置的文件。 
    Java代码  
     <?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; 
     
    Java代码  
    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实现类: 
    Java代码  
     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;     
    }  
     
       
     
    Java代码  
     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文件需要手动去编写的。 
    Java代码  
    <?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的功能类 
     
    Java代码  
    <?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的事务管理,但没用成功,希望各位高手能看看,问题出在哪里? 
       测试类: 
      
    Java代码  
    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文件 
    Java代码  
    <?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>  
     
    在成功插入第一条数据后,插入第二条会失败,我想失败后事务自动回滚,但第一条的数据依然成功插入了。感觉是配置文件有问题,但具体也不太清楚。 
      
  • 相关阅读:
    codevs 1792 分解质因数
    ScrollView嵌套ViewPager,ViewPager内容不显示问题
    AndroidStudio不重新运行,Debug调试已有进程
    Android进阶之Fragment与Activity之间的数据交互
    Android修改包名的方法,简单粗暴。
    android studio 按钮运行按钮后,不弹出选择运行模拟器的对话框
    RGB颜色值与十六进制颜色码转换工具
    Android Studio查看其它APP的布局结构
    android实现多条件筛选列表菜单筛选菜单
    Android,一条线串联实心圆布局
  • 原文地址:https://www.cnblogs.com/huapox/p/3299847.html
Copyright © 2011-2022 走看看