Spring2.5整合Ibatis入门级开发实例
最近一直在看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表
- CREATE TABLE userinfo
- (
- userid varchar2 (10), --用户ID
- username varchar2 (20), --用户名
- password varchar2 (16), --密码
- age int --年龄
- );
3、在study.spring.dao下建立一个与数据库Userinfo表对应的Java类
- package study.spring.dao;
- public class UserInfo {
- private String userid;
- private String username;
- private String password;
- private int age;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUserid() {
- return userid;
- }
- public void setUserid(String userid) {
- this.userid = userid;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
4、配置Ibatis的数据库连接信息
在properties下的SqlMapClient.xml中添加如下语句
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMapConfig
- PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
- <sqlMapConfig>
- <!-- MySQL 连接的配置信息-->
- <!--
- <transactionManager type="JDBC" commitRequired="false">
- <dataSource type="SIMPLE">
- <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
- <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/test"/>
- <property name="JDBC.Username" value="root"/>
- <property name="JDBC.Password" value="root"/>
- </dataSource>
- </transactionManager>
- -->
- <!-- Oracle 连接的配置信息 -->
- <transactionManager type="JDBC">
- <dataSource type="SIMPLE">
- <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@10.60.108.11:1550:cdbeff"/>
- <property name="JDBC.Username" value="cdbeff"/>
- <property name="JDBC.Password" value="password"/>
- <property name="Pool.MaximumActiveConnections" value="10"/>
- <property name="Pool.MaximumIdleConnections" value="5"/>
- <property name="Pool.MaximumCheckoutTime" value="120000"/>
- <property name="Pool.TimeToWait" value="500"/>
- <property name="Pool.PingQuery" value="select 1 from dual"/>
- <property name="Pool.PingEnabled" value="false"/>
- <property name="Pool.PingConnectionsOlderThan" value="1"/>
- <property name="Pool.PingConnectionsNotUsedFor" value="1"/>
- </dataSource>
- </transactionManager>
- <!-- SQL Server 连接的配置信息
- <transactionManager type="JDBC" commitRequired="false">
- <dataSource type="SIMPLE">
- <property name="JDBC.Driver"
- value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
- <property name="JDBC.ConnectionURL"
- value="jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs;SelectMethod=Cursor" />
- <property name="JDBC.Username" value="sa" />
- <property name="JDBC.Password" value="" />
- </dataSource>
- </transactionManager>
- -->
- <!-- SqlMap的配置文件 -->
- <sqlMap resource="sqlmap/SqlMap_UserInfo.xml" />
- </sqlMapConfig>
5、整合spring和ibatis
在properties的applicationContext.xml中添加如下语句
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <!-- 整合ibatis -->
- <bean id="SqlMapClientFactoryBean" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <property name="configLocations">
- <value>properties/SqlMapConfig.xml</value>
- </property>
- </bean>
- <bean id="userInfo" class="study.spring.dao.UserInfo">
- <property name="userid" value="51048"></property>
- <property name="username" value="zhanhj"></property>
- <property name="password" value="dcfszhj09"></property>
- <property name="age" value="24"></property>
- </bean>
- <bean id="userDao4OracleImpl" class="study.spring.dao.User4OracleImpl">
- <!-- sqlMapClient虽不是类userDao4OracleImpl的属性,但此处sqlMapClient必须要配置 -->
- <property name="sqlMapClient" ref="SqlMapClientFactoryBean"></property>
- </bean>
- <bean id="userManager" class="study.spring.manager.UserManager">
- <property name="userDao" ref="userDao4OracleImpl"></property>
- </bean>
- </beans>
在此文件中,其中整合ibatis的为如下语句,其余的配置信息为本程序的其他实现类的bean
- <!-- 整合ibatis -->
- <bean id="SqlMapClientFactoryBean" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <property name="configLocations">
- <value>properties/SqlMapConfig.xml</value>
- </property>
- </bean>
6、UserDao的实现
- package study.spring.dao;
- import com.ibatis.sqlmap.client.SqlMapClient;
- public interface UserDao {
- public void save(SqlMapClient client, UserInfo user);
- public void delete(SqlMapClient client, UserInfo user);
- }
7、User4OracleImpl的实现
- package study.spring.dao;
- import java.sql.SQLException;
- import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import com.ibatis.sqlmap.client.SqlMapClient;
- public class User4OracleImpl extends SqlMapClientDaoSupport implements UserDao {
- private Log log = LogFactory.getLog(User4OracleImpl.class);
- // 删除用户信息
- public void delete(SqlMapClient client, UserInfo user) {
- try {
- client.delete(user.getUserid());
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- // 保存用户信息
- public void save(SqlMapClient client, UserInfo user) {
- try {
- client.startTransaction();
- client.insert("insertUserInfo", user);
- log.info(user.getUserid() + "的信息插入成功!");
- client.commitTransaction();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
8、UserManager的实现
- package study.spring.manager;
- import com.ibatis.sqlmap.client.SqlMapClient;
- import study.spring.dao.UserDao;
- import study.spring.dao.UserInfo;
- public class UserManager {
- public UserDao userDao;
- public void setUserDao(UserDao userDao) {
- this.userDao = userDao;
- }
- public void save(SqlMapClient client, UserInfo user) {
- userDao.save(client, user);
- }
- public void delete(SqlMapClient client, UserInfo user) {
- userDao.delete(client, user);
- }
- }
9、SqlMap的配置文件信息
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-2.dtd">
- <sqlMap>
- <typeAlias alias="Userinfo" type="study.spring.dao.UserInfo"/>
- <resultMap id="queryResult" class="Userinfo">
- <result property="userid" column="userid"/>
- <result property="username" column="username"/>
- <result property="password" column="password"/>
- <result property="age" column="age"/>
- </resultMap>
- <select id="selectAllusers" resultMap="queryResult">
- select * from userinfo
- </select>
- <!-- Insert example, using the Userinfo parameter class -->
- <insert id="insertUserInfo" parameterClass="Userinfo">
- insert into userinfo (
- userid,
- username,
- password,
- age)
- values (
- #userid#, #username#, #password#, #age#
- )
- </insert>
- <!-- Delete example, using an String as the parameter class -->
- <delete id="deleteUserById" parameterClass="java.lang.String">
- delete from userinfo where userid = #userid#
- </delete>
- </sqlMap>
10、Client测试主类的实现
- package study.spring.manager;
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import com.ibatis.sqlmap.client.SqlMapClient;
- import study.spring.dao.UserInfo;
- import junit.framework.TestCase;
- public class Client extends TestCase{
- public static void main(String[] args) {
- BeanFactory factory = new ClassPathXmlApplicationContext("properties/applicationContext.xml");
- UserManager userManager = (UserManager) factory.getBean("userManager");
- UserInfo user = (UserInfo)factory.getBean("userInfo");
- SqlMapClient client = (SqlMapClient)factory.getBean("SqlMapClientFactoryBean");
- userManager.save(client,user);
- }
- }
11、测试结果
- 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
- 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]
- 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
- 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
- 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入门级开发实例的更多相关文章
- RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...
- RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...
- Spring+Ibatis集成开发实例
首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` ( `id` varchar(20) NOT NULL, `name` varchar(20) ...
- Thinkphp5整合微信扫码支付开发实例
ThinkPHP框架是比较多人用的,曾经做过的一个Thinkphp5整合微信扫码支付开发实例,分享出来大家一起学习 打开首页生成订单,并显示支付二维码 public function index() ...
- SpringBoot整合Quartz及log4j实例
SpringBoot整合Quartz及log4j实例 因为之前项目中经常会做一些定时Job的东西,所以在此记录一下,目前项目中已经使用elastic-job,这个能相对比Quartz更加简单方便一些, ...
- RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)
RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm) 现在,我们使用.NET快速开发整合框架(RDIFramework.NET)来开发一个应用,此应用皆在说明如何使 ...
- WCF揭秘(一)——简单的WCF开发实例
一.WCF是什么 WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发.WCF将DCOM.Remoting.Web Service.WSE.MSMQ.AJAX服务 ...
- Jboss ESB简介及开发实例
一.Jboss ESB的简介 1. 什么是ESB. ESB的全称是Enterprise Service Bus,即企业服务总线.ESB是过去消息中间件的发展,ESB采用了“总线”这样一 ...
- ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】
本文包含商品自定义添加教程及进一步的开发实例: 教程: 说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. ...
随机推荐
- Android开发学习之路--UI之简单聊天界面
学了很多的ui的知识,这里就来实现个聊天的界面,首先来实现个layout的xml,代码如下: <?xml version="1.0" encoding="utf-8 ...
- 【Android 应用开发】 Android 相关代码规范 更新中 ...
. 简介 : Android 常用的代码结构, 包括包的规范, 测试用例规范, 数据库模块常用编写规范; 参考 : 之前写的一篇博客 [Android 应用开发] Application 使用分析 ; ...
- pig 的chararry类型不能用比较运算符comparison operator
pig 的chararry类型可能是按字段,逐个字段进行比较. element_id 是chararray类型, 语句: no_app_category_mapping = filter no_ele ...
- 【shell脚本练习】grep sed awk
下面是简单学习之后做得练习题,如果有不对的或者说解题思路不好的,请交流啊. Grep 练习 文件名grepfile Steve Blenheim:238-923-7366:95 Latham Lane ...
- 结构体:探析C#文件方式读写结构体
最近直在研究Net Micro Framework字体文件(tinyfnt)由于tinyfnt文件头部有段描述数据所以很想 定义个结构体像VC样直接从文件中读出来省得用流个个解析很是麻烦 没有想到在中 ...
- CSDN2013年度博客之星评选
亲爱的3Ser,大家好!很荣幸我能够成为CSDN 2013年度博客之星评选的候选人,希望大家移步到此处,为我投上一票.在过去的一年里,感谢大家对我的支持,2014年我会继续努力,为大家分享更多更好的3 ...
- Pollution over East China : Image of the Day
acquired October 16, 2002download large image (2 MB, JPEG, 6000x4600) acquired October 16, 2002downl ...
- 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计
这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...
- Android Studio中创建Kotlin For Android项目
Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android ...
- Android中SQLiteOpenHelper类的onUpgrade方法浅谈
public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version) 这个方法在实现时需要重写. onUpg ...