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


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

          最近一直在看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="com.mysql.jdbc.Driver"/>  
    11.         <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/test"/>  
    12.         <property name="JDBC.Username" value="root"/>  
    13.         <property name="JDBC.Password" value="root"/>  
    14.         </dataSource>  
    15.         </transactionManager>  
    16.     -->  
    17.     <!-- Oracle 连接的配置信息 -->  
    18.         <transactionManager type="JDBC">  
    19.         <dataSource type="SIMPLE">  
    20.         <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>   
    21.         <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@10.60.108.11:1550:cdbeff"/>    
    22.         <property name="JDBC.Username" value="cdbeff"/>   
    23.         <property name="JDBC.Password" value="password"/>   
    24.         <property name="Pool.MaximumActiveConnections" value="10"/>   
    25.         <property name="Pool.MaximumIdleConnections" value="5"/>   
    26.         <property name="Pool.MaximumCheckoutTime" value="120000"/>   
    27.         <property name="Pool.TimeToWait" value="500"/>   
    28.         <property name="Pool.PingQuery" value="select 1 from dual"/>   
    29.         <property name="Pool.PingEnabled" value="false"/>   
    30.         <property name="Pool.PingConnectionsOlderThan" value="1"/>   
    31.         <property name="Pool.PingConnectionsNotUsedFor" value="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="com.microsoft.jdbc.sqlserver.SQLServerDriver" />  
    39.             <property name="JDBC.ConnectionURL"  
    40.                 value="jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs;SelectMethod=Cursor" />  
    41.             <property name="JDBC.Username" value="sa" />  
    42.             <property name="JDBC.Password" value="" />  
    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点)

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

  • 相关阅读:
    ZT Android Debuggerd的分析及使用方法
    使用信号进行同步 sem_post
    linux c编程调用系统的动态库时,要使用dlopen等函数吗?
    Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
    linux的pthread_self与gettid的返回值和开销的区别
    转贴:参禅与悟道》——浅谈人生
    my target
    转贴:如何学好C++语言.docx
    [EffectiveC++]item24:若所有参数皆需类型转换,请为此采用non-member函数
    [EffectiveC++]item23:Prefer non-member non-friend functions to member functions
  • 原文地址:https://www.cnblogs.com/isoftware/p/3750238.html
Copyright © 2020-2023  润新知