Spring和iBatis整合的例子

OR Mapping的思想相信不用多说大家都明白了,在这里我选择的是ibatis由于手动的控制事务会带来很多额外的工作,同时也没有很好的体现面向对象的思想,因而利用ibatis整合spring ;由于要注意的细节非常多现在整理核心步骤如下:

配置前需把ibatis的jar导入到工程,这里从略

一 web.xml的配置
Java代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <web-app version="2.4"  
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
  7.   <servlet>   
  8.     <description>This is the description of my J2EE component</description>   
  9.     <display-name>This is the display name of my J2EE component</display-name>   
  10.     <servlet-name>InserttoDBServlet</servlet-name>   
  11.     <servlet-class>service.InserttoDBServlet</servlet-class>   
  12.   </servlet>   
  13.   <servlet-mapping>   
  14.     <servlet-name>InserttoDBServlet</servlet-name>   
  15.     <url-pattern>/InserttoDBServlet</url-pattern>   
  16.   </servlet-mapping>   
  17.     
  18.   <context-param>   
  19.     <param-name>contextConfigLocation</param-name>   
  20.     <param-value>   
  21.         classpath:applicationContext.xml   
  22.     </param-value>   
  23. </context-param>   
  24. <listener>   
  25.     <listener-class>   
  26.         org.springframework.web.context.ContextLoaderListener   
  27.     </listener-class>   
  28. </listener>   
  29.     
  30. <servlet>   
  31.         <servlet-name>action</servlet-name>   
  32.         <servlet-class>   
  33.             org.apache.struts.action.ActionServlet   
  34.         </servlet-class>   
  35.         <init-param>   
  36.             <param-name>config</param-name>   
  37.             <param-value>/WEB-INF/struts-config.xml</param-value>   
  38.         </init-param>   
  39.         <load-on-startup>1</load-on-startup>   
  40.     </servlet>   
  41.   <servlet>   
  42.     <description>This is the description of my J2EE component</description>   
  43.     <display-name>This is the display name of my J2EE component</display-name>   
  44.     <servlet-name>TestServlet</servlet-name>   
  45.     <servlet-class>test.TestServlet</servlet-class>     
  46.   </servlet>   
  47.   
  48.     <servlet-mapping>   
  49.         <servlet-name>action</servlet-name>   
  50.         <url-pattern>*.do</url-pattern>   
  51.     </servlet-mapping>   
  52.   <servlet-mapping>   
  53.     <servlet-name>TestServlet</servlet-name>   
  54.     <url-pattern>/servlet/TestServlet</url-pattern>   
  55.   </servlet-mapping>   
  56.     
  57.   <filter>   
  58.       <filter-name>ExtFilter</filter-name>   
  59.      <filter-class>filter.ExtFilter</filter-class>   
  60.       
  61.   </filter>   
  62.     
  63.   <filter-mapping>   
  64.      <filter-name>ExtFilter</filter-name>   
  65.     <url-pattern>/*</url-pattern>   
  66.   </filter-mapping>   
  67.     
  68. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>InserttoDBServlet</servlet-name>
    <servlet-class>service.InserttoDBServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>InserttoDBServlet</servlet-name>
    <url-pattern>/InserttoDBServlet</url-pattern>
  </servlet-mapping>
 
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:applicationContext.xml
    </param-value>
</context-param>
<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>
 
<servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>
            org.apache.struts.action.ActionServlet
        </servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>test.TestServlet</servlet-class>  
  </servlet>

    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/servlet/TestServlet</url-pattern>
  </servlet-mapping>
 
  <filter>
      <filter-name>ExtFilter</filter-name>
     <filter-class>filter.ExtFilter</filter-class>
   
  </filter>
 
  <filter-mapping>
     <filter-name>ExtFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 
</web-app>

二 applicationContext.xml文件的配置
Java代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   
  3. <beans>   
  4. <bean id="transactionManager"  
  5.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   
  6.         <property name="dataSource" ref="dataSource_oracle" />   
  7.     </bean>   
  8.   
  9.     <bean id="dataSource"  
  10.         class="org.apache.commons.dbcp.BasicDataSource"  
  11.         destroy-method="close">   
  12.         <property name="driverClassName"  
  13.             value="com.mysql.jdbc.Driver" />   
  14.         <property name="url" value="jdbc:mysql://localhost:3306/test" />   
  15.         <property name="username" value="root" />   
  16.         <property name="password" value="root" />   
  17.         <property name="initialSize" value="1" />   
  18.         <property name="maxActive" value="4" />   
  19.     </bean>   
  20.   
  21.     <bean id="dataSource_oracle"  
  22.         class="org.apache.commons.dbcp.BasicDataSource"  
  23.         destroy-method="close">   
  24.         <property name="driverClassName"  
  25.             value="oracle.jdbc.OracleDriver" />   
  26.         <property name="url" value="jdbc:oracle:thin:@192.168.100.235:1521:mpptest" />   
  27.         <property name="username" value="gmcc" />   
  28.         <property name="password" value="skywin" />   
  29.         <property name="initialSize" value="1" />   
  30.         <property name="maxActive" value="4" />   
  31.     </bean>   
  32.        
  33.     <bean id="sqlMapClient"  
  34.         class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">   
  35.         <property name="configLocation"  
  36.             value="classpath:sqlmap-config.xml" />   
  37.         <property name="dataSource" ref="dataSource_oracle" />   
  38.     </bean>   
  39.   
  40.     <bean id="baseTxService"  
  41.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
  42.         abstract="true">   
  43.         <property name="transactionManager" ref="transactionManager" />   
  44.         <property name="proxyTargetClass" value="true" />   
  45.         <property name="transactionAttributes">   
  46.             <props>   
  47.                 <prop key="insert*">PROPAGATION_REQUIRED</prop>   
  48.                 <prop key="query*">readOnly</prop>   
  49.                 <prop key="get*">readOnly</prop>   
  50.                 <prop key="del*">PROPAGATION_REQUIRED</prop>   
  51.                 <prop key="update*">PROPAGATION_REQUIRED</prop>   
  52.             </props>   
  53.         </property>   
  54.     </bean>   
  55.       
  56.     <bean id="studentDao" class="dao.StudentDaoImpl">   
  57.        <property name="sqlMapClient" ref="sqlMapClient"></property>   
  58.     </bean>   
  59.       
  60.     <bean id="studentService" class="service.StudentServiceImpl">   
  61.         <property name="studentDao" ref="studentDao"></property>   
  62.     </bean>   
  63.       
  64.     <bean id="studentServiceProxy" parent="baseTxService">   
  65.        <property name="target" ref="studentService"></property>   
  66.     </bean>   
  67.       
  68.     <bean id="treeService" class="service.TreeServiceImpl_map">   
  69.          <property name="treeDao" ref="treeDao"></property>   
  70.     </bean>   
  71.       
  72.     <bean id="treeServiceProxy" parent="baseTxService">   
  73.        <property name="target" ref="treeService"></property>   
  74.     </bean>   
  75.       
  76.     <bean id="treeDao" class="dao.TreeDaoImpl">   
  77.        <property name="sqlMapClient" ref="sqlMapClient"></property>   
  78.     </bean>   
  79.       
  80.     <bean id="xmlTreeService" class="service.XmlTreeServiceImpl"></bean>   
  81. </beans>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource_oracle" />
    </bean>

    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName"
            value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="root" />
        <property name="initialSize" value="1" />
        <property name="maxActive" value="4" />
    </bean>

    <bean id="dataSource_oracle"
        class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName"
            value="oracle.jdbc.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@192.168.100.235:1521:mpptest" />
        <property name="username" value="gmcc" />
        <property name="password" value="skywin" />
        <property name="initialSize" value="1" />
        <property name="maxActive" value="4" />
    </bean>
	
    <bean id="sqlMapClient"
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation"
            value="classpath:sqlmap-config.xml" />
        <property name="dataSource" ref="dataSource_oracle" />
    </bean>

    <bean id="baseTxService"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
        abstract="true">
        <property name="transactionManager" ref="transactionManager" />
        <property name="proxyTargetClass" value="true" />
        <property name="transactionAttributes">
            <props>
                <prop key="insert*">PROPAGATION_REQUIRED</prop>
                <prop key="query*">readOnly</prop>
                <prop key="get*">readOnly</prop>
                <prop key="del*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
   
    <bean id="studentDao" class="dao.StudentDaoImpl">
       <property name="sqlMapClient" ref="sqlMapClient"></property>
    </bean>
   
    <bean id="studentService" class="service.StudentServiceImpl">
        <property name="studentDao" ref="studentDao"></property>
    </bean>
   
    <bean id="studentServiceProxy" parent="baseTxService">
       <property name="target" ref="studentService"></property>
    </bean>
   
    <bean id="treeService" class="service.TreeServiceImpl_map">
         <property name="treeDao" ref="treeDao"></property>
    </bean>
   
    <bean id="treeServiceProxy" parent="baseTxService">
       <property name="target" ref="treeService"></property>
    </bean>
   
    <bean id="treeDao" class="dao.TreeDaoImpl">
       <property name="sqlMapClient" ref="sqlMapClient"></property>
    </bean>
   
    <bean id="xmlTreeService" class="service.XmlTreeServiceImpl"></bean>
</beans>

三 sqlmap-config.xml 文件配置
Java代码 复制代码  收藏代码
  1. <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">   
  2. <sqlMapConfig>   
  3.     <sqlMap resource="student_oracle.xml" />   
  4.     <sqlMap resource="treeNode_oracle.xml" />   
  5. </sqlMapConfig>  
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    <sqlMap resource="student_oracle.xml" />
    <sqlMap resource="treeNode_oracle.xml" />
</sqlMapConfig>

四 ormpping文件的配置(student_oracle.xml等 )
Java代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. <!DOCTYPE sqlMap        
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        
  4.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">   
  5. <sqlMap namespace="Student_oracle">   
  6.     <resultMap id="result"  
  7.         class="entity.Student">   
  8.         <result property="stuId" column="id"  
  9.             columnIndex="1" />   
  10.         <result property="name" column="stuname"  
  11.             columnIndex="2" />   
  12.         <result property="password" column="stupassword" columnIndex="3" />   
  13.     </resultMap>   
  14.        
  15.     <insert id="insertToDb">   
  16.         insert into test_qjk_stu(id,stuname,stupassword)values(#stuId#,#name#,#password#)   
  17.     </insert>   
  18.       
  19.     <insert id="insertTest">   
  20.         <selectKey resultClass="Integer" keyProperty="stuId">      
  21.               SELECT test_qjk_stu_seq.nextval FROM DUAL       
  22.         </selectKey>   
  23.         insert into test_qjk_stu(id,stuname,stupassword)values(#stuId#,#name#,#password#)       
  24.     </insert>   
  25. </sqlMap>  
<?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="Student_oracle">
    <resultMap id="result"
        class="entity.Student">
        <result property="stuId" column="id"
            columnIndex="1" />
        <result property="name" column="stuname"
            columnIndex="2" />
        <result property="password" column="stupassword" columnIndex="3" />
    </resultMap>
	
    <insert id="insertToDb">
        insert into test_qjk_stu(id,stuname,stupassword)values(#stuId#,#name#,#password#)
    </insert>
   
    <insert id="insertTest">
        <selectKey resultClass="Integer" keyProperty="stuId">   
              SELECT test_qjk_stu_seq.nextval FROM DUAL    
        </selectKey>
        insert into test_qjk_stu(id,stuname,stupassword)values(#stuId#,#name#,#password#)    
    </insert>
</sqlMap>

五 实体bean代码
Java代码 复制代码  收藏代码
  1. package entity;   
  2.   
  3. import java.util.Date;   
  4.   
  5. public class Student {   
  6.       
  7.     private Integer stuId;   
  8.     private String name;   
  9.     private Date birthday;   
  10.     private String sex;   
  11.     private String passport;   
  12.     private byte[] password;   
  13.       
  14.     public byte[] getPassword() {   
  15.         return password;   
  16.     }   
  17.     public void setPassword(byte[] password) {   
  18.         this.password = password;   
  19.     }   
  20.     public Date getBirthday() {   
  21.         return birthday;   
  22.     }   
  23.     public void setBirthday(Date birthday) {   
  24.         this.birthday = birthday;   
  25.     }   
  26.     public String getName() {   
  27.         return name;   
  28.     }   
  29.     public void setName(String name) {   
  30.         this.name = name;   
  31.     }   
  32.     public String getPassport() {   
  33.         return passport;   
  34.     }   
  35.     public void setPassport(String passport) {   
  36.         this.passport = passport;   
  37.     }   
  38.     public String getSex() {   
  39.         return sex;   
  40.     }   
  41.     public void setSex(String sex) {   
  42.         this.sex = sex;   
  43.     }   
  44.   
  45.       
  46.     public Integer getStuId() {   
  47.         return stuId;   
  48.     }   
  49.     public void setStuId(Integer stuId) {   
  50.         this.stuId = stuId;   
  51.     }   
  52.     public String toString(){   
  53.         return "stuid:"+stuId+"---name:"+name+"---passport:"+passport+"-----sex:"+sex+"--birthday:"+birthday;   
  54.     }   
  55.   
  56. }  
package entity;

import java.util.Date;

public class Student {
   
    private Integer stuId;
    private String name;
    private Date birthday;
    private String sex;
    private String passport;
    private byte[] password;
   
    public byte[] getPassword() {
        return password;
    }
    public void setPassword(byte[] password) {
        this.password = password;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassport() {
        return passport;
    }
    public void setPassport(String passport) {
        this.passport = passport;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

   
    public Integer getStuId() {
        return stuId;
    }
    public void setStuId(Integer stuId) {
        this.stuId = stuId;
    }
    public String toString(){
        return "stuid:"+stuId+"---name:"+name+"---passport:"+passport+"-----sex:"+sex+"--birthday:"+birthday;
    }

}

六 dao实现类
Java代码 复制代码  收藏代码
  1. package dao;   
  2.   
  3. import java.sql.SQLException;   
  4. import java.util.List;   
  5.   
  6. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;   
  7.   
  8. import util.Print;   
  9.   
  10. import entity.Student;   
  11.   
  12. public class StudentDaoImpl extends SqlMapClientDaoSupport implements StudentDao {   
  13.   
  14.     public void insertToDb(Student stu) {   
  15.           
  16.           getSqlMapClientTemplate().insert("insertToDb", stu);   
  17.     }   
  18.   
  19.     public Student queryStuById(Integer id) {   
  20.         Student stu=(Student) getSqlMapClientTemplate().queryForObject("queryStuById", id);   
  21.         Print.contrlPrint("dao查到的对象是"+stu);   
  22.         return stu;   
  23.     }   
  24.   
  25.     public List getSomeStu(int start, int pageSize) {   
  26.         System.out.println("dao ---start"+start);   
  27.         System.out.println("dao ---pageSize"+pageSize);   
  28.         List list=getSqlMapClientTemplate().queryForList("queryStudent"null, start, pageSize);   
  29.         System.out.println("dao---list---size"+list.size());   
  30.         return list;   
  31.     }   
  32.   
  33.     public Long getStudentCount() {   
  34.         return (Long) getSqlMapClientTemplate().queryForObject("getStudentCount"null);   
  35.     }   
  36.   
  37.     public void delStuById(Long stuId) {   
  38.           getSqlMapClientTemplate().delete("delStuById", stuId);   
  39.           
  40.     }   
  41.   
  42.     public void updateStudent(Student stu) {   
  43.         getSqlMapClientTemplate().update("updateStudent", stu);   
  44.           
  45.     }   
  46.       
  47.       
  48.     public List test(){   
  49.         return getSqlMapClientTemplate().queryForList("test",null);   
  50.          
  51.     }   
  52.   
  53.     public Integer insertTest(Student stu) {   
  54.         Print.contrlPrint("调用了insertTest");   
  55.         return (Integer) getSqlMapClientTemplate().insert("insertTest", stu);   
  56.     }   
  57.   
  58. }  
package dao;

import java.sql.SQLException;
import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import util.Print;

import entity.Student;

public class StudentDaoImpl extends SqlMapClientDaoSupport implements StudentDao {

    public void insertToDb(Student stu) {
       
          getSqlMapClientTemplate().insert("insertToDb", stu);
    }

    public Student queryStuById(Integer id) {
        Student stu=(Student) getSqlMapClientTemplate().queryForObject("queryStuById", id);
        Print.contrlPrint("dao查到的对象是"+stu);
        return stu;
    }

    public List getSomeStu(int start, int pageSize) {
        System.out.println("dao ---start"+start);
        System.out.println("dao ---pageSize"+pageSize);
        List list=getSqlMapClientTemplate().queryForList("queryStudent", null, start, pageSize);
        System.out.println("dao---list---size"+list.size());
        return list;
    }

    public Long getStudentCount() {
        return (Long) getSqlMapClientTemplate().queryForObject("getStudentCount", null);
    }

    public void delStuById(Long stuId) {
          getSqlMapClientTemplate().delete("delStuById", stuId);
       
    }

    public void updateStudent(Student stu) {
        getSqlMapClientTemplate().update("updateStudent", stu);
       
    }
   
   
    public List test(){
        return getSqlMapClientTemplate().queryForList("test",null);
      
    }

    public Integer insertTest(Student stu) {
        Print.contrlPrint("调用了insertTest");
        return (Integer) getSqlMapClientTemplate().insert("insertTest", stu);
    }

}

七 业务层实现类
Java代码 复制代码  收藏代码
  1. package service;   
  2.   
  3. import java.util.List;   
  4.   
  5. import util.Tools;   
  6.   
  7. import dao.StudentDao;   
  8. import entity.Student;   
  9.   
  10. public class StudentServiceImpl implements StudentService {   
  11.   
  12.     private StudentDao studentDao;   
  13.       
  14.     public void insertToDb(Student stu) {   
  15.           
  16.         studentDao.insertToDb(stu);   
  17. //        Integer  id=studentDao.insertTest(stu);   
  18. //        System.out.println("插入记录的id是"+id);   
  19.     }   
  20.   
  21.     public StudentDao getStudentDao() {   
  22.         return studentDao;   
  23.     }   
  24.   
  25.     public void setStudentDao(StudentDao studentDao) {   
  26.         this.studentDao = studentDao;   
  27.     }   
  28.   
  29.     public Student queryById(Integer id) {   
  30.           
  31.         return studentDao.queryStuById(id);   
  32.     }   
  33.   
  34.     public List getSomeStu(int start, int pageSize) {   
  35.           
  36.         return studentDao.getSomeStu(start, pageSize);   
  37.     }   
  38.   
  39.     public String getResponseJson(int start, int pageSize) {   
  40.         List list=getSomeStu(start, pageSize);   
  41.         Long count=getStudentCount();   
  42.         return Tools.getResponseJson(list,count);   
  43.     }   
  44.   
  45.     public Long getStudentCount() {   
  46.           
  47.         return studentDao.getStudentCount();   
  48.     }   
  49.   
  50.     public void delStuById(Long stuId) {   
  51.         studentDao.delStuById(stuId);   
  52.           
  53.     }   
  54.   
  55.     public void updateStudent(Student stu) {   
  56.         studentDao.updateStudent(stu);   
  57.     }   
  58.   
  59. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值