`

Myibatis和spring的集成(与事务配置) 二

 
阅读更多
昨天已经把主要的类和配置文件贴上了,今天来分析一下,我也是从用ibatis再到MyIbatis

用过来的,MyBatis 的前身就是 iBatis 两者还很有区别,也有很大的改进,MyBatis 对
sql的支持更好,更加灵活.

1.如何和spring集成到一起?

第一步肯定是在applicationContext.xml中增加相应的配置,有spring容器来管理

Myibatis,那么这个jar是必不可少的 mybatis-spring-1.0.1-SNAPSHOT.jar由于

Spring 3.0仅支持 iBatis2。那么,我们就想将 MyBatis3 的支持添加到 Spring3.0

中。不幸的是,Spring 3.0 的开发在 MyBatis 3.0 官方发布前就结束了。所以这个jar

不是spring官方的,应该是MyBatis团队的后续开发的在 MyBatis-Spring 中,

SqlSessionFactoryBean 是用于创建 SqlSessionFactory 的。要配置这个工bean,

放置下面的代码在 Spring 的 applicationContext.xml 配置文件中




<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="configLocation" value="classpath:/config/ibatisConfig.xml" />
	<property name="typeAliasesPackage" value="com.ibatis.model" />
	<property name="mapperLocations" value="classpath*:com/ibatis/mapper/*.xml" />
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.ibatis.dao" />
</bean>

要注意 SqlSessionFactory 需要一个 DataSource,这可以是任意的 DataSource,配置它就和配置其它 Spring 数据库连接一样SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口,这就说明由 Spring 最终创建的 bean不是SessionFactoryBean 本身,而是工厂类的 getObject()返回的方法的结果。这种情况下,Spring 将会在应用启动时为你创建 SqlSessionFactory 对象,然后将它以 SqlSessionFactory 为名来存储.

在一般的 MyBatis-Spring 用法中,你不需要直接使用 SqlSessionFactoryBean 或和其对应的 SqlSessionFactory。相反,session 工厂将会被注入到apperFactoryBean 或其它扩展了 SqlSessionDaoSupport 的 DAO

SqlSessionFactory的几个主要属性:
有一个单独的必须属性,就是 JDBC 的 DataSource。这可以是任意的 DataSource,其配置应该和其它 Spring 数据库连接是一样的。 一个通用的属性是 configLocation,它是用来指定 MyBatis 的 XML 配置文件路径的。如果基本的MyBatis 配置需要改变,那么这就是一个需要它的地方。通常这会是<settings>或<typeAliases>的部分。要注意这个配置文件不需要是一个完整的 MyBatis 配置。确定地说,任意环境,数据源和 MyBatis 的事务管理器都会被忽略SqlSessionFactoryBean 会创建它自己的,使用这些值定制 MyBatis 的 Environment 时是需要的。如果yBatis 映射器 XML 文件在和映射器类相同的路径下不存在,那么另外一个需要配置文件的原因就是它了。使用这个配置,有两种选择。第一是手动在 MyBatis 的 XML 配置文件中使用<mappers>部分来指定类路径。第二是使用工厂 bean 的 mapperLocations 属性。

属性mapperLocations
使用一个资源位置的 list。这个属性可以用来指定 MyBatis 的 XML映射器文件的位置。它的值可以包含 Ant 样式来加载一个目录中所有文件,或者从基路径下递归搜索所有路径。classpath*:com/ibatis/mapper/*.xml

属性typeAliasesPackage
从名字看来是[类型的别名]包,猜也就是把这个包下面的类默认生成一个别名,就类名全称,配置这个以后,在以后我们的映射文件*Mapper.xml中就可以使用它,不用在  resultType="com.*.*.Person"什么的,可以直接使用类名即可,
resultType="Person".

属性configLocation
是用来加载mybatis-config.xml文件(文件名可以任意)用来修改一些Myibatis的默认属性和核心配置,比如我们在用到存储过程时候返回的游标[CURSOR],但是我们想把这个游标变成一个List<Map<String,Object>>的集合,那么我可以写个类来继承BaseTypeHandler这个类来实现处理,方法如下:
在mybatis-config.xml 添加

<typeHandlers>
	<typeHandler javaType="Map" jdbcType="CURSOR" handler="com.ibatis.typeHandler.ResultSetTypeHandler"/>
</typeHandlers>


那么,ResultSetTypeHandler这个类就是具体的实现代码如下:
package com.ibatis.typeHandler;


import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

/**
 * 存储过程的游标解析器
 * @author wujj
 */
public class ResultSetTypeHandler extends BaseTypeHandler<List<Map<String, Object>>> {

	@Override
	public List<Map<String, Object>> getNullableResult(ResultSet arg0, String arg1) throws SQLException {
		return null;
	}

	@Override
	public List<Map<String, Object>> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {

		List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

		ResultSet rs = (ResultSet) cs.getObject(columnIndex);

		if (!rs.isClosed()) {

			ResultSetMetaData data = rs.getMetaData();
			int columnCnt = data.getColumnCount();

			while (rs.next()) {
				Map<String, Object> rowMap = new HashMap<String, Object>();
				for (int i = 1; i <= columnCnt; i++) {
					String colName = data.getColumnName(i).toLowerCase();
					Object colValue = rs.getObject(colName);
					// TODO 类型处理
					rowMap.put(colName, colValue == null ? StringUtils.EMPTY : colValue.toString());
				}
				result.add(rowMap);
			}
		}

		return result;
	}

	@Override
	public void setNonNullParameter(PreparedStatement arg0, int arg1, List<Map<String, Object>> arg2, JdbcType arg3) throws SQLException {
	}

}

还可以用添加一写类似于拦截器的功能,比如在某个Service执行update时候拦截,等等...
今天先写到这里,这个是sqlSessionFactory 里面主要属性的介绍.明天继续....
1
0
分享到:
评论

相关推荐

    myibatis+spring+springmvc框架整合

    3. 集成MyBatis:在Spring配置文件中配置SqlSessionFactoryBean,并指定MyBatis的配置文件路径。接着,通过MapperScannerConfigurer扫描Mapper接口,使Spring能自动创建并管理这些接口的实例。 4. 编写Mapper接口和...

    Strust2+Spring+ibatis整合开发实例

    通过MyBatis-Spring插件,iBatis可以与Spring无缝集成,使得数据库操作可以利用Spring的事务管理和其他服务。 整合Struts2、Spring和iBatis的步骤通常包括以下部分: 1. 引入依赖:在项目中引入这三个框架的相应...

    springmvc-myibatis-heibernate

    通过分析这些文件,我们可以了解如何在实际项目中实现Spring MVC与MyBatis的整合,包括配置文件的编写、接口设计和数据库操作的实现。这是一个学习和实践的好例子,可以帮助开发者深入理解这两个框架的协同工作方式...

    Myibatis3.4.2 SpringMVC4.2.0-合并(SSM框架)源码

    SSM框架,即Spring、SpringMVC和MyBatis的集成,是Java开发中常见的Web应用框架组合。这里我们关注的是"Myibatis3.4.2 SpringMVC4.2.0-合并(SSM框架)源码",这是一份2017年的最新源码,用于帮助开发者理解如何将这三...

    MyIbatIS中文版电子书

    9. **一级缓存与二级缓存**:解析MyBatis的缓存策略,包括默认的一级缓存和可配置的二级缓存,以及缓存的清除和更新策略。 10. **MyBatis与Spring整合**:学习如何在Spring框架中集成MyBatis,使用Spring的...

    myibatis开发官方帮助文档

    10. **MyBatis与Spring整合**:如果项目中使用Spring,了解如何配置Spring与MyBatis的整合,实现依赖注入,以及事务的统一管理。 通过深入学习这份官方文档,开发者不仅能掌握MyBatis的基本操作,还能理解其设计...

    springmvc+spirng+myibatis jar包

    标题 "springmvc+spirng+myibatis jar包" 描述的是一个包含了一系列Java库的压缩文件,这些库主要用于构建基于Spring MVC、Spring框架和MyBatis的Web应用程序。这个组合是Java后端开发中常见的一种技术栈,用于处理...

    spring3 ibatis整合实例

    在本项目中,Spring 3作为核心框架,负责管理对象的生命周期和事务,以及与iBatis的集成。 2. **iBatis**:iBatis 是一个SQL映射框架,它将SQL语句和Java代码分离,使得开发者可以更加灵活地处理数据库操作。iBatis...

    SSM全自动整合

    SSM全自动整合是一个重要的Java Web开发中的概念,它涉及到Spring、Spring MVC和MyBatis三个框架的集成。SSM是目前广泛使用的后端技术栈,尤其在中国的互联网行业中。这个整合过程旨在创建一个高效、可维护且易于...

    spring3.0+struts2+mybatis3.0整合

    在本项目中,Spring作为核心容器,负责管理对象的生命周期和依赖关系,同时它也提供了与Struts 2和MyBatis的集成接口。 **Struts 2** 是一个基于MVC设计模式的Web应用框架,用于处理用户请求并返回响应。它提供了...

    MyiBatis3源码+用户指南

    9. **事务控制**:理解MyBatis如何与Spring等框架集成进行事务管理。 而`mybatis.zip`中的源码分析部分,可以帮助开发者深入理解MyBatis的内部机制: 1. **SqlSessionFactoryBuilder**:如何构建SqlSessionFactory...

    myibatis实战教程

    5. 与Spring框架的集成,包括Spring3,以实现更高效的服务管理和事务管理。 6. 与Spring MVC的集成,构建Web应用。 7. MyBatis的分页实现,通过自定义插件或特定的分页查询方法。 8. 动态SQL语句,MyBatis允许在映射...

    sring+ibatis+struts项目

    MyBatis与Spring的集成可以实现动态SQL,事务管理和数据库会话管理,使得数据访问更加灵活高效。在项目中,myIbatis文件很可能是MyBatis的相关配置,包括Mapper接口、XML映射文件和实体类。 在"Spring+iBatis+...

    springwebproject

    【SpringWebProject】是一个综合性的IT项目,集成了Spring、AOP(面向切面编程)、MyBatis和Web开发技术。这个项目旨在提供一个全面的框架,用于构建高效、可扩展且易于维护的企业级Web应用。 Spring是Java企业级...

    Mybatisdemo

    在实际项目中,还可以使用Spring框架与Mybatis集成,实现依赖注入和事务管理,简化上述代码。 综上所述,【Mybatisdemo】提供的学习资料涵盖了Mybatis的基本配置、Mapper接口与XML映射文件的编写、以及如何在实际...

Global site tag (gtag.js) - Google Analytics