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

原创整理不易,转载请注明出处: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 com.zuidaima.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 com.zuidaima.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 com.zuidaima.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 com.zuidaima.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

下面是本人的目录结构图

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

时间: 2024-10-29 16:10:27

spring框架整合ibatis的项目实例代码的相关文章

spring框架整合使用定时任务框架java quartz的示例代码配置

原创整理不易,转载请注明出处:spring框架整合使用定时任务框架java quartz的示例代码配置 代码下载地址:http://www.zuidaima.com/share/1775583461723136.htm 有时候我们的任务(Job)需要再某些任务完成之后才能进行:例如从旧的数据库批量导数据的时候:需要现将被其他数据依赖的数据导入新的数据库:然后再进行关系的导入..在这种情况下我们就可以使用Quartz的listener来做文章了. 首先我们写一个主任务的类,命名为MainJob:她

Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程

原创整理不易,转载请注明出处:Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程 代码下载地址:http://www.zuidaima.com/share/1778685765291008.htm 在<Struts2教程4:使用validate方法验证数据>中曾讲到使用validate方法来验证客户端提交的数据,但如果使用validate方法就会将验证代码和正常的逻辑代码混在一起,但这样做并不利于代码维护,而且也很难将过些代码用于其他程序的验证.在St

spring,hibernate,spring框架整合

SSH框架作为javaEE最经典的框架, 初学者整合这几个框架可能也是一件比较头痛的事情(包括我自己), 下面来进行框架的整合!   一:   准备   SSH框架介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet, 处于MVC的控制层,Struts 2是Struts的下一代产品,个人认为: struts2~~struts+xwork; Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表

Spring框架整合Struts2

1,用Spring架构,及Struts2-spring-plugin插件 导入Spring的dist全部所需的jar包 Struts2的spring插件 struts2-spring-plugin.XX.jar struts2的核心包 struts2-core.XX.jar xwork- core.XX.jar commons.logging.XX.jar ...根据需要选择导入 2,配置web.xml中applicationContext.xml的参数路径及侦听器 <context-param

spring 框架整合 笔记4

struts hibernate spring 先贴出框架整合需要的maven <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/mave

EasyUI、Struts2、Hibernate、spring 框架整合

经历了四个月的学习,中间过程曲折离奇,好在坚持下来了,也到了最后框架的整合中间过程也只有自己能体会了. 接下来开始说一下整合中的问题和技巧: 1,  jar包导入 c3p0(2个).jdbc(1个).spring(15个).Hibernate(10个).Struts2(13个).json(3个) 及EasyUI的jquery包 2, 在src目录下新建一个实体类的包,并新建一个实体类 package com.han.entity; import java.util.Date; public cl

Java框架:spring框架整合hibernate框架的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:context="http://www.springframework.org/sch

【Java】MyBatis与Spring框架整合(二)

本文讲解 Spring 注入映射器及事务功能的实现. 注入映射器实现 MyBatis 可以使用 SqlSession 的 getMapper ( Class<T> type ) 方法,根据指定的映射器和映射文件直接生成实现类.这样不必自行编写映射器的实现类,就可以调用映射器的方法进行功能实现. SqlSessionTemplate 也有对应的 getMapper()方法,利用 MyBatis-Spring 提供的组件,可以不必每次调用 getMapper()方法,而是通过配置的方式直接为业务对

Spring框架整合WEB解决配置文件加载多次的问题

1. 创建JavaWEB项目,引入Spring的开发包.编写具体的类和方法. * 环境搭建好后,启动服务器来测试项目,发送每访问一次都会加载一次配置文件,这样效率会非常非常慢!! 2. 解决上面的问题 * 将工厂创建好了以后放入到ServletContext域中.使用工厂的时候,从ServletContext中获得. * ServletContextListener:用来监听ServletContext对象的创建和销毁的监听器. * 当ServletContext对象创建的时候:创建工厂 , 将