1. 程式人生 > >spring框架整合ibatis的專案例項程式碼

spring框架整合ibatis的專案例項程式碼

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

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

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

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

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

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

資料庫指令碼如下

create database ibatis;  
      
create table person(  
      id int primary key,  
      name varchar(10),  
      sex int  
);

一:要有一個PO類

   Person.java

    package com.zuidaima.po;  
      
    import java.io.Serializable;  
      
    public class Person implements Serializable{  
        /** 
         *  
         */  
        private static final long serialVersionUID = -517413165963030507L;  
        /** 
         *  
         */  
        private int id;  
        private String name;  
        private int sex;  
          
        public Person(){  
              
        }  
        public Person(int id,String name,int sex){  
            this.id = id;  
            this.name = name;  
            this.sex = sex;  
        }  
        public int getId() {  
            return id;  
        }  
        public void setId(int id) {  
            this.id = id;  
        }  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public int getSex() {  
            return sex;  
        }  
        public void setSex(int sex) {  
            this.sex = sex;  
        }  
          
    }  


二:DAO介面類

    IAction.java

    package com.zuidaima.dao;  
      
    import java.util.List;  
      
    import po.Person;  
      
    public interface IAction {  
        public boolean insertPerson(Person person);   //新增   
        public boolean deleteById(int id);            //刪除   
        public boolean updatePerson(Person person);    //修改   
        public Person queryById(int id);              //根據ID查詢   
        public List<Person> queryAllPerson();         //查詢全部   
    }  

