这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受吧。呵呵,废话就不多说了。

在此先引用几句别人的资料。。。

Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建。

与hibernate类似,Spring提供了SqlMapClientDaoSupport对象,我们的DAO可以继承这个类,通过它所提供的SqlMapClientTemplate对象来操纵数据库。看起来这些概念都与hibernate类似。

通过SqlMapClientTemplate来操纵数据库的CRUD是没有问题的。此篇文章没有进行事务处理。

本文采用ibatis+spring+mysql 进行编写

数据库脚本如下

create database ibatis;

create table person(
id int primary key,
name varchar(10),
sex int
);

一:要有一个PO类

Person.java

package po;

import java.io.Serializable;

public class Person implements Serializable{
/**
*
*/
private static final long serialVersionUID = -517413165963030507L;
/**
*
*/
private int id;
private String name;
private int sex; public Person(){ }
public Person(int id,String name,int sex){
this.id = id;
this.name = name;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
} }

二:DAO接口类

IAction.java

package dao;

import java.util.List;

import po.Person;

public interface IAction {
public boolean insertPerson(Person person); //添加
public boolean deleteById(int id); //删除
public boolean updatePerson(Person person); //修改
public Person queryById(int id); //根据ID查询
public List<Person> queryAllPerson(); //查询全部
}

三:DAO实现类

ActionImpl.java 此类继承SqlMapClientSupport 实现IAction接口

package dao.impl;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.sqlmap.client.SqlMapSession; import po.Person;
import dao.IAction; public class ActionImpl extends SqlMapClientDaoSupport implements IAction { //添加操作
@Override
public boolean insertPerson(Person person) {
// TODO Auto-generated method stub
getSqlMapClientTemplate().insert("insertPerson",person);
return false;
} //删除操作
@Override
public boolean deleteById(int id) {
// TODO Auto-generated method stub
getSqlMapClientTemplate().delete("deleteById", id);
return false;
} //查询全部
@Override
public List<Person> queryAllPerson() {
// TODO Auto-generated method stub
List<Person> persons = getSqlMapClientTemplate().queryForList("queryAllPerson");
return persons;
} @Override
public Person queryById(int id) {
// TODO Auto-generated method stub
//自己添加实现代码
return null;
} @Override
public boolean updatePerson(Person person) {
// TODO Auto-generated method stub
//自己添加实现代码
return false;
} }

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

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!--此处一定不能有<settings/> 标签-->
<!-- <settings cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false" /> --> <sqlMap resource="po/Person.xml" /> </sqlMapConfig>

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

