ibatis-Spring 整合

这两天一直在研究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 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 queryAllPerson() { // TODO Auto-generated method stub List 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

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

五:Person.xml

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



六:下面最重要的也就是配置applicationContext.xml了

SqlMapConfig.xml


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

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

七:编写测试类

此类利用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 persons = s.queryAllPerson(); //System.out.println(persons.size()); Iterator 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 整合)