`
san_yun
  • 浏览: 2639538 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Spring对Ibatis的封装

 
阅读更多
spring 对ibatis的封装通过SqlMapClientTemplate实现。

通常如果我们直接使用ibatis的sqlMapClient进行insert操作或者queryForObject都会抛出sqlSQLException:

	 try {
			cli.insert("MS-INSERT-UNREADCOUNT", unreadCount);
		} catch (SQLException e) {
			logger.error("create UnReadCount: ", e);
		}

处理这种错误很没意思,通过spring的sqlMapClientTemplate只需一行代码:
sqlMapClientTemplate.insert("MS-INSERT-UNREADCOUNT", unreadCount);

看看spring如何帮我们封装的:
	public <T> T execute(SqlMapClientCallback<T> action) throws DataAccessException {
		Assert.notNull(action, "Callback object must not be null");
		Assert.notNull(this.sqlMapClient, "No SqlMapClient specified");

		// We always need to use a SqlMapSession, as we need to pass a Spring-managed
		// Connection (potentially transactional) in. This shouldn't be necessary if
		// we run against a TransactionAwareDataSourceProxy underneath, but unfortunately
		// we still need it to make iBATIS batch execution work properly: If iBATIS
		// doesn't recognize an existing transaction, it automatically executes the
		// batch for every single statement...

		SqlMapSession session = this.sqlMapClient.openSession();
		if (logger.isDebugEnabled()) {
			logger.debug("Opened SqlMapSession [" + session + "] for iBATIS operation");
		}
		Connection ibatisCon = null;

		try {
			Connection springCon = null;
			DataSource dataSource = getDataSource();
			boolean transactionAware = (dataSource instanceof TransactionAwareDataSourceProxy);

			// Obtain JDBC Connection to operate on...
			try {
				ibatisCon = session.getCurrentConnection();
				if (ibatisCon == null) {
					springCon = (transactionAware ?
							dataSource.getConnection() : DataSourceUtils.doGetConnection(dataSource));
					session.setUserConnection(springCon);
					if (logger.isDebugEnabled()) {
						logger.debug("Obtained JDBC Connection [" + springCon + "] for iBATIS operation");
					}
				}
				else {
					if (logger.isDebugEnabled()) {
						logger.debug("Reusing JDBC Connection [" + ibatisCon + "] for iBATIS operation");
					}
				}
			}
			catch (SQLException ex) {
				throw new CannotGetJdbcConnectionException("Could not get JDBC Connection", ex);
			}

			// Execute given callback...
			try {
				return action.doInSqlMapClient(session);
			}
			catch (SQLException ex) {
				throw getExceptionTranslator().translate("SqlMapClient operation", null, ex);
			}
			finally {
				try {
					if (springCon != null) {
						if (transactionAware) {
							springCon.close();
						}
						else {
							DataSourceUtils.doReleaseConnection(springCon, dataSource);
						}
					}
				}
				catch (Throwable ex) {
					logger.debug("Could not close JDBC Connection", ex);
				}
			}

			// Processing finished - potentially session still to be closed.
		}
		finally {
			// Only close SqlMapSession if we know we've actually opened it
			// at the present level.
			if (ibatisCon == null) {
				session.close();
			}
		}
	}


最后所有的insert,update,delete,query都通过execute被执行。
分享到:
评论

相关推荐

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Ibatis更适合那些需要对SQL有高度定制需求的项目。 在`stm-ssh`和`SSHdemo`中,可能包含的是Struts2+Spring+Hibernate的整合示例。开发者通常会创建Action类来处理请求,定义Service层来封装业务逻辑,并使用...

    Spring与iBATIS的集成

    在iBATIS中,SQL语句被封装在XML配置文件中,这些文件包含了SQL查询、插入、更新和删除的定义,以及结果集的映射规则。这些映射规则将SQL查询的结果与Java Bean对象关联起来。Spring可以通过MapperScannerConfigurer...

    struts+spring+ibatis的Demo

    4. **Service接口和实现类**:封装业务逻辑,通过iBatis执行SQL。 5. **Action类**:处理HTTP请求,调用Service,返回结果。 6. **JSP页面**:展示数据或接收用户输入。 通过研究这个Demo,开发者可以学习到如何在...

    webwork+spring+ibatis很适合初学者的实例

    在iBATIS中,SQL语句被封装在映射文件中,与Java代码分离,使得SQL可以独立优化。它支持动态SQL,允许开发者在运行时构建SQL语句,提供了强大的查询能力和灵活性。iBATIS与Spring的整合允许通过Spring的DAO和Service...

    struts+spring+ibatis框架

    iBatis将数据访问逻辑封装在XML配置文件或注解中,通过SQL映射文件来定义SQL语句,然后通过Java接口或Mapper来执行这些SQL。这种方式既避免了JDBC的繁琐,又比ORM框架如Hibernate更为轻便,适合对SQL有高度定制需求...

    struts+spring+ibatis框架集合教程

    Spring还提供了数据访问支持,包括JDBC抽象、ORM集成(如Hibernate、MyBatis)以及对各种数据库的支持。 3. iBatis框架:iBatis是一个SQL映射框架,它将SQL语句与Java代码分离,提供了一种灵活的方式来执行数据库...

    spring+ibatis demo搭建

    ### Spring+Ibatis Demo搭建详解 #### 一、项目背景与目标 在现代软件开发过程中,集成多种技术栈来构建高效稳定的应用系统是常见的做法。本文档将详细介绍如何使用Spring和Ibatis这两种流行的技术框架搭建一个...

    struts2+spring+ibatis的小demo

    - **DAO (Data Access Object)**: 通过iBatis实现,封装数据库操作。 - **SQL Mapping**: iBatis中的SQL配置,定义了如何与数据库交互。 - **事务管理**: Spring提供的事务边界,确保数据一致性。 这个小demo提供了...

    Struts1+Spring+iBatis-jar包

    Struts1、Spring和iBatis是Java Web开发中经典的三大框架,它们分别负责MVC模式中的控制器、业务逻辑管理和服务层数据访问。这个"Struts1+Spring+iBatis-jar包"集合了这三个框架的核心组件,为开发者提供了一个快速...

    Struts2 Spring Ibatis mysql 项目整合

    Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们分别负责MVC模式中的动作控制、依赖注入及持久层操作。本项目整合了这三个框架,并使用MySQL作为数据库,实现了一个基础的用户登录注册查询删除的功能...

    spring+ibatis整合web所需ibatis包

    在IT行业中,Spring和iBatis的整合是常见的企业级应用开发模式,它结合了Spring的强大功能和iBatis的灵活数据库操作。本资源“spring+ibatis整合web所需ibatis包”提供的是用于实现这一整合的关键iBatis库,解决在...

    strusts2+spring+ibatis

    Struts2、Spring和iBatis是Java Web开发中三个非常重要的开源框架,它们的整合应用可以构建出高效、灵活的MVC(Model-View-Controller)架构。在这个"Struts2+Spring+iBatis"的项目中,我们看到的是一个用户登录功能...

    struts2+spring+ibatis学生管理demo

    同时,Spring的事务管理能力确保了对数据库操作的原子性和一致性,通过声明式事务管理,可以在XML配置文件中轻松设置事务边界,如开启、提交、回滚等操作。 Ibatis是轻量级的持久层框架,它简化了JDBC的繁琐工作,...

    搭建spring mvc+spring+ibatis所需所有jar包

    在构建Java Web应用程序时,Spring MVC、Spring和iBatis是三个非常重要的框架。Spring MVC作为Spring框架的一部分,主要用于处理Web请求,Spring则提供全面的依赖注入和面向切面编程功能,而iBatis则是一个优秀的...

    SPRING JAVA IBATIS文档

    文件"Spring 2.5 Reference.pdf"是Spring 2.5版本的官方参考文档,包含了Spring框架的详细介绍和使用指南,对理解Spring的核心概念和技术细节非常有帮助。"Thinking.In.Java.3rd.Edition.Chinese.eBook.pdf"是...

    spring\ibatis样例工程

    【标题】"spring\ibatis样例工程"揭示了这个压缩包内容是一个基于Spring和iBatis框架的示例Web MVC项目。这个项目是为学习和理解如何在实际开发环境中集成和使用这两个流行的技术而创建的。Spring是一个全面的Java...

    Strust2+Spring+ibatis整合开发实例

    Spring还提供了Spring MVC模块,与Struts2类似,用于构建Web应用的控制层,同时Spring还包含对JDBC的封装,以及对iBatis的集成支持。 3. iBatis:iBatis是一个优秀的持久层框架,它允许开发者将SQL语句写在XML配置...

    mybaits-spring(ibatis-spring)-1.0.2-bundle

    1. SqlSessionTemplate:它是MyBatis-Spring的核心组件,封装了SqlSession的生命周期管理,遵循Spring的模板方法模式。开发者可以在自定义的DAO层方法中使用它,执行SQL语句,无需关心SqlSession的开启、关闭和异常...

    strut2+spring+ibatis 的ation层,service层,dao层自动生成,简单易用

    在本项目中,自动生成的Service层代码可以包含对业务逻辑的封装,使得业务处理更加模块化,便于维护和测试。 iBatis,作为一个轻量级的持久层框架,它将SQL语句与Java代码分离,提供了一种灵活的映射机制。通过XML...

    spring+ibatis eclipse工程示例

    Spring 和 iBATIS 是两个非常重要的 Java 开发框架,它们在企业级应用开发中被广泛使用。本示例工程是将这两个框架集成到 Eclipse IDE 中的一个实例,旨在帮助开发者理解和学习如何在实际项目中结合使用 Spring 和 ...

Global site tag (gtag.js) - Google Analytics