spring框架整合ibatis的项目实例代码

来源:互联网 发布:ubuntu jdk gz 安装 编辑:程序博客网 时间:2024/06/01 09:26

原文:spring框架整合ibatis的项目实例代码

源代码下载地址:http://www.zuidaima.com/share/1780211932679168.htm


 这两天一直在研究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包

   如没有,可网上下载。

  1. ibaits-2.3.4.jar  
  2. spring.jar  
  3. mysql-connector-java-bin.jar  
  4. commons-dbcp-1.4.jar  
  5. commons-pool-1.5.6.jar  
  6. spring-orm-2.5.6.jar //已集成到spring.jar里  
  7. //记录日志所需  
  8.  log4j-1.2.15.jar  
  9. commons-logging.jar 




下面是本人的目录结构图

0 0
原创粉丝点击