ibatis-Spring 整合

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

 这两天一直在研究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 keyname 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 sqlMapConfigPUBLIC "-//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 sqlMapPUBLIC "-//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=DEBUGlog4j.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




下面是本人的目录结构图

 


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

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

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

        希望能与各位共勉!

 

 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值