分类: SPRING IBATIS2010-11-22 20:19 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表

  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类

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

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

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

  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中添加如下语句

  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. <!-- 整合ibatis -->
  11. <bean id="SqlMapClientFactoryBean" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  12. <property name="configLocations">
  13. <value>properties/SqlMapConfig.xml</value>
  14. </property>
  15. </bean>
  16. <bean id="userInfo" class="study.spring.dao.UserInfo">
  17. <property name="userid" value="51048"></property>
  18. <property name="username" value="zhanhj"></property>
  19. <property name="password" value="dcfszhj09"></property>
  20. <property name="age" value="24"></property>
  21. </bean>
  22. <bean id="userDao4OracleImpl" class="study.spring.dao.User4OracleImpl">
  23. <!-- sqlMapClient虽不是类userDao4OracleImpl的属性,但此处sqlMapClient必须要配置 -->
  24. <property name="sqlMapClient" ref="SqlMapClientFactoryBean"></property>
  25. </bean>
  26. <bean id="userManager" class="study.spring.manager.UserManager">
  27. <property name="userDao" ref="userDao4OracleImpl"></property>
  28. </bean>
  29. </beans>

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

  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的实现

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

7、User4OracleImpl的实现

  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的实现

  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的配置文件信息

  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. <!-- Insert example, using the Userinfo parameter class -->
  17. <insert id="insertUserInfo" parameterClass="Userinfo">
  18. insert into userinfo (
  19. userid,
  20. username,
  21. password,
  22. age)
  23. values (
  24. #userid#, #username#, #password#, #age#
  25. )
  26. </insert>
  27. <!-- Delete example, using an String as the parameter class -->
  28. <delete id="deleteUserById" parameterClass="java.lang.String">
  29. delete from userinfo where userid = #userid#
  30. </delete>
  31. </sqlMap>

10、Client测试主类的实现

  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. public static void main(String[] args) {
  9. BeanFactory factory = new ClassPathXmlApplicationContext("properties/applicationContext.xml");
  10. UserManager userManager = (UserManager) factory.getBean("userManager");
  11. UserInfo user = (UserInfo)factory.getBean("userInfo");
  12. SqlMapClient client = (SqlMapClient)factory.getBean("SqlMapClientFactoryBean");
  13. userManager.save(client,user);
  14. }
  15. }

11、测试结果

  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点)

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

Spring2.5整合Ibatis入门级开发实例的更多相关文章

  1. RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...

  2. RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...

  3. Spring+Ibatis集成开发实例

    首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` (  `id` varchar(20) NOT NULL,  `name` varchar(20) ...

  4. Thinkphp5整合微信扫码支付开发实例

    ThinkPHP框架是比较多人用的,曾经做过的一个Thinkphp5整合微信扫码支付开发实例,分享出来大家一起学习 打开首页生成订单,并显示支付二维码 public function index() ...

  5. SpringBoot整合Quartz及log4j实例

    SpringBoot整合Quartz及log4j实例 因为之前项目中经常会做一些定时Job的东西,所以在此记录一下,目前项目中已经使用elastic-job,这个能相对比Quartz更加简单方便一些, ...

  6. RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)

    RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm) 现在,我们使用.NET快速开发整合框架(RDIFramework.NET)来开发一个应用,此应用皆在说明如何使 ...

  7. WCF揭秘(一)——简单的WCF开发实例

    一.WCF是什么 WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发.WCF将DCOM.Remoting.Web Service.WSE.MSMQ.AJAX服务 ...

  8. Jboss ESB简介及开发实例

    一.Jboss ESB的简介 1. 什么是ESB.         ESB的全称是Enterprise Service Bus,即企业服务总线.ESB是过去消息中间件的发展,ESB采用了“总线”这样一 ...

  9. ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】

    本文包含商品自定义添加教程及进一步的开发实例: 教程: 说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. ...

随机推荐

  1. 【一天一道LeetCode】#141. Linked List Cycle

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  2. 精通CSS+DIV网页样式与布局--图片效果

    提到图片效果,小伙伴们可能会想到美图秀秀,ps等,这些软件都是款非常不错的照片处理软件,包括常用的:黑白,增强,高斯,高对比,夜视,老照片和铅笔画等等.不管你是否是专业的 照片拍摄人员,我们都可以通过 ...

  3. JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

    JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...

  4. 【翻译】在Ext JS 6通用应用程序中使用既共享又特定于视图的代码

    原文:Using Both Shared and View-Specific Code in an Ext JS 6 Universal App 在本文,在展示如何编写Ext JS 6通用应用程序代码 ...

  5. 认证模式之Spnego模式

    Spnego模式是一种由微软提出的使用GSS-API接口的认证模式,它扩展了Kerberos协议,在了解Spnego协议之前必须先了解Kerberos协议,Kerberos协议主要解决身份认证及通信密 ...

  6. org/w3c/dom/ElementTraversal 错误解决办法

    org/w3c/dom/ElementTraversal 错误解决办法 不记得之前几天把什么maven依赖包删除了,今天利用htmlunit运行代码的时候报了下面的错误: Exception in t ...

  7. 关于C++程序的编码问题

    转自: http://blog.chinaunix.net/uid-26790551-id-3190813.html 我们传统的程序基本都只在Windows或只在Linux下运行,Windows程序使 ...

  8. 对Java配置文件中敏感信息进行加解密的工具类

    在 JavaEE 配置文件中,例如 XML 或者 properties 文件,由于某些敏感信息不希望普通人员看见,则可以采用加密的方式存储,程序读取后进行解密. 常见的如: 数据库用户密码,短信平台用 ...

  9. Rest api简介

    理解和使用内容协商 我们的开发者在发送一个 REST API 请求的同时,根据应用场景,针对相同的资源,可能会期待不同的返回形式. 比如,我希望根据用户客户端语言,同一个资源的内容可以返回不同的语言. ...

  10. Cursor类取出数据

    重点是要调用 moveToFirst(); long id=intent.getLongExtra("id",0); Cursor cr =dbh.selectDataById(i ...