spring框架整合ibatis的项目实例代码

这两天一直在研究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 );

 

一:要有一个PO类

 

   Person.java

01 package po;  
02    
03 import java.io.Serializable;  
04    
05 public class Person implements Serializable{  
06     /** 
07      *  
08      */ 
09     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

01 package dao;  
02    
03 import java.util.List;  
04    
05 import po.Person;  
06    
07 public interface IAction {  
08     public boolean insertPerson(Person person);   //添加   
09     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接口

01 package dao.impl;  
02    
03 import java.io.IOException;  
04 import java.io.Reader;  
05 import java.sql.SQLException;  
06 import java.util.List;  
07    
08 import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
09    
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  
49  
50  
51                     //自己添加实现代码   
52     return null;  
53 }  
54    
55 @Override 
56 public boolean updatePerson(Person person) {  
57     // TODO Auto-generated method stub  
58  
59  
60                     //自己添加实现代码   
61     return false;  
62 }  

 

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

 

  SqlMapConfig.xml

01 <?xml version="1.0" encoding="UTF-8" ?>  
02 <!DOCTYPE sqlMapConfig  
03     PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"  
05     <sqlMapConfig>
06 <!--此处一定不能有<settings/> 标签--> 
07     <!--  <settings   cacheModelsEnabled="true"  
08                  enhancementEnabled="true"  
09                  lazyLoadingEnabled="true"  
10                  errorTracingEnabled="true"   
11                  maxRequests="32"  
12                  maxSessions="10"  
13                  maxTransactions="5"  
14                  useStatementNamespaces="false" />  --> 
15            
16     <sqlMap resource="po/Person.xml" />  
17        
18 </sqlMapConfig>

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

 

五:Person.xml

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

01 <?xml version="1.0" encoding="UTF-8"?>  
02 <!DOCTYPE sqlMap  
03 PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"  
05 <sqlMap>  
06     <typeAlias alias="person" type="po.Person" />  
07        
08     <insert id="insertPerson" parameterClass="po.Person">  
09        <![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了

 

01 <?xml version="1.0" encoding="UTF-8"?>  
05    
06     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
07         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
08         <property name="url" value="jdbc:mysql://localhost:3306/ibatis" />  
09         <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进行测试。只测试了部分功能。

01 package dao.impl;  
02    
03 import java.util.Iterator;  
04 import java.util.List;  
05    
06 import org.junit.Test;  
07 import org.springframework.context.ApplicationContext;  
08 import org.springframework.context.support.ClassPathXmlApplicationContext;  
09    
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

01 #log4j.rootLogger=DEBUG, stdout  
02 #log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
03 #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
04 #log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n  
05 #log4j.logger.java.sql.PreparedStatement=DEBUG  
06 log4j.rootLogger=DEBUG, stdout, fileout      
07 #log4j.logger.test=info     
08 #log4j.logger.org.apache.jasper = DEBUG     
09 #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 




下面是本人的目录结构图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值