五:Person.xml

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap>
<typeAlias alias="person" type="po.Person" /> <insert id="insertPerson" parameterClass="po.Person">
<![CDATA[
insert into person values (#id#,#name#,#sex#)
]]>
</insert> <delete id="deleteById" parameterClass="int">
<![CDATA[
delete from person where id=#id#
]]>
</delete> <update id="updatePerson" parameterClass="po.Person">
<![CDATA[
update person set name=#name#,sex=#sex# where id=#id#
]]>
</update> <select id="queryById" parameterClass="int" resultClass="po.Person">
<![CDATA[
select * from person where id=#id#
]]>
</select> <select id="queryAllPerson" cacheModel="personCache" resultClass="po.Person">
<![CDATA[
select * from person
]]>
</select>
</sqlMap>

六:下面最重要的也就是配置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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/ibatis" />
<property name="username" value="root" />
<property name="password" value="1" />
</bean> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation"> <!-- name 为configLocation或s 不可为其他 -->
<value>SqlMapConfig.xml</value> <!-- 不区分大小写,路径前可加'/' -->
</property> <!-- dataSource不是必需 -->
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean> <bean id="personDAO" class="dao.impl.ActionImpl">
<!-- dataSource不是必需 -->
<property name="dataSource">
<ref local="dataSource" />
</property> <!-- sqlMapClient必需 -->
<property name="sqlMapClient">
<ref local="sqlMapClient"/>
</property>
</bean> <!-- transactionManager不是必需 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
</beans>

注释里面的必需或不是必需都是本人多次试验的,至于为什么是必需不必需 其中的原理我也不是能太讲清楚,在此先是这些写罢了。

里面的每一个节点,属性,如果不太理解,可以上网查一些其他资料。

七:编写测试类

此类利用junit进行测试。只测试了部分功能。

package dao.impl;

import java.util.Iterator;
import java.util.List; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import po.Person; public class ActionImplTest {
private static ApplicationContext applicationContext = null; //提供静态ApplicationContext
static{
applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //实例化
}
//添加操作
@Test
public void testInsertPerson(){
ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");
s.insertPerson(new Person(1,"zhangsan",2));
} //删除操作
@Test
public void testDeletePerson(){
ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");
s.deleteById(1);
} //查询全部
@Test
public void testQueryAllPerson(){
ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");
List<Person> persons = s.queryAllPerson();
//System.out.println(persons.size());
Iterator<Person> ite = persons.iterator();
while(ite.hasNext()){
Person person = ite.next();
System.out.print("ID: "+person.getId());
System.out.print(" Name: "+person.getName());
System.out.print(" Sex: "+person.getSex());
System.out.println();
}
}
}

八:如需记录日志 则要log4j.properties

#log4j.rootLogger=DEBUG, stdout
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n
#log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.rootLogger=DEBUG, stdout, fileout
#log4j.logger.test=info
#log4j.logger.org.apache.jasper = DEBUG
#log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG
#log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG log4j.logger.com.fiscal = DEBUG
log4j.logger.com.system = DEBUG log4j.logger.com.ibatis = DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG
log4j.logger.java.sql.Connection = DEBUG
log4j.logger.java.sql.Statement = DEBUG
log4j.logger.java.sql.PreparedStatement = DEBUG, fileout
log4j.logger.java.sql.ResultSet = DEBUG log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=C\:\\ibatis.log
log4j.appender.fileout.MaxFileSize=10000KB log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n #log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout # log4j.logger.org=info

九:已经到最后了,我觉得这最后的才是最最重要的,就是一下jar包问题

我调试了很长时间  一大部分时间是jar问题

在此列出一下我认为能够跑起来这个小程序所需的一下jar包

如没有,可网上下载。

   ibaits-2.3.4.jar
spring.jar
mysql-connector-java-bin.jar
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
spring-orm-2.5.6.jar //已集成到spring.jar里
//记录日志所需
log4j-1.2.15.jar
commons-logging.jar

下面是本人的目录结构图

结束语:此文没有过多的讲些原理性的问题,比如为何这样写,又为何这样配置,只是给出了一个搭建框架的架子而已。

因为我也是一个菜鸟,至于如何,我想,等我们有经验了,会慢慢都懂得。

还希望大家共同努力,实现自己的梦想。

希望能与各位共勉!

ibatis-Spring 整合的更多相关文章

  1. Ibatis,Spring整合(注解方式注入)

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  2. Spring整合Ibatis

    Spring整合Ibatis javaibatisspring 所需jar清单           ibatis-2.*.jar    *为任意版本,下同,ibatis工作包           sp ...

  3. Intellij IDEA +MAVEN+Jetty实现Spring整合Mybatis

    1 pom.xml(这里出现transaction错误,是版本的问题) <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  4. Spring整合MyBatis

    前言:MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用 ...

  5. Spring学习总结(六)——Spring整合MyBatis完整示例

    为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...

  6. Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一

    MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...

  7. Spring 整合 Hibernate

    Spring 整合 Hibernate •Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. •Spring 对这些 OR ...

  8. Mybatis+struts2+spring整合

    把student项目改造成ssm  struts2 +mybatis+spring 1,先添加spring支持:类库三个,applicationContext.xml写在webinf下四个命名空间,监 ...

  9. JAVA开发:分享一些SpringMvc+Ibatis+spring的框架使用心得

    近期不在做.net的项目,而是使用java作为开发语言,就想着要用springmvc开发了,由于前些年也用过struts1/2+hibernate/ibatis+spring开发过项目,因此是有些底子 ...

  10. Spring整合Shiro做权限控制模块详细案例分析

    1.引入Shiro的Maven依赖 <!-- Spring 整合Shiro需要的依赖 --> <dependency> <groupId>org.apache.sh ...

随机推荐

  1. Cocos2d-x之MenuItem

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  2. 从Access创建Sqlite数据库

    首先,我们需要使用SQLite Expert Professional 工具 1.创建一个新的数据库 2.由SQLite Expert创建数据库.然后import --〉Data Transfer W ...

  3. 分布式基础学习(2)分布式计算系统(Map/Reduce)

    二. 分布式计算(Map/Reduce) 分 布式式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google Map/Reduce框架所设计的分布式框架.在Hadoop中,分布式文件 系统,很 ...

  4. Java之IO流基础流对象

    输入流和输出流是相对于内存设备而言 即将外设中的数据读取到内存中就是输入    将内存中的数据写入到外设中就是输出   字符流的由来:     其实就是:字节流读取文字字节数据后,不直接操作而是先查指 ...

  5. php中ssl开发的若干问题

    最近利用php开发ssl的相关功能,由于第一次做相关的事情,遇到了很多问题,庆幸的是最终都顺利解决了.不过相关的资料很少,都是综合了国内外的相关信息才解决的.现在整理一下,方便后来者遇到问题时解决. ...

  6. win7访问xp共享访问不了

    这个问题不是一天两天了,经历几次了,所以记下来. 1. 一些XP对用户权限作了特殊的优化设置.限制了只有guest用户才能用于做局域网共享用户. 2. 大多数时候,需要设置一个密码,才能用于访问. 3 ...

  7. 4GB内存原32位系统(x86)取舍问题,显卡共享内存Win8.1完全不用担心

    情景:集成显卡 配置: 4G显示3.25GB 此时系统自动将用不到的系统完全共享给显卡(768MB而不是256): 看显卡适配器信息,完全共享给了显卡 解说:上图总可用图形内存 = 图2中备用 + 硬 ...

  8. Asterisk 未来之路3.0_0006

    原文:Asterisk 未来之路3.0_0006 Modules Asterisk 是基于模块构建的.一个模块提供某个特定的功能,它是动态的被装载.比如:信道驱动(chan_sip.so),或可以连接 ...

  9. 基于Asterisk的VoIP开发指南——(2)Asterisk AGI程序编写指南

    原文:基于Asterisk的VoIP开发指南--(2)Asterisk AGI程序编写指南 5. Asterisk AGI程序编写指南 5.1概述 很多时候,我们需要在拨号方案中做某些业务逻辑的判断或 ...

  10. C#实现文档转换成PDF

    网上有很多将doc.ppt.xls等类型的文档转换成pdf的方法,目前了解到的有两大类: 1.使用虚拟打印机将doc.ppt.xls等类型的文档 2.使用OFFICE COM组件 我采用了第二种方法实 ...