`
gc715409742
  • 浏览: 94804 次
  • 来自: 北京
社区版块
存档分类

ibatis与spring整合(小例子)

    博客分类:
  • Java
阅读更多
先说说自己最近的问题吧。

最近大脑变懒了,遇到问题没有思考而直接Google。在网上也看到过一些描述这种问题的帖子,总之这种习惯很不好,对自己没有一点帮助(如果仅仅复制网上的代码,而没有分析网上代码),所有正在努力改正这个缺点,希望与同有这种“不良”习惯的同行共勉。

言归正传。

最近也是很浮躁,与生活有很大的关系,所有经常想一些办法让自己“静”下来。于是写了ibatis与spring整合的小例子,很简单,官方文档很写的很清楚,如果想更加明白理解可以看看官方文档。在文章的下面我只贴一些配置文件的代码,其它代码就“不好意思”贴下来了。以后大家忘记了头文件怎么写,也可以参考参考。相信大家都懂下面的代码我就不解释了。

1.ibatis映射文件User.xml
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
    
    <sqlMap>
        <typeAlias alias="User" type="pojo.User"/>
        
        <!-- 动态配置WHERE条件 -->
        <sql id="baseUserWhere">
            <dynamic prepend="WHERE">
                <isNotEmpty property="id" prepend="and">
                    id = #id#
                </isNotEmpty>
                <isNotEmpty property="username" prepend="and">
                    username = #username#
                </isNotEmpty>
                <isNotEmpty property="password" prepend="and">
                    password = #password#
                </isNotEmpty>
                <isNotEmpty property="isUser" prepend="and">
                    isUser = #isUser#
                </isNotEmpty>
            </dynamic>
        </sql>
        
        <!-- 动态配置SET条件 -->
        <sql id="baseUserSet">
            <dynamic prepend="SET">
                <isNotNull property="fileds.id" prepend=",">
                    id = #fileds.id#
                </isNotNull>
                <isNotNull property="fileds.username" prepend=",">
                    username = #fileds.username#
                </isNotNull>
                <isNotNull property="fileds.password" prepend=",">
                    password = #fileds.password#
                </isNotNull>
                <isNotNull property="fileds.isUser" prepend=",">
                    isUser = #fileds.isUser#
                </isNotNull>
            </dynamic>
        </sql>
        
        <select id="selectUserById" parameterClass="java.lang.String" resultClass="User">
            <![CDATA[
                select id, username, password, isUser from tab_user where id = #id#;
            ]]>
        </select>
        
        <select id="selectUserAll" resultClass="User">
            <![CDATA[
                select id, username, password, isUser from tab_user;
            ]]>
        </select>
        
        <insert id="insertUser" parameterClass="User">
            <![CDATA[
                insert into tab_user (
                    id, 
                    username, 
                    password, 
                    isUser
                ) values (
                    #id#, 
                    #username#, 
                    #password#, 
                    #isUser#
                );
            ]]>
        </insert>
        
        <update id="updateUser" parameterClass="User">
            <![CDATA[
                update tab_user set
                    username = #username#,
                    password = #password#,
                    isUser = #isUser#
                where
                    id = #id#;
            ]]>
        </update>
        
        <delete id="deleteUserById" parameterClass="java.lang.String">
            <![CDATA[
                delete from tab_user where id = #id#;
            ]]>
        </delete>
        
    </sqlMap>


2.ibatis配置文件SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
    
    <sqlMapConfig>
    
        <!-- 
        <settings cacheModelsEnabled="true" enhancementEnabled="true"
            lazyLoadingEnabled="true" maxRequests="2014" maxSessions="512"
            maxTransactions="128" useStatementNamespaces="true" />
         -->
        
        <!-- 导入映射文件 -->
        <sqlMap resource="dao/impl/User.xml"/>
        
    </sqlMapConfig>


3.数据源文件jdbc.properties
jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
jdbc.username = root
jdbc.password = root

#    BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 以便Spring容器关闭时,数据源能够正常关闭。除以上必须的数据源属性外,还有一些常用的属性:
#        
#    defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;
#    defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false;
#    maxActive:最大连接数据库连接数,设置为0时,表示没有限制;
#    maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;
#    maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息;
#    validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据, 如你可以简单地设置为:“select count(*) from user”;
#    removeAbandoned:是否自我中断,默认是 false ;
#    removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值;
#    logAbandoned:是否记录中断事件, 默认为 false; 


4.spring配置文件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"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="classpath:sqlMapConfig.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <!-- dao -->
    <bean id="userDao" class="dao.impl.UserDaoImpl">
        <property name="sqlMapClient" ref="sqlMapClient"></property>
    </bean>
    
    <!-- service -->
    <bean id="userService" class="service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>
    
    <!-- 配置文件 -->
    <bean id="propertyConfigurer"     
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">      
        <property name="location" value="jdbc.properties"/>      
    </bean>
    
    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName">
            <value>${jdbc.driverClass}</value>
        </property>
        <property name="url">
            <value>${jdbc.url}</value>
        </property>
        <property name="username">
            <value>${jdbc.username}</value>
        </property>
        <property name="password">
            <value>${jdbc.password}</value>
        </property>
    </bean>
    
    <!-- 配置事物管理 -->
    <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
</beans>


5.log4j配置文件log4j.properties

  log4j配置在web项目中很重要。

#--------------------------------   
#  
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  
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  
#--------------------------------   


最后贴出自己的测试代码,采用单元测试。

5.Test代码UserTest.java

package test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import pojo.User;

import service.UserService;

import junit.framework.TestCase;

public class UserTest extends TestCase{

    private static ApplicationContext applicationContext;
    
    private static UserService userService;
        
    static{
        applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); 
        userService = (UserService) applicationContext.getBean("userService");
    }
    
    /**
     * 测试插入数据
     * @throws Exception
     */
    public void insertTest() throws Exception{
        User user = new User();
        user.setId("1");
        user.setUsername("guchao2");
        user.setPassword("123456");
        user.setIsUser(new Integer(1));
        userService.insertUser(user);
    }
    
    /**
     * 测试查询数据
     * @throws Exception
     */
    public void selectTest() throws Exception{
        User user = new User();
        user = userService.selectUser("0");
        System.out.println(user.getId() + " " + user.getUsername() + " " + user.getPassword() + " " + (user.getIsUser().equals(new Integer(1))? "是" : "否"));
    }
    
    /**
     * 测试查询全部数据
     * @throws Exception
     */
    public void selectAllTest() throws Exception{
        List<User> users = new ArrayList<User>();
        users = userService.selectUserAll();
        Iterator<User> iterator = users.iterator();
        while(iterator.hasNext()){
            User user = iterator.next();
            System.out.println(user.getId() + " " + user.getUsername() + " " + user.getPassword() + " " + (user.getIsUser().equals(new Integer(1))? "是" : "否"));
        }
    }
    
    /**
     * 测试更新数据
     * @throws Exception
     */
    public void update() throws Exception{
        User user = new User();
        user.setId("0");
        user.setUsername("gc");
        user.setPassword("123");
        user.setIsUser(new Integer(0));
        userService.updateUser(user);
    }
    
    /**
     * 测试删除数据
     * @throws Exception
     */
    public void delete() throws Exception{
        userService.deleteUser("0");
    }
    
}


包也要提一下:

就这些了。

补充:一不小心给忘了Dao层实现类(可能以后忘了继承SqlMapClientDaoSupport类)

6.数据访问实现类UserDAoImpl.java

package dao.impl;

import java.sql.SQLException;
import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import pojo.User;

import dao.UserDao;

public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao{

    @Override
    public void delete(String id) throws SQLException {
        // TODO Auto-generated method stub
        getSqlMapClientTemplate().delete("deleteUserById", id);
    }

    @Override
    public void insert(User user) throws SQLException {
        // TODO Auto-generated method stub
        getSqlMapClientTemplate().insert("insertUser", user);
    }

    @Override
    public User select(String id) throws SQLException {
        // TODO Auto-generated method stub
        return (User) getSqlMapClientTemplate().queryForObject("selectUserById", id);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> selectAll() throws SQLException {
        // TODO Auto-generated method stub
        return getSqlMapClientTemplate().queryForList("selectUserAll");
    }

    @Override
    public void update(User user) throws SQLException {
        // TODO Auto-generated method stub
        getSqlMapClientTemplate().update("updateUser", user);
    }

}
分享到:
评论

相关推荐

    iBatis与Spring整合的例子

    ### iBatis与Spring整合的例子 #### 一、概述 在现代软件开发中,整合不同的技术框架是非常常见的需求。本文将详细介绍如何将iBatis(现称为MyBatis)与Spring框架进行整合,并通过一个具体的例子来展示整合过程中...

    Ibatis和Spring整合例子,实现增删改查功能

    Ibatis和Spring整合例子,实现增删改查功能.

    ibatis与Spring整合例子

    在IT领域,iBATIS和Spring的整合是一个常见的实践,特别是在构建基于Java的企业级应用时。iBATIS是一个优秀的持久层框架,它简化了数据库操作,而Spring则是一个全面的框架,提供了依赖注入、事务管理等多种功能。接...

    ibatis和spring整合开发 例子

    本篇文章将详细探讨如何将Ibatis与Spring进行整合开发,并提供一个实际的例子。 Ibatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在配置文件中,提供了灵活的映射机制,避免了ORM框架的过度抽象。而...

    ibatis和Spring整合的详细例子

    ibatis和Spring整合的详细例子 iBatis和Spring整合的详细例子,数据库用的是mysql,开发环境是Eclipse3.2。 1、首先把用到的包导入进来:  spring-framework-1.2.7.jar  iBATIS_DBL-2.1.7.597.jar  mysql-...

    struts+iBATIS+spring整合例子

    Struts、iBATIS和Spring是Java开发中常用的三大框架,它们各自负责不同的职责,而将它们整合在一起,可以构建出高效、灵活的企业级应用程序。本文将深入探讨这三者的核心概念、整合过程以及实际应用。 **Struts** ...

    ibatis+spring+struts2 整合开发例子

    "ibatis+spring+struts2 整合开发例子"就是一个典型的Java Web应用集成开发案例,旨在帮助开发者理解和掌握这三大框架的协同工作原理。接下来,我们将详细讨论这三个组件以及它们的整合过程。 Ibatis是一个轻量级的...

    struts2+ibatis+spring的小例子

    整合Struts2、iBatis和Spring,开发者可以: - 使用Struts2的Action和结果映射来处理HTTP请求,提供控制器功能。 - 在iBatis的SQL映射文件中编写SQL,通过DAO层与数据库进行交互,确保数据库操作的独立性。 - 利用...

    struts+spring+ibatis+mysql整合小例子(适用于新手)

    对于初学者,这个小例子是一个很好的起点,因为它涵盖了Web开发的基本组件,并通过详细的注解解释了它们之间的交互。理解这个整合案例将有助于深入掌握Java Web开发的核心技术。通过实践,你可以逐步学习如何配置...

    spring+ibatis+ehcache整合例子

    这个"spring+ibatis+ehcache整合例子"是一个完整的示例项目,展示了如何将这三个框架无缝集成到一个基于MySQL数据库的应用中。下面将详细介绍这三个框架及其整合的关键点。 **Spring框架** Spring是一个全面的企业...

    ibatis+Spring+struts2整合实例

    本实例关注的是“ibatis+Spring+struts2”的整合,这是一个经典的Java Web开发组合,用于实现数据访问、业务逻辑控制和用户界面交互。下面我们将深入探讨这三个组件及其整合的关键知识点。 1. **iBATIS**:iBATIS...

    struts2 + spring + ibatis 整合例子

    通过Struts2、Spring和iBatis的整合,我们可以实现模型、视图和控制的分离,提高代码的可读性和可维护性。同时,Spring的DI和AOP特性使得对象管理更加灵活,iBatis则提供了方便的数据库操作方式。这样的组合在企业级...

    backbone+bootstrap+ibatis+spring例子

    结合这四个技术,"backbone+bootstrap+ibatis+spring例子"创建了一个完整的Web应用解决方案,前端利用Backbone.js进行状态管理和界面渲染,Bootstrap提升UI体验,后端则借助Spring处理业务逻辑并与数据库交互。...

    Structs2.0+Spring2.5+Ibatis整合例子

    本项目"Structs2.0+Spring2.5+Ibatis整合例子"就是这样一个示例,展示了如何将Struts2、Spring和iBatis这三个流行的技术栈整合在一起,以实现MVC(模型-视图-控制器)架构。以下将详细阐述这三个框架的核心功能以及...

    Ibatis+Spring2.5+Structs2.0整合的一个小例子

    在这个"Ibatis+Spring2.5+Structs2.0整合的一个小例子"中,我们将探讨如何将这三种技术集成到一个应用中,以实现数据的增、删、查功能。Ibatis、Spring和Structs是Java开发中常用的三个框架,它们各自在不同的层面上...

    Spring+Struts2+Ibatis整合例子

    在这个整合例子中,由于jar文件过大未上传,所以具体的配置细节无法提供。但是,你可以参考上述的整合步骤,结合实际的项目需求,配置自己的Spring、Struts2和iBatis环境。记得在配置文件中仔细设置各个框架的连接,...

    Struts2+Spring2+iBatis2整合的例子

    在"Struts2+Spring+iBatis整合的小例子"中,开发者通常会做以下工作: 1. **环境配置**:首先,确保JDK、Tomcat、MySQL等基础环境的安装和配置。然后,将Struts2、Spring、iBatis的相关jar包添加到项目的类路径中。...

Global site tag (gtag.js) - Google Analytics