三:DAO實現類
   

   ActionImpl.java 此類繼承SqlMapClientSupport 實現IAction介面

    package com.zuidaima.dao.impl;  
      
    import java.io.IOException;  
    import java.io.Reader;  
    import java.sql.SQLException;  
    import java.util.List;  
      
    import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
      
    import com.ibatis.common.resources.Resources;  
    import com.ibatis.sqlmap.client.SqlMapClient;  
    import com.ibatis.sqlmap.client.SqlMapClientBuilder;  
    import com.ibatis.sqlmap.client.SqlMapSession;  
      
    import po.Person;  
    import dao.IAction;  
      
    public class ActionImpl extends SqlMapClientDaoSupport implements IAction {  
      
        //新增操作   
        @Override  
        public boolean insertPerson(Person person) {  
            // TODO Auto-generated method stub   
            getSqlMapClientTemplate().insert("insertPerson",person);  
            return false;  
        }  
          
        //刪除操作   
        @Override  
        public boolean deleteById(int id) {  
            // TODO Auto-generated method stub   
            getSqlMapClientTemplate().delete("deleteById", id);  
            return false;  
        }  
      
          
      
        //查詢全部   
        @Override  
        public List<Person> queryAllPerson() {  
            // TODO Auto-generated method stub   
            List<Person> persons = getSqlMapClientTemplate().queryForList("queryAllPerson");  
            return persons;  
        }  
      
        @Override  
        public Person queryById(int id) {  
            // TODO Auto-generated method stub  


                        //自己新增實現程式碼   
        return null;  
    }  
      
    @Override  
    public boolean updatePerson(Person person) {  
        // TODO Auto-generated method stub  


                        //自己新增實現程式碼   
        return false;  
    }  

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

  SqlMapConfig.xml

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

SqlMapClient.xml裡本應該有資料來源的配置的 使用spring之後資料來源的配置移植到了spring上

五:Person.xml

   裡面配置了一下對資料的增刪改查操作

    <?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE sqlMap  
    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"  
    "http://www.ibatis.com/dtd/sql-map-2.dtd">   
    <sqlMap>  
        <typeAlias alias="person" type="po.Person" />  
          
        <insert id="insertPerson" parameterClass="po.Person">  
           <![CDATA[ 
               insert into person values (#id#,#name#,#sex#) 
           ]]>  
        </insert>  
          
        <delete id="deleteById" parameterClass="int">  
            <![CDATA[ 
               delete from person where id=#id# 
            ]]>  
        </delete>  
          
        <update id="updatePerson" parameterClass="po.Person">  
             <![CDATA[ 
                   update person set name=#name#,sex=#sex# where id=#id# 
             ]]>  
        </update>  
          
        <select id="queryById" parameterClass="int" resultClass="po.Person">  
             <![CDATA[ 
                  select * from person where id=#id# 
             ]]>  
        </select>  
          
        <select id="queryAllPerson" cacheModel="personCache" resultClass="po.Person">  
             <![CDATA[ 
                   select * from person 
             ]]>  
        </select>  
    </sqlMap>  

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

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
      
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
            <property name="url" value="jdbc:mysql://localhost:3306/ibatis" />  
            <property name="username" value="root" />  
            <property name="password" value="1" />  
        </bean>  
      
        <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
            <property name="configLocation">  <!-- name 為configLocation或s  不可為其他 -->  
                <value>SqlMapConfig.xml</value> <!-- 不區分大小寫,路徑前可加'/' -->  
            </property>  
              
            <!-- dataSource不是必需 -->  
            <property name="dataSource">  
                <ref local="dataSource" />  
            </property>  
        </bean>  
      
        <bean id="personDAO" class="dao.impl.ActionImpl">  
            <!-- dataSource不是必需 -->  
            <property name="dataSource">  
                <ref local="dataSource" />  
            </property>  
              
            <!-- sqlMapClient必需 -->  
            <property name="sqlMapClient">  
                <ref local="sqlMapClient"/>  
            </property>     
        </bean>  
      
        <!-- transactionManager不是必需  -->  
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
            <property name="dataSource">  
                <ref local="dataSource" />  
            </property>  
        </bean>  
    </beans>  


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

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

七:編寫測試類

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

    package com.zuidaima.dao.impl;  
      
    import java.util.Iterator;  
    import java.util.List;  
      
    import org.junit.Test;  
    import org.springframework.context.ApplicationContext;  
    import org.springframework.context.support.ClassPathXmlApplicationContext;  
      
    import po.Person;  
      
      
    public class ActionImplTest {  
        private static ApplicationContext applicationContext = null;   //提供靜態ApplicationContext  
        static{  
            applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //例項化  
        }  
        //新增操作  
        @Test  
        public void testInsertPerson(){  
            ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
            s.insertPerson(new Person(1,"zhangsan",2));  
        }  
          
        //刪除操作  
        @Test  
        public void testDeletePerson(){  
            ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
            s.deleteById(1);  
        }  
          
        //查詢全部  
        @Test  
        public void testQueryAllPerson(){  
            ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
            List<Person> persons = s.queryAllPerson();  
            //System.out.println(persons.size());  
            Iterator<Person> ite = persons.iterator();  
            while(ite.hasNext()){  
                Person person = ite.next();  
                System.out.print("ID: "+person.getId());  
                System.out.print(" Name: "+person.getName());  
                System.out.print(" Sex: "+person.getSex());  
                System.out.println();  
            }  
        }  
    }  

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

    #log4j.rootLogger=DEBUG, stdout  
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    #log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n  
    #log4j.logger.java.sql.PreparedStatement=DEBUG  
    log4j.rootLogger=DEBUG, stdout, fileout      
    #log4j.logger.test=info     
    #log4j.logger.org.apache.jasper = DEBUG     
    #log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG     
    #log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG     
        
    log4j.logger.com.fiscal = DEBUG     
    log4j.logger.com.system = DEBUG     
        
    log4j.logger.com.ibatis = DEBUG     
    log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG     
    log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG     
    log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG     
    log4j.logger.java.sql.Connection = DEBUG     
    log4j.logger.java.sql.Statement = DEBUG     
    log4j.logger.java.sql.PreparedStatement = DEBUG, fileout      
    log4j.logger.java.sql.ResultSet = DEBUG     
        
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender       
        
    log4j.appender.fileout=org.apache.log4j.RollingFileAppender      
    log4j.appender.fileout.File=C\:\\ibatis.log       
    log4j.appender.fileout.MaxFileSize=10000KB       
        
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout       
    log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n       
    log4j.appender.fileout.layout=org.apache.log4j.PatternLayout       
    log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n      
        
    #log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout       
        
    # 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 




下面是本人的目錄結構圖

相關推薦

spring框架整合ibatis專案例項程式碼

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

java計劃任務排程框架quartz結合spring實現排程的配置例項程式碼分享

                一:quartz簡介       OpenSymphony 的Quartz提供了一個比較完美的任務排程解決方案。       Quartz 是個開源的作業排程框架,定時排程器,為在 Java 應用程式中進行作業排程提供了簡單卻強大的機制。       Quartz中有兩個基本概

spring boot整合Angular專案實戰

1.使用IDEA進行debug,然後進行資料的跟蹤。 根據debug的前端傳過來的資料流如下; 根據deug斷點除錯可知此時應該進入的是serviceimpl層的邏輯層程式碼。打斷點進入pipeCabinServeice的updatePipeCabin方法。 找到實現類所對應

複習電商筆記-35-常見問題、RedisCluster和Spring框架整合

  常見問題     another app is currently holding the yum…. 直接 ps –ef|grep yum 殺掉就行了 ERR Slot 5798 is already busy   Ca

spring boot 整合 mybatis(含程式碼自動生成)

環境簡介:Idea ,JDK8,MAVEN 開工: 第一步建立專案 第二步選擇maven依賴 第三步,補充自己需要用到的maven依賴(通過工具沒法自動完成的) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="

Spring框架整合WEB解決配置檔案載入多次的問題

1. 建立JavaWEB專案,引入Spring的開發包。編寫具體的類和方法。 * 環境搭建好後,啟動伺服器來測試專案,傳送每訪問一次都會載入一次配置檔案,這樣效率會非常非常慢!! 2. 解決上面的問題 * 將工廠建立好了以後放入到ServletContext域中.使用工廠的時候,從Servl

Spring框架整合WEB解決配置文件加載多次的問題

load cti style customer ner ssp text param work 1. 創建JavaWEB項目,引入Spring的開發包。編寫具體的類和方法。 * 環境搭建好後,啟動服務器來測試項目,發送每訪問一次都會加載一次配置文件,這樣效率會非常非

3 Spring框架整合WEB 1(與struts2整合

使用spring與struts2整合 web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

Spring框架整合Struts2框架的傳統方法

1. 匯入CRM專案的UI頁面,找到新增客戶的頁面,修改form表單,訪問Action   * 將menu.jsp中133行的新增客戶的跳轉地址改為:href="${pageContext.request.contextPath}/jsp/customer/add.jsp"   * 將jsp/custom

Spring Boot整合Thymeleaf簡單例項

1、定義 Thymeleaf是一種用於Web和獨立環境的現代伺服器端的Java模板引擎。 2、簡單例項 (1)目錄結構 (2)MySpringBootApplication.java pa

Spring Boot整合CXF專案

                                          &nb

Java框架JSON-RPC專案demo程式碼實戰

一、JSON-RPC-Java簡介         JSON-RPC-Java是一個用Java來實現動態JSON-RPC的框架. 利用它內建的一個輕級量JSON-RPC JavaScripIt客戶端,可以讓你透明地在JavaScript中呼叫Java程式碼。JSON-

Spring框架整合Java Web Token

Java Web Token JSON Web Token(JWT)是一個非常輕巧的規範。這個規範允許我們使用JWT在使用者和伺服器之間傳遞安全可靠的資訊。 JWT組成 一個JWT實際上就是一個字串,它由三部分組成,頭部、載荷與簽名。 荷載 {

spring mvc攔截器專案例項

處理器攔截器簡介:1.1.1攔截器介面package org.springframework.web.servlet; public interface HandlerInterceptor { boolean preHandle(

Spring框架的WEB專案訪問不到靜態資原始檔

 最近遇見一個很白痴的問題,但還是犯了,就是在jsp頁面中訪問不到jquery檔案了,找了很多辦法,改了很多次路徑,還是不對,最後發現是SpringMVC的配置出錯了; <servlet>

activeMQ開發筆記,activeMQy與Spring框架整合

MQ開發其實很簡單: 本文以最新版本的ActiveMQ為例子,介紹了安裝和開發第一個MQ程式。 準備環境,JDK8,activeMQ 5.14.3,WIN7測試環境,Spring 4.3.4 首先是安裝 : 安裝MQ非常簡單,下載連結:https://activemq

redis入門+基於Ruby的redis叢集搭建+spring框架整合

定義      redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。這些資料型別都支援p

Java Spring MVC專案搭建(一)——Spring MVC框架整合

轉自:https://www.cnblogs.com/eczhou/p/6287852.html 1、Java JDK及Tomcat安裝 我這裡安裝的是JDK 1.8 及 Tomcat 8,安裝步驟詳見:http://www.cnblogs.com/eczhou/p/6285248.html

基於springboot2 框架整合(1):spring boot專案初始化

前言 專案中使用了很多現成的框架,都是專案經理、架構師帶來的,從來沒有自己整合過!這次決定自己從零開始整合一次,以學習鞏固。過程中參考很多開源框架的思路,工具類等,若有侵權,請速速聯絡,一定妥善處理   一:建立maven專案 這個不多說,給出pom.xml

SSM框架整合Maven工程整合Spring+Springmvc+Mybatis(詳細教程,附程式碼)

一、基本概念 1、Spring Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分