首页 > 代码库 > Spring2.5整合Ibatis入门级开发实例

Spring2.5整合Ibatis入门级开发实例

 
分类: SPRING IBATIS 1170人阅读 评论(0) 收藏 举报
ibatisspringstringpropertiesclassuser

      最近一直在看spring和ibatis的东西,由于目前SSH的流行,大多讲Spring和Hibernate的整合开发,作者一直对Hibernate不是很感冒,也许是因为日常开发程序对性能要求比较高,和Hibernate比较起来Ibatis更合适。虽然网络上有很多讲Spring和Ibatis整合的文章,但查看了许多,发现能顺利开发下去的文章太少,于是我就为大家准备了这篇Spring+Ibatis的入门级整合文章。

 

环境介绍

      先来介绍一下本入门级整合文章所用到的环境:Spring2.5.5、Ibatis2.3.0、JDK1.6、Oracle数据库,如果没有用过Oracle的读者读到这里请不要慌张,因为本实例还会讲解Mysql和SqlServer的。

 

程序介绍

      实例中要求完成Spring与Ibatis的整合,并往数据库的UserInfo表中插入用户信息。

 

开发部分

好了,下面我们开始边开发边讲解吧,Let‘s go!

 

1、首先我们一起先来看看本实例的整个目录结构

从图中,我们可以看出,这个spring_ibatis工程下有2个代码包:study.spring.dao、study.spring.manager

                                                                       2个文件夹:properties、sqlmap

                                                                除jdk外的jar包:ibatis下的jar包:ibatis-2.3.0.677.jar

                                                                                       oracle下的jar包:classes12.jar

                                                                                       spring下的jar包:spring.jar、commons-logging.jar、log4j.jar

其中:properties文件夹下放置这spring的配置文件applicationContext.xml和Ibatis的配置文件SqlMapConfig.xml

         sqlmap文件夹下放置的是Ibatis的SqlMap配置文件(最终转化成可执行的SQL语句)

         包study.spring.dao下有3个java文件:

                                                               1)UserInfo:用户类

                                                               2)UserDao:数据库操作接口

                                                               3)User4OracleImpl:数据库操作实现类,继承与UserDao接口

        包study.spring.manager下有2个java文件:

                                                               1)UserManager:数据库操作管理类

                                                               2)Client:测试主类

 

2、在数据库中新建一张UserInfo表

 

[c-sharp] view plaincopy
 
  1. CREATE TABLE userinfo  
  2. (  
  3.    userid     varchar2 (10),  --用户ID  
  4.    username   varchar2 (20),  --用户名  
  5.    password   varchar2 (16),  --密码  
  6.    age        int             --年龄  
  7. );  
 

 

 

3、在study.spring.dao下建立一个与数据库Userinfo表对应的Java类

 

[java] view plaincopy
 
  1. package study.spring.dao;  
  2. public class UserInfo {  
  3.       
  4.     private String userid;  
  5.       
  6.     private String username;  
  7.       
  8.     private String password;  
  9.       
  10.     private int age;  
  11.     public int getAge() {  
  12.         return age;  
  13.     }  
  14.     public void setAge(int age) {  
  15.         this.age = age;  
  16.     }  
  17.     public String getPassword() {  
  18.         return password;  
  19.     }  
  20.     public void setPassword(String password) {  
  21.         this.password = password;  
  22.     }  
  23.     public String getUserid() {  
  24.         return userid;  
  25.     }  
  26.     public void setUserid(String userid) {  
  27.         this.userid = userid;  
  28.     }  
  29.     public String getUsername() {  
  30.         return username;  
  31.     }  
  32.     public void setUsername(String username) {  
  33.         this.username = username;  
  34.     }  
  35. }  
 

 

 

4、配置Ibatis的数据库连接信息

在properties下的SqlMapClient.xml中添加如下语句

 

