`
log_cd
  • 浏览: 1098604 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

spring ibatis入门

阅读更多
一、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:jee="http://www.springframework.org/schema/jee"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="     
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd     
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-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/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd    
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"   
       default-lazy-init="true">
       
       <!-- 配置事务特性 -->
	   <tx:advice id="txAdvice" transaction-manager="TrasanctionMagnager">
	        <tx:attributes>
	           <tx:method name="add*" propagation="REQUIRED"/>
	           <tx:method name="del*" propagation="REQUIRED"/>
	           <tx:method name="update*" propagation="REQUIRED"/>
	           <tx:method name="*" read-only="true"/>
	       </tx:attributes>
	    </tx:advice>

       <!-- 配置哪些类的方法需要进行事务管理 -->
	   <aop:config>
	      <aop:pointcut id="allManagerMethod" expression="execution(* com.ibatis.manager.*.*(..))"/>
	      <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
	   </aop:config>
       
	   <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		  <property name="dataSource" ref="dataSource"/>
       </bean>
		
	   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	      <property name="url" value="jdbc:mysql://127.0.0.1/springapp"/>
	      <property name="username" value="root"/>
	      <property name="password" value="root"/>
	  </bean>

	  <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
          <property name="configLocation">
              <value>classpath:sqlMapConfig.xml</value>
          </property>
          <property name="dataSource" ref="dataSource"/> 
     </bean>
     
     
     <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">  
	    <constructor-arg>  
	        <ref bean="sqlMapClient"></ref>  
	    </constructor-arg>
	</bean>  
          
    <bean id="userDAO" class="com.ibatis.dao.impl.UserDAOImpl">
    	 <property name="sqlMapClient" ref="sqlMapClient"/>
	</bean>
    
</beans>


二、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"   
            errorTracingEnabled="true"   
            lazyLoadingEnabled="true"   
            maxRequests="32"   
            maxSessions="10"   
            maxTransactions="5"   
            useStatementNamespaces="false"/>
            
    <!-- 使用spring之后,数据源的配置移植到了spring上,所以iBATIS本身的配置可以取消 -->
    <sqlMap resource="com/ibatis/dao/impl/User.xml"/>

</sqlMapConfig>


三、User.java
package com.ibatis.model;

import java.io.Serializable;

public class User implements Serializable{
	private static final long serialVersionUID = 1L;
	
	private Integer id;
	private String username;
	private String password;
	
	public User() {
	}

	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
}


四、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 namespace="User">

 <!-- Use type aliases to avoid typing the full classname every time. -->

 <typeAlias alias="user" type="com.ibatis.model.User"/>

 <select id="selectAllUsers" resultClass="user">
	<![CDATA[ 
    	select * from t_user
    ]]>
 </select>

 <select id="selectUser" resultClass="user" parameterClass="int">
	<![CDATA[ 
	  	select * from t_user where id=#id#
    ]]>
 </select>

 <insert id="insertUser" parameterClass="user">
	<![CDATA[ 
	  insert into t_user values (
	       null,#username#,#password#
	  )
    ]]>
 </insert>

  <update id="updateUser" parameterClass="user">
	<![CDATA[ 
	  update t_user set username = #username#,password=#password#
	  where id=#id#
    ]]>
  </update>

 <delete id="deleteUser" parameterClass="int">
	<![CDATA[ 
	  delete from t_user where id=#id#
    ]]>
 </delete>

</sqlMap>


五、UserDao.java
package com.ibatis.dao;

import java.util.List;

import com.ibatis.model.User;

public interface UserDao {
	public void select(User user);
	
	public List findAll();
	
	public void delete(User user);
	
	public void save(User user);
	
	public void update(User user);
}


六、UserDaoImpl.java
package com.ibatis.dao.impl;

import java.util.List;

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

import com.ibatis.dao.UserDAO;
import com.ibatis.model.User;

public class UserDAOImpl extends SqlMapClientDaoSupport implements UserDAO {
	public void select(User user) {
		getSqlMapClientTemplate().delete("selectUser ", user.getId());
	}

	public List findAll() {
		return getSqlMapClientTemplate().queryForList("selectAllUsers",null);
	}

	public void delete(User user) {
		getSqlMapClientTemplate().delete("deleteUser", user.getId());
	}

	public void save(User user) {
		getSqlMapClientTemplate().insert("insertUser", user);
	}

	public void update(User user) {
		getSqlMapClientTemplate().update("updateUser", user);
	}

}


七、测试
package com.logcd.test;

import java.util.List;

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

import com.ibatis.dao.UserDAO;
import com.ibatis.model.User;

import junit.framework.TestCase;

public class IbatisTest extends TestCase {

	private UserDAO userDAO; 
	
	protected void setUp() throws Exception {
		super.setUp();
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		userDAO = (UserDAO)context.getBean("userDAO");
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	@SuppressWarnings("unchecked")
	public void testUserService(){
		User usr = new User();
		usr.setUsername("User" + Math.round(Math.random()*1000));
		usr.setPassword("654321");
		userDAO.save(usr);
		
		List<User> list = userDAO.findAll();
		for(User user : list){
			System.out.println("UserName:" + user.getUsername());
		}
	}
}

八、iBatis 控制台输出 sql:log4j.properties
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

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,stdout 

九、运行期从iBatis中取出sql
1.通过SqlMapClientDaoSupport,SqlMapClientImpl,MappedStatement,Sql,RequestScope等ibatis提供的类
   String sql = null;
   SqlMapClientImpl sqlmap = (SqlMapClientImpl) this.getSqlMapClient();
   MappedStatement stmt = sqlmap.getMappedStatement("getUserInfoList");
   Sql stmtSql = stmt.getSql();
  
   RequestScope requestScope = new RequestScope();
   requestScope.setStatement(stmt);
   sql = stmtSql.getSql(requestScope, companyId);
   System.out.println(sql);	

2.通过SqlMapExecutorDelegate,MappedStatement,Sql,RequestScope等ibatis提供的类
   SqlMapExecutorDelegate delegate=((ExtendedSqlMapClient)
    (getSqlMapClientTemplate().getSqlMapClient())).getDelegate();     
   
   MappedStatement ms = delegate.getMappedStatement("getUserInfoList");   
   Sql sql=ms.getSql(); 
   RequestScope requestScope = new RequestScope();
   requestScope.setStatement(ms);
   String sqlStr = sql.getSql(requestScope,companyId); 
   System.out.println(sqlStr); 

关于RequestScope
说明:
在websphere中,要注意DocType部分写法:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Employee">
	<select id="getEmployees" resultClass="java.util.HashMap">
		SELECT * FROM EMPLOYEE
	</select>
</sqlMap>


Spring+ibatis编程rollback
//设置一个回滚的点
Object create = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
//在要回滚的地方调用下面的方法就可以了
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(create);
//设置这个则是这个方法里的数据库操作全部回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

分享到:
评论
2 楼 archie2010 2011-04-02  
1 楼 sunofsummer 2010-10-24  
谢谢分享 不错

相关推荐

    struts2+spring+ibatis 项目 入门使用

    Struts2、Spring和iBatis是Java Web开发中经典的三大框架,它们组合起来可以构建出高效、可维护的企业级应用程序。本项目旨在为初学者提供一个基础的入门指南,帮助理解并掌握这三个框架的集成与使用,实现CRUD...

    Ibatis 入门经典 实例

    《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...

    Ibatis入门例子,Ibatis教程

    在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    ibatis入门

    - 易于集成:Ibatis 可以轻松地与其他框架(如 Spring)集成,实现更强大的功能。 通过这个入门教程,你将掌握 Ibatis 的基础用法,从而能够进行基本的数据库操作。在实际项目中,随着对 Ibatis 的深入理解和应用...

    最简单的iBatis入门例子

    本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...

    cairngorm简单入门实例(结合spring+ibatis)

    提供的"cairngorm简单入门实例.doc"文档应该详细介绍了如何设置项目、配置Cairngorm框架、整合Spring和iBatis,以及创建和运行一个基本的交互流程。`cairngormDemo`可能是一个包含所有源代码和配置文件的项目,包括...

    ibatis入门教程_ibatis入门教程_源码

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得...通过学习这个Ibatis入门教程,你可以了解并掌握如何在Java应用中使用Ibatis进行数据操作,为后续的进阶学习和项目开发打下坚实的基础。

    SSI Spring+struts1+ibatis案例

    在IT行业中,SSI(Spring、Struts1、iBatis)是经典的Java Web开发框架组合,它们各自负责应用的不同层面,协同工作以构建高效、可维护的系统。在这个"Spring+struts1+ibatis案例"中,我们将深入探讨这三个框架如何...

    iBatis入门Helloworld

    iBatis,现已被更名为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...通过这个简单的"iBatis入门Helloworld"项目,你可以快速掌握iBatis的基础操作,并为进一步学习和应用打下坚实基础。

    iBATIS入门讲解和程序源码+iBATIS开发指南电子书

    在iBATIS入门讲解中,你会了解到如何设置项目环境,包括添加iBATIS库依赖、配置数据源以及创建SqlSessionFactory。SqlSessionFactory是iBATIS的核心组件,它负责创建SqlSession对象,SqlSession是执行SQL语句的接口...

    ibatis入门,Ibatis开发指南,JPetStore-5.0

    - 首先,阅读《IBatis入门手册》了解基本概念和安装步骤。 - 掌握XML配置和注解方式的Mapper接口定义。 - 学习如何进行参数映射和结果映射。 - 实践JPetStore-5.0源码,理解其架构和数据库交互逻辑。 - 最后,...

    ibatis入门教程与开发指南

    **ibatis入门教程与开发指南** Ibatis,全称MyBatis-iBATIS,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Ibatis可以使用简单...

    ibatisDemo 入门源码

    《IbatisDemo入门源码详解》 IbatisDemo是一个典型的基于Ibatis框架的入门示例,它为我们展示了如何在Java项目中使用Ibatis进行数据库操作。Ibatis,一个优秀的持久层框架,它允许开发者将SQL语句直接写在配置文件...

    struts2+ibatis+Spring 入门

    Struts2、iBatis和Spring是Java Web开发中三个非常重要的框架,它们结合使用能够构建出高效、灵活的企业级应用程序。以下是对这三个框架及其整合使用的详细解释。 **Struts2** 是一个基于MVC(Model-View-...

    ibatis开发指南,ibatis入门教程

    对于Spring整合Ibatis,还需要配置SqlSessionFactoryBean,它会根据配置文件生成SqlSessionFactory,它是SqlSession的工厂。 四、动态SQL Ibatis的动态SQL功能非常强大,允许我们在映射文件中直接写条件语句,如if...

    webwork增删改简单入门例子(+spring+ibatis)

    在这个“webwork增删改简单入门例子(+spring+ibatis)”中,我们将探讨如何结合Spring和iBatis这两个流行的技术来构建一个基础的CRUD(创建、读取、更新、删除)应用。 1. WebWork基础知识: - 控制器:WebWork的...

    Spring hibernate ibatis 开发指南三合一

    "Spring Guide.pdf"很可能是Spring框架的入门教程,涵盖了Spring的基本概念、配置、Bean管理、AOP、事务管理等内容,可能还会介绍Spring MVC用于构建Web应用的部分。 "Hibernate_DEV_GUIDE.rar"应包含Hibernate的...

Global site tag (gtag.js) - Google Analytics