持之以恒

          記錄本
          posts - 4, comments - 32, trackbacks - 0, articles - 74
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          ibatis-Spring 整合

          Posted on 2012-05-16 18:21 小白19870626 閱讀(3098) 評論(2)  編輯  收藏 所屬分類: spring

          這兩天一直在研究ibatis與spring的整合 一個小小的demo搞的我頭暈目眩的,但程序一旦跑起來了,突然有一種豁然開朗,重見天日,感覺生活很美好的感覺!,也許,這就是那一行行的代碼帶給我們的不同享受吧。呵呵,廢話就不多說了。

          在此先引用幾句別人的資料。。。

          Spring通過DAO模式,提供了對iBATIS的良好支持。SqlMapClient對象是iBATIS中的主要對象,我們可以通過配置讓spring來管理SqlMapClient對象的創建。

          hibernate類似,Spring提供了SqlMapClientDaoSupport對象,我們的DAO可以繼承這個類,通過它所提供的SqlMapClientTemplate對象來操縱數據庫。看起來這些概念都與hibernate類似。

          通過SqlMapClientTemplate來操縱數據庫的CRUD是沒有問題的。此篇文章沒有進行事務處理。

          本文采用ibatis+spring+mysql 進行編寫

          數據庫腳本如下

          1. create database ibatis;  
          2.   
          3. create table person(  
          4.   id int primary key,  
          5.   name varchar(10),  
          6.   sex int  
          7. );  
          8.    


           

          一:要有一個PO類

             Person.java

          1. package po;  
          2.   
          3. import java.io.Serializable;  
          4.   
          5. public class Person implements Serializable{  
          6.     /** 
          7.      *  
          8.      */  
          9.     private static final long serialVersionUID = -517413165963030507L;  
          10.     /** 
          11.      *  
          12.      */  
          13.     private int id;  
          14.     private String name;  
          15.     private int sex;  
          16.       
          17.     public Person(){  
          18.           
          19.     }  
          20.     public Person(int id,String name,int sex){  
          21.         this.id = id;  
          22.         this.name = name;  
          23.         this.sex = sex;  
          24.     }  
          25.     public int getId() {  
          26.         return id;  
          27.     }  
          28.     public void setId(int id) {  
          29.         this.id = id;  
          30.     }  
          31.     public String getName() {  
          32.         return name;  
          33.     }  
          34.     public void setName(String name) {  
          35.         this.name = name;  
          36.     }  
          37.     public int getSex() {  
          38.         return sex;  
          39.     }  
          40.     public void setSex(int sex) {  
          41.         this.sex = sex;  
          42.     }  
          43.       
          44. }  


          二:DAO接口類

              IAction.java

          1. package dao;  
          2.   
          3. import java.util.List;  
          4.   
          5. import po.Person;  
          6.   
          7. public interface IAction {  
          8.     public boolean insertPerson(Person person);   //添加  
          9.     public boolean deleteById(int id);            //刪除  
          10.     public boolean updatePerson(Person person);    //修改  
          11.     public Person queryById(int id);              //根據ID查詢  
          12.     public List<Person> queryAllPerson();         //查詢全部  
          13. }  

           

          三:DAO實現類
             

             ActionImpl.java 此類繼承SqlMapClientSupport 實現IAction接口

          1. package dao.impl;  
          2.   
          3. import java.io.IOException;  
          4. import java.io.Reader;  
          5. import java.sql.SQLException;  
          6. import java.util.List;  
          7.   
          8. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
          9.   
          10. import com.ibatis.common.resources.Resources;  
          11. import com.ibatis.sqlmap.client.SqlMapClient;  
          12. import com.ibatis.sqlmap.client.SqlMapClientBuilder;  
          13. import com.ibatis.sqlmap.client.SqlMapSession;  
          14.   
          15. import po.Person;  
          16. import dao.IAction;  
          17.   
          18. public class ActionImpl extends SqlMapClientDaoSupport implements IAction {  
          19.   
          20.     //添加操作  
          21.     @Override  
          22.     public boolean insertPerson(Person person) {  
          23.         // TODO Auto-generated method stub  
          24.         getSqlMapClientTemplate().insert("insertPerson",person);  
          25.         return false;  
          26.     }  
          27.       
          28.     //刪除操作  
          29.     @Override  
          30.     public boolean deleteById(int id) {  
          31.         // TODO Auto-generated method stub  
          32.         getSqlMapClientTemplate().delete("deleteById", id);  
          33.         return false;  
          34.     }  
          35.   
          36.       
          37.   
          38.     //查詢全部  
          39.     @Override  
          40.     public List<Person> queryAllPerson() {  
          41.         // TODO Auto-generated method stub  
          42.         List<Person> persons = getSqlMapClientTemplate().queryForList("queryAllPerson");  
          43.         return persons;  
          44.     }  
          45.   
          46.     @Override  
          47.     public Person queryById(int id) {  
          48.         // TODO Auto-generated method stub  
          1.                     //自己添加實現代碼  
          2.     return null;  
          3. }  
          4.   
          5. @Override  
          6. public boolean updatePerson(Person person) {  
          7.     // TODO Auto-generated method stub  
          1.                     //自己添加實現代碼  
          2.     return false;  
          3. }  

          四:既然是ibatis spring整合 那就必須要有ibatis的配置文件

            SqlMapConfig.xml

           

          1. <?xml version="1.0" encoding="UTF-8" ?>  
          2. <!DOCTYPE sqlMapConfig  
          3. PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"  
          4. "http://www.ibatis.com/dtd/sql-map-config-2.dtd">   
          5. <sqlMapConfig>  
          1.           <!--此處一定不能有<settings/> 標簽-->  
          2.     <!--  <settings   cacheModelsEnabled="true"  
          3.                  enhancementEnabled="true"  
          4.                  lazyLoadingEnabled="true"  
          5.                  errorTracingEnabled="true"   
          6.                  maxRequests="32"  
          7.                  maxSessions="10"  
          8.                  maxTransactions="5"  
          9.                  useStatementNamespaces="false" />  -->  
          10.           
          11.     <sqlMap resource="po/Person.xml" />  
          12.       
          13. </sqlMapConfig>  

          SqlMapClient.xml里本應該有數據源的配置的 使用spring之后數據源的配置移植到了spring上

           

          五:Person.xml

             里面配置了一下對數據的增刪改查操作

          1. <?xml version="1.0" encoding="UTF-8"?>  
          2. <!DOCTYPE sqlMap  
          3. PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"  
          4. "http://www.ibatis.com/dtd/sql-map-2.dtd">   
          5. <sqlMap>  
          6.     <typeAlias alias="person" type="po.Person" />  
          7.       
          8.     <insert id="insertPerson" parameterClass="po.Person">  
          9.        <![CDATA[ 
          10.            insert into person values (#id#,#name#,#sex#) 
          11.        ]]>  
          12.     </insert>  
          13.       
          14.     <delete id="deleteById" parameterClass="int">  
          15.         <![CDATA[ 
          16.            delete from person where id=#id# 
          17.         ]]>  
          18.     </delete>  
          19.       
          20.     <update id="updatePerson" parameterClass="po.Person">  
          21.          <![CDATA[ 
          22.                update person set name=#name#,sex=#sex# where id=#id# 
          23.          ]]>  
          24.     </update>  
          25.       
          26.     <select id="queryById" parameterClass="int" resultClass="po.Person">  
          27.          <![CDATA[ 
          28.               select * from person where id=#id# 
          29.          ]]>  
          30.     </select>  
          31.       
          32.     <select id="queryAllPerson" cacheModel="personCache" resultClass="po.Person">  
          33.          <![CDATA[ 
          34.                select * from person 
          35.          ]]>  
          36.     </select>  
          37. </sqlMap>  



          六:下面最重要的也就是配置applicationContext.xml了

             

          1. <?xml version="1.0" encoding="UTF-8"?>  
          2. <beans xmlns="http://www.springframework.org/schema/beans"  
          3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
          4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
          5.   
          6.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
          7.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
          8.         <property name="url" value="jdbc:mysql://localhost:3306/ibatis" />  
          9.         <property name="username" value="root" />  
          10.         <property name="password" value="1" />  
          11.     </bean>  
          12.   
          13.     <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
          14.         <property name="configLocation">  <!-- name 為configLocation或s  不可為其他 -->  
          15.             <value>SqlMapConfig.xml</value> <!-- 不區分大小寫,路徑前可加'/' -->  
          16.         </property>  
          17.           
          18.         <!-- dataSource不是必需 -->  
          19.         <property name="dataSource">  
          20.             <ref local="dataSource" />  
          21.         </property>  
          22.     </bean>  
          23.   
          24.     <bean id="personDAO" class="dao.impl.ActionImpl">  
          25.         <!-- dataSource不是必需 -->  
          26.         <property name="dataSource">  
          27.             <ref local="dataSource" />  
          28.         </property>  
          29.           
          30.         <!-- sqlMapClient必需 -->  
          31.         <property name="sqlMapClient">  
          32.             <ref local="sqlMapClient"/>  
          33.         </property>     
          34.     </bean>  
          35.   
          36.     <!-- transactionManager不是必需  -->  
          37.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
          38.         <property name="dataSource">  
          39.             <ref local="dataSource" />  
          40.         </property>  
          41.     </bean>  
          42. </beans>  


          注釋里面的必需或不是必需都是本人多次試驗的,至于為什么是必需不必需 其中的原理我也不是能太講清楚,在此先是這些寫罷了。

          里面的每一個節點,屬性,如果不太理解,可以上網查一些其他資料。

           

          七:編寫測試類

             此類利用junit進行測試。只測試了部分功能。

            

          1. package dao.impl;  
          2.   
          3. import java.util.Iterator;  
          4. import java.util.List;  
          5.   
          6. import org.junit.Test;  
          7. import org.springframework.context.ApplicationContext;  
          8. import org.springframework.context.support.ClassPathXmlApplicationContext;  
          9.   
          10. import po.Person;  
          11.   
          12.   
          13. public class ActionImplTest {  
          14.     private static ApplicationContext applicationContext = null;   //提供靜態ApplicationContext  
          15.     static{  
          16.         applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //實例化  
          17.     }  
          18.     //添加操作  
          19.     @Test  
          20.     public void testInsertPerson(){  
          21.         ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
          22.         s.insertPerson(new Person(1,"zhangsan",2));  
          23.     }  
          24.       
          25.     //刪除操作  
          26.     @Test  
          27.     public void testDeletePerson(){  
          28.         ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
          29.         s.deleteById(1);  
          30.     }  
          31.       
          32.     //查詢全部  
          33.     @Test  
          34.     public void testQueryAllPerson(){  
          35.         ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
          36.         List<Person> persons = s.queryAllPerson();  
          37.         //System.out.println(persons.size());  
          38.         Iterator<Person> ite = persons.iterator();  
          39.         while(ite.hasNext()){  
          40.             Person person = ite.next();  
          41.             System.out.print("ID: "+person.getId());  
          42.             System.out.print(" Name: "+person.getName());  
          43.             System.out.print(" Sex: "+person.getSex());  
          44.             System.out.println();  
          45.         }  
          46.     }  
          47. }  

          八:如需記錄日志 則要log4j.properties

             

          1. #log4j.rootLogger=DEBUG, stdout  
          2. #log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
          3. #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
          4. #log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n  
          5. #log4j.logger.java.sql.PreparedStatement=DEBUG  
          6. log4j.rootLogger=DEBUG, stdout, fileout      
          7. #log4j.logger.test=info     
          8. #log4j.logger.org.apache.jasper = DEBUG     
          9. #log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG     
          10. #log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG     
          11.     
          12. log4j.logger.com.fiscal = DEBUG     
          13. log4j.logger.com.system = DEBUG     
          14.     
          15. log4j.logger.com.ibatis = DEBUG     
          16. log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG     
          17. log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG     
          18. log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG     
          19. log4j.logger.java.sql.Connection = DEBUG     
          20. log4j.logger.java.sql.Statement = DEBUG     
          21. log4j.logger.java.sql.PreparedStatement = DEBUG, fileout      
          22. log4j.logger.java.sql.ResultSet = DEBUG     
          23.     
          24. log4j.appender.stdout=org.apache.log4j.ConsoleAppender       
          25.     
          26. log4j.appender.fileout=org.apache.log4j.RollingFileAppender      
          27. log4j.appender.fileout.File=C\:\\ibatis.log       
          28. log4j.appender.fileout.MaxFileSize=10000KB       
          29.     
          30. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout       
          31. log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n       
          32. log4j.appender.fileout.layout=org.apache.log4j.PatternLayout       
          33. log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n      
          34.     
          35. #log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout       
          36.     
          37. log4j.logger.org=info     


           

          九:已經到最后了,我覺得這最后的才是最最重要的,就是一下jar包問題

             我調試了很長時間  一大部分時間是jar問題

             在此列出一下我認為能夠跑起來這個小程序所需的一下jar包

             如沒有,可網上下載。

            

          1. ibaits-2.3.4.jar  
          2. spring.jar  
          3. mysql-connector-java-bin.jar  
          4. commons-dbcp-1.4.jar  
          5. commons-pool-1.5.6.jar  
          6. spring-orm-2.5.6.jar //已集成到spring.jar里  
          7. //記錄日志所需  
          8.  log4j-1.2.15.jar  
          9. commons-logging.jar  




          下面是本人的目錄結構圖

           


          結束語:此文沒有過多的講些原理性的問題,比如為何這樣寫,又為何這樣配置,只是給出了一個搭建框架的架子而已。

                  因為我也是一個菜鳥,至于如何,我想,等我們有經驗了,會慢慢都懂得。

                  還希望大家共同努力,實現自己的夢想。

                  希望能與各位共勉!



          小白

          評論

          # re: ibatis-Spring 整合  回復  更多評論   

          2014-04-15 00:00 by 最代碼
          最代碼轉載地址:http://www.zuidaima.com/share/1780211932679168.htm

          # re: ibatis-Spring 整合  回復  更多評論   

          2016-05-22 21:07 by 阿斯達
          @最代碼源碼包下載在哪里下載呀

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 禄丰县| 巴林左旗| 明光市| 南宫市| 石屏县| 双柏县| 太保市| 淮阳县| 海南省| 久治县| 宿迁市| 通化市| 蒙城县| 抚松县| 宿州市| 达拉特旗| 土默特右旗| 始兴县| 池州市| 嘉兴市| 吐鲁番市| 津南区| 南丹县| 澄城县| 温州市| 甘谷县| 若尔盖县| 吕梁市| 托里县| 三江| 武义县| 盐山县| 黎平县| 通州市| 涪陵区| 南涧| 乌拉特前旗| 西乌| 沙雅县| 北川| 富蕴县|