[c-sharp] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE sqlMapConfig        
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"        
  4.     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">  
  5. <sqlMapConfig>  
  6.     <!-- MySQL 连接的配置信息-->  
  7.     <!--  
  8.         <transactionManager type="JDBC" commitRequired="false">  
  9.         <dataSource type="SIMPLE">  
  10.         <property name="JDBC.Driver" value=http://www.mamicode.com/"com.mysql.jdbc.Driver"/>  
  11.         <property name="JDBC.ConnectionURL" value=http://www.mamicode.com/"jdbc:mysql://localhost:3306/test"/>  
  12.         <property name="JDBC.Username" value=http://www.mamicode.com/"root"/>  
  13.         <property name="JDBC.Password" value=http://www.mamicode.com/"root"/>  
  14.         </dataSource>  
  15.         </transactionManager>  
  16.     -->  
  17.     <!-- Oracle 连接的配置信息 -->  
  18.         <transactionManager type="JDBC">  
  19.         <dataSource type="SIMPLE">  
  20.         <property name="JDBC.Driver" value=http://www.mamicode.com/"oracle.jdbc.driver.OracleDriver"/>   
  21.         <property name="JDBC.ConnectionURL" value=http://www.mamicode.com/"jdbc:oracle:thin:@10.60.108.11:1550:cdbeff"/>    
  22.         <property name="JDBC.Username" value=http://www.mamicode.com/"cdbeff"/>   
  23.         <property name="JDBC.Password" value=http://www.mamicode.com/"password"/>   
  24.         <property name="Pool.MaximumActiveConnections" value=http://www.mamicode.com/"10"/>   
  25.         <property name="Pool.MaximumIdleConnections" value=http://www.mamicode.com/"5"/>   
  26.         <property name="Pool.MaximumCheckoutTime" value=http://www.mamicode.com/"120000"/>   
  27.         <property name="Pool.TimeToWait" value=http://www.mamicode.com/"500"/>   
  28.         <property name="Pool.PingQuery" value=http://www.mamicode.com/"select 1 from dual"/>   
  29.         <property name="Pool.PingEnabled" value=http://www.mamicode.com/"false"/>   
  30.         <property name="Pool.PingConnectionsOlderThan" value=http://www.mamicode.com/"1"/>   
  31.         <property name="Pool.PingConnectionsNotUsedFor" value=http://www.mamicode.com/"1"/>   
  32.         </dataSource>  
  33.         </transactionManager>   
  34.     <!-- SQL Server 连接的配置信息  
  35.     <transactionManager type="JDBC" commitRequired="false">  
  36.         <dataSource type="SIMPLE">  
  37.             <property name="JDBC.Driver"  
  38.                 value=http://www.mamicode.com/"com.microsoft.jdbc.sqlserver.SQLServerDriver" />  
  39.             <property name="JDBC.ConnectionURL"  
  40.                 value=http://www.mamicode.com/"jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs;SelectMethod=Cursor" />  
  41.             <property name="JDBC.Username" value=http://www.mamicode.com/"sa" />  
  42.             <property name="JDBC.Password" value=http://www.mamicode.com/"" />  
  43.         </dataSource>  
  44.     </transactionManager>  
  45.      -->  
  46.     <!-- SqlMap的配置文件 -->  
  47.     <sqlMap resource="sqlmap/SqlMap_UserInfo.xml" />  
  48. </sqlMapConfig>  
 

 

 

5、整合spring和ibatis

在properties的applicationContext.xml中添加如下语句

 

[xhtml] view plaincopy
 
  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"  
  4.         xmlns:aop="http://www.springframework.org/schema/aop"  
  5.         xmlns:tx="http://www.springframework.org/schema/tx"  
  6.         xsi:schemaLocation="  
  7.             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  8.             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
  9.             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  10.           
  11.         <!-- 整合ibatis -->  
  12.         <bean id="SqlMapClientFactoryBean" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  13.             <property name="configLocations">  
  14.                 <value>properties/SqlMapConfig.xml</value>  
  15.             </property>  
  16.         </bean>  
  17.         <bean id="userInfo" class="study.spring.dao.UserInfo">  
  18.             <property name="userid" value="51048"></property>  
  19.             <property name="username" value="zhanhj"></property>  
  20.             <property name="password" value="dcfszhj09"></property>  
  21.             <property name="age" value="24"></property>  
  22.         </bean>  
  23.         <bean id="userDao4OracleImpl" class="study.spring.dao.User4OracleImpl">  
  24.             <!-- sqlMapClient虽不是类userDao4OracleImpl的属性,但此处sqlMapClient必须要配置 -->  
  25.             <property name="sqlMapClient" ref="SqlMapClientFactoryBean"></property>  
  26.         </bean>  
  27.         <bean id="userManager" class="study.spring.manager.UserManager">  
  28.             <property name="userDao" ref="userDao4OracleImpl"></property>  
  29.         </bean>  
  30. </beans>  
 

 

在此文件中,其中整合ibatis的为如下语句,其余的配置信息为本程序的其他实现类的bean

 

[xhtml] view plaincopy
 
  1. <!-- 整合ibatis -->  
  2. <bean id="SqlMapClientFactoryBean" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  3. <property name="configLocations">  
  4. <value>properties/SqlMapConfig.xml</value>  
  5. </property>  
  6. </bean>  
 

 

 

6、UserDao的实现

 

[java] view plaincopy
 
  1. package study.spring.dao;  
  2. import com.ibatis.sqlmap.client.SqlMapClient;  
  3. public interface UserDao {  
  4.       
  5.     public void save(SqlMapClient client, UserInfo user);  
  6.     public void delete(SqlMapClient client, UserInfo user);  
  7. }  
 

 

 

7、User4OracleImpl的实现

 

