<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    持之以恒

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

    ibatis-Spring 整合

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

    這兩天一直在研究ibatis與spring的整合 一個(gè)小小的demo搞的我頭暈?zāi)垦5模绦蛞坏┡芷饋砹耍蝗挥幸环N豁然開朗,重見天日,感覺生活很美好的感覺!,也許,這就是那一行行的代碼帶給我們的不同享受吧。呵呵,廢話就不多說了。

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

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

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

    通過SqlMapClientTemplate來操縱數(shù)據(jù)庫的CRUD是沒有問題的。此篇文章沒有進(jìn)行事務(wù)處理。

    本文采用ibatis+spring+mysql 進(jìn)行編寫

    數(shù)據(jù)庫腳本如下

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


     

    一:要有一個(gè)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);              //根據(jù)ID查詢  
    12.     public List<Person> queryAllPerson();         //查詢?nèi)?/span>  
    13. }  

     

    三:DAO實(shí)現(xiàn)類
       

       ActionImpl.java 此類繼承SqlMapClientSupport 實(shí)現(xiàn)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.     //查詢?nèi)?/span>  
    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.                     //自己添加實(shí)現(xiàn)代碼  
    2.     return null;  
    3. }  
    4.   
    5. @Override  
    6. public boolean updatePerson(Person person) {  
    7.     // TODO Auto-generated method stub  
    1.                     //自己添加實(shí)現(xiàn)代碼  
    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/> 標(biāo)簽-->  
    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里本應(yīng)該有數(shù)據(jù)源的配置的 使用spring之后數(shù)據(jù)源的配置移植到了spring上

     

    五:Person.xml

       里面配置了一下對(duì)數(shù)據(jù)的增刪改查操作

    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> <!-- 不區(qū)分大小寫,路徑前可加'/' -->  
    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>  


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

    里面的每一個(gè)節(jié)點(diǎn),屬性,如果不太理解,可以上網(wǎng)查一些其他資料。

     

    七:編寫測試類

       此類利用junit進(jìn)行測試。只測試了部分功能。

      

    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;   //提供靜態(tài)ApplicationContext  
    15.     static{  
    16.         applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //實(shí)例化  
    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.     //查詢?nèi)?nbsp; 
    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     


     

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

       我調(diào)試了很長時(shí)間  一大部分時(shí)間是jar問題

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

       如沒有,可網(wǎng)上下載。

      

    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  




    下面是本人的目錄結(jié)構(gòu)圖

     


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

            因?yàn)槲乙彩且粋€(gè)菜鳥,至于如何,我想,等我們有經(jīng)驗(yàn)了,會(huì)慢慢都懂得。

            還希望大家共同努力,實(shí)現(xiàn)自己的夢想。

            希望能與各位共勉!



    小白

    評(píng)論

    # re: ibatis-Spring 整合  回復(fù)  更多評(píng)論   

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

    # re: ibatis-Spring 整合  回復(fù)  更多評(píng)論   

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

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 18级成人毛片免费观看| 亚洲国产高清在线精品一区| 久久久久久久国产免费看| 亚洲成a人片在线观看老师| 深夜a级毛片免费无码| 一区二区三区亚洲视频| 看全免费的一级毛片| 四虎永久成人免费| 亚洲AV网一区二区三区| 免费大香伊蕉在人线国产| 看免费毛片天天看| 免费人成视频x8x8入口| 无遮挡免费一区二区三区| 亚洲最大av无码网址| 精品国产福利尤物免费| 国产亚洲无线码一区二区| 久久国产精品免费网站| 日木av无码专区亚洲av毛片| 久久久久久夜精品精品免费啦| 亚洲自偷精品视频自拍| 日本妇人成熟免费中文字幕| 亚洲精品天堂在线观看| 日韩免费观看视频| 日韩免费在线中文字幕| 国产午夜亚洲不卡| 久久精品视频免费| 亚洲不卡中文字幕| 色吊丝永久在线观看最新免费| 黄床大片30分钟免费看| 亚洲中文字幕久久精品无码APP| 成在人线av无码免费高潮喷水| 久久精品国产亚洲AV嫖农村妇女| 在线精品一卡乱码免费| 亚洲精品精华液一区二区| 亚洲成aⅴ人片久青草影院| 丝袜捆绑调教视频免费区| 久久精品a亚洲国产v高清不卡| 99久久免费国产精品特黄| 男人的天堂av亚洲一区2区| 久久久久亚洲精品无码网址| 久久免费看少妇高潮V片特黄|