ibatis与spring整合

 这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受吧。呵呵,废话就不多说了。

在此先引用几句别人的资料。。。

Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建。

hibernate类似,Spring提供了SqlMapClientDaoSupport对象,我们的DAO可以继承这个类,通过它所提供的SqlMapClientTemplate对象来操纵数据库。看起来这些概念都与hibernate类似。

通过SqlMapClientTemplate来操纵数据库的CRUD是没有问题的。此篇文章没有进行事务处理。

本文采用ibatis+spring+mysql 进行编写

数据库脚本如下

[sql] view plain copy print ?
  1. create database ibatis;  
  2.   
  3. create table person(  
  4.   id int primary key,  
  5.   name varchar(10),  
  6.   sex int  
  7. );  
  8.    
create database ibatis; create table person( id int primary key, name varchar(10), sex int );


 

一:要有一个PO类

   Person.java

[java] view plain copy print ?
  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. }  
package 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

[java] view plain copy print ?
  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 queryAllPerson();         //查询全部   
  13. }  
package 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 queryAllPerson(); //查询全部 }

 

三:DAO实现类
   

   ActionImpl.java 此类继承SqlMapClientSupport 实现IAction接口

[java] view plain copy print ?
  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 queryAllPerson() {  
  41.         // TODO Auto-generated method stub   
  42.         List persons = getSqlMapClientTemplate().queryForList("queryAllPerson");  
  43.         return persons;  
  44.     }  
  45.   
  46.     @Override  
  47.     public Person queryById(int id) {  
  48.         // TODO Auto-generated method stub  
package 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 queryAllPerson() { // TODO Auto-generated method stub List persons = getSqlMapClientTemplate().queryForList("queryAllPerson"); return persons; } @Override public Person queryById(int id) { // TODO Auto-generated method stub
[java] view plain copy print ?
  1.                     //自己添加实现代码   
  2.     return null;  
  3. }  
  4.   
  5. @Override  
  6. public boolean updatePerson(Person person) {  
  7.     // TODO Auto-generated method stub  
//自己添加实现代码 return null; } @Override public boolean updatePerson(Person person) { // TODO Auto-generated method stub
[java] view plain copy print ?
  1.                     //自己添加实现代码   
  2.     return false;  
  3. }  
//自己添加实现代码 return false; } }

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

  SqlMapConfig.xml

 

[html] view plain copy print ?
  1. xml version="1.0" encoding="UTF-8" ?>  
  2. PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"  
  3. "http://www.ibatis.com/dtd/sql-map-config-2.dtd">   
  4. <sqlMapConfig>  
[html] view plain copy print ?
  1.             
  2.     

    SqlMapClient.xml里本应该有数据源的配置的 使用spring之后数据源的配置移植到了spring上

     

    五:Person.xml

       里面配置了一下对数据的增删改查操作

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



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

       

    [html] view plain copy print ?
    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">    
    15.             <value>SqlMapConfig.xmlvalue>   
    16.         property>  
    17.           
    18.           
    19.         <property name="dataSource">  
    20.             <ref local="dataSource" />  
    21.         property>  
    22.     bean>  
    23.   
    24.     <bean id="personDAO" class="dao.impl.ActionImpl">  
    25.           
    26.         <property name="dataSource">  
    27.             <ref local="dataSource" />  
    28.         property>  
    29.           
    30.           
    31.         <property name="sqlMapClient">  
    32.             <ref local="sqlMapClient"/>  
    33.         property>     
    34.     bean>  
    35.   
    36.       
    37.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
    38.         <property name="dataSource">  
    39.             <ref local="dataSource" />  
    40.         property>  
    41.     bean>  
    42. beans>  
    SqlMapConfig.xml


    注释里面的必需或不是必需都是本人多次试验的,至于为什么是必需不必需 其中的原理我也不是能太讲清楚,在此先是这些写罢了。

    里面的每一个节点,属性,如果不太理解,可以上网查一些其他资料。

     

    七:编写测试类

       此类利用junit进行测试。只测试了部分功能。

      

    [html] view plain copy print ?
    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. }  
    package 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 persons = s.queryAllPerson(); //System.out.println(persons.size()); Iterator 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

       

    [html] view plain copy print ?
    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     
    #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包

       如没有,可网上下载。

      

    [sql] view plain copy print ?
    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  
    ibaits-2.3.4.jar spring.jar mysql-connector-java-bin.jar commons-dbcp-1.4.jar commons-pool-1.5.6.jar spring-orm-2.5.6.jar //已集成到spring.jar里 //记录日志所需 log4j-1.2.15.jar commons-logging.jar




    下面是本人的目录结构图

     

你可能感兴趣的:(ibatis与spring整合)