[java] view plaincopy
 
  1. package study.spring.dao;  
  2. import java.sql.SQLException;  
  3. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
  4. import org.apache.commons.logging.Log;  
  5. import org.apache.commons.logging.LogFactory;  
  6. import com.ibatis.sqlmap.client.SqlMapClient;  
  7. public class User4OracleImpl extends SqlMapClientDaoSupport implements UserDao {  
  8.     private Log log = LogFactory.getLog(User4OracleImpl.class);  
  9.     // 删除用户信息  
  10.     public void delete(SqlMapClient client, UserInfo user) {  
  11.         try {  
  12.             client.delete(user.getUserid());  
  13.         } catch (SQLException e) {  
  14.             e.printStackTrace();  
  15.         }  
  16.     }  
  17.     // 保存用户信息  
  18.     public void save(SqlMapClient client, UserInfo user) {  
  19.         try {  
  20.             client.startTransaction();  
  21.             client.insert("insertUserInfo", user);  
  22.             log.info(user.getUserid() + "的信息插入成功!");  
  23.             client.commitTransaction();  
  24.         } catch (SQLException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.     }  
  28. }  
 

 

 

8、UserManager的实现

 

[java] view plaincopy
 
  1. package study.spring.manager;  
  2. import com.ibatis.sqlmap.client.SqlMapClient;  
  3. import study.spring.dao.UserDao;  
  4. import study.spring.dao.UserInfo;  
  5. public class UserManager {  
  6.     public UserDao userDao;  
  7.     public void setUserDao(UserDao userDao) {  
  8.         this.userDao = userDao;  
  9.     }  
  10.     public void save(SqlMapClient client, UserInfo user) {  
  11.         userDao.save(client, user);  
  12.     }  
  13.     public void delete(SqlMapClient client, UserInfo user) {  
  14.         userDao.delete(client, user);  
  15.     }  
  16. }  
 

 

 

9、SqlMap的配置文件信息

 

[xhtml] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE sqlMap        
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        
  4.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
  5. <sqlMap>  
  6.   <typeAlias alias="Userinfo" type="study.spring.dao.UserInfo"/>  
  7.   <resultMap id="queryResult" class="Userinfo">  
  8.     <result property="userid" column="userid"/>  
  9.     <result property="username" column="username"/>  
  10.     <result property="password" column="password"/>  
  11.     <result property="age" column="age"/>  
  12.   </resultMap>  
  13.   <select id="selectAllusers" resultMap="queryResult">  
  14.     select * from userinfo  
  15.   </select>  
  16.      
  17.   <!-- Insert example, using the Userinfo parameter class -->  
  18.   <insert id="insertUserInfo" parameterClass="Userinfo">  
  19.     insert into userinfo (  
  20.       userid,  
  21.       username,  
  22.       password,  
  23.       age)  
  24.     values (  
  25.       #userid#, #username#, #password#, #age#  
  26.     )  
  27.   </insert>  
  28.   <!-- Delete example, using an String as the parameter class -->  
  29.   <delete id="deleteUserById" parameterClass="java.lang.String">  
  30.     delete from userinfo where userid = #userid#  
  31.   </delete>  
  32.     
  33. </sqlMap>  
 

 

 

10、Client测试主类的实现

 

[java] view plaincopy
 
  1. package study.spring.manager;  
  2. import org.springframework.beans.factory.BeanFactory;  
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4. import com.ibatis.sqlmap.client.SqlMapClient;  
  5. import study.spring.dao.UserInfo;  
  6. import junit.framework.TestCase;  
  7. public class Client extends TestCase{  
  8.       
  9.     public static void main(String[] args) {  
  10.         BeanFactory factory = new ClassPathXmlApplicationContext("properties/applicationContext.xml");  
  11.         UserManager userManager = (UserManager) factory.getBean("userManager");  
  12.         UserInfo user = (UserInfo)factory.getBean("userInfo");  
  13.         SqlMapClient client = (SqlMapClient)factory.getBean("SqlMapClientFactoryBean");  
  14.         userManager.save(client,user);  
  15.           
  16.     }  
  17. }  
 

 

 

11、测试结果

 

[xhtml] view plaincopy
 
  1. 2010-11-22 20:05:47,187 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@197d257: display name [org.springframework.context.support.ClassPathXmlApplicationContext@197d257]; startup date [Mon Nov 22 20:05:47 CST 2010]; root of context hierarchy  
  2. 2010-11-22 20:05:47,492 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from class path resource [properties/applicationContext.xml]  
  3. 2010-11-22 20:05:48,188 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@197d257]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1319c  
  4. 2010-11-22 20:05:48,255 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1319c: defining beans [SqlMapClientFactoryBean,userInfo,userDao4OracleImpl,userManager]; root of factory hierarchy  
  5. 2010-11-22 20:05:51,194 INFO [study.spring.dao.User4OracleImpl] - 51048的信息插入成功!  
 

 

 

到这里,需要讲解的内容就结束了,下面我们一起来总结一下:

      1、spring整合ibatis:在applicationContext.xml中将ibatis的sqlMapClient注入(参考第5点)

      2、ibatis配置数据库连接信息(包括Oracle、MySql、Sql Server,参考第4点)

 

其他的各位一一理解吧,今天先到这里,再见!