`
zhangwei_david
  • 浏览: 475969 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring、iBatis配置

阅读更多

   在Spring 中集成iBatis的配置是很简单了,下面是一个简单的配置示例:

 

Spring 的配置文件

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/jee 
		http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
		http://www.springframework.org/schema/task  
        http://www.springframework.org/schema/task/spring-task-3.1.xsd  
		">
	<context:component-scan base-package="com.david.demo.common.*" />
	<context:property-placeholder location="classpath:META-INF/config.properties" />
	<!-- 定义数据源 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="${jdbc.ams.driver}" />
		<property name="jdbcUrl" value="${jdbc.ams.url}" />
		<property name="user" value="${jdbc.ams.username}" />
		<property name="password" value="${jdbc.ams.password}" />
		<property name="initialPoolSize" value="${initialSize}" />
		<property name="minPoolSize" value="${minPoolSize}" />
		<property name="maxPoolSize" value="${maxActive}" />
		<property name="acquireIncrement" value="${acquireIncrement}" />
		<property name="maxIdleTime" value="${maxIdleTime}" />
	</bean>

	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:META-INF/sqlmap/sqlmap.xml" />
	</bean>

</beans>

 config.properties

jdbc.ams.driver=com.mysql.jdbc.Driver
jdbc.ams.url=jdbc:mysql://localhost:3306/test
jdbc.ams.username=root
jdbc.ams.password=root
initialSize=3
minPoolSize=5
maxActive=100
acquireIncrement=3
maxIdleTime=10

 sqlMap.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>
<!-- 
		cacheModelsEnable  是否启用sqlMapClient上的缓存机制, 
		enhancementEnabled 是否省队POJO启用字节码增强,提升getter/setter效率  
		lazyLoadingEnabled 是否启用延迟加载机制
		errorTracingEnable 是否启用错误日志
		maxRequest 最大并发请求数(Statement 并发数)
		maxSession 最大Session数(SqlMapClient 并发数) maxTransaction=<maxSession=<maxRequest
		maxTransactions 最大并发事务
		useStatemnetNamespaces 是否启用命名空间
	
 -->
	<settings cacheModelsEnabled="false" enhancementEnabled="true"
		lazyLoadingEnabled="true" errorTracingEnabled="true" useStatementNamespaces="true" maxRequests="3000"
		maxSessions="3000" maxTransactions="3000" />
	<sqlMap resource="META-INF/sqlmap/sqlmap-Book.xml" />
</sqlMapConfig> 

 sqlmap-Book.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="demo">

	<resultMap class="com.david.common.domain.Book" id="BooKMap">
		<result property="id" column="id" javaType="int" />
		<result property="name" column="name" javaType="java.lang.String" />
		<result property="price" column="price" javaType="int" nullValue="0" />
		<result property="extend" column="extend" typeHandler="com.david.demo.common.handler.ExtendTypeHandler"/>
	</resultMap>
	
	<typeAlias alias="Book" type="com.david.common.domain.Book" />
	<parameterMap class="Book" id="book">   
        <parameter property="name" javaType="java.lang.String" nullValue="test"/>
        <parameter property="price" javaType="int" nullValue="0"/>
        <parameter property="extend" typeHandler="com.david.demo.common.handler.ExtendTypeHandler" />  
    </parameterMap> 
	
	<insert id="insert" parameterMap="book">
		insert into t_book (name,price,extend) values (?,?,?)
		<selectKey keyProperty="id" resultClass="Integer">
			select
			LAST_INSERT_ID()
		</selectKey>
	</insert>
	<select id="select-all" resultMap="BooKMap">
		select id,name,price,extend,gmt_create,gmt_modify from t_book
	</select>

	<delete id="delete-by-id">
		delete from t_book where id=#id#
	</delete>

</sqlMap>

 

 iBatis执行SQL的关键入口是SqlMapClientImpl。通过该类的源码可以发现,在构造方法中注入了一个SqlMapExecutorDelegate 实例,但该类并不真正执行Sql 而是通过SqlMapSession去执行的。

/**
 * Implementation of ExtendedSqlMapClient
 */
public class SqlMapClientImpl implements SqlMapClient, ExtendedSqlMapClient {

  private static final Log log = LogFactory.getLog(SqlMapClientImpl.class);

  /**
   * 执行SQL的代理
   */
  public SqlMapExecutorDelegate delegate;

  protected ThreadLocal localSqlMapSession = new ThreadLocal();

  /**
   * Constructor to supply a delegate
   *
   * @param delegate - the delegate
   */
  public SqlMapClientImpl(SqlMapExecutorDelegate delegate) {
    this.delegate = delegate;
  }

  public Object insert(String id, Object param) throws SQLException {
    return getLocalSqlMapSession().insert(id, param);
  }

...
/**
	获取当前线程的SqlMapSession,如果当前线程中没有SqlMapSession或SqlMapSession已经关闭,则创建一个新的SqlMapSession 并存入到当前线程中。
*/
  protected SqlMapSessionImpl getLocalSqlMapSession() {
    SqlMapSessionImpl sqlMapSession = (SqlMapSessionImpl) localSqlMapSession.get();
    if (sqlMapSession == null || sqlMapSession.isClosed()) {
	 // 使用当前SqlMapClientImpl 作为构造参数构造一个新的SqlMapSession实例
      sqlMapSession = new SqlMapSessionImpl(this);
	  // 将实例放入ThreadLocal中
      localSqlMapSession.set(sqlMapSession);
    }
    return sqlMapSession;
  }
...
}

 通过SqlMapSessionImpl 的源码可以发现,在构造函数中,将SqlMapClientImpl中的属性delegate赋值给了SqlMapSessionImpl的属性delegate,同时可以发现SqlMapExecutorDelegate是真正执行Sql的地方

**
 * Implementation of SqlMapSession
 */
public class SqlMapSessionImpl implements SqlMapSession {

  protected SqlMapExecutorDelegate delegate;
  protected SessionScope sessionScope;
  protected boolean closed;

  /**
   * Constructor
   *
   * @param client - the client that will use the session
   */
  public SqlMapSessionImpl(SqlMapClientImpl client) {
    this.delegate = client.getDelegate();
    this.sessionScope = this.delegate.beginSessionScope();
    this.sessionScope.setSqlMapClient(client);
    this.sessionScope.setSqlMapExecutor(client);
    this.sessionScope.setSqlMapTxMgr(client);
    this.closed = false;
  }

  /**
   * Start the session
   */
  public void open() {
    sessionScope.setSqlMapTxMgr(this);
  }

  /**
   * Getter to tell if the session is still open
   *
   * @return - the status of the session
   */
  public boolean isClosed() {
    return closed;
  }

  public void close() {
    if (delegate != null && sessionScope != null) delegate.endSessionScope(sessionScope);
    if (sessionScope != null) sessionScope = null;
    if (delegate != null) delegate = null;
    if (!closed) closed = true;
  }
// 使用SqlMapExecutorDelegate去执行SQL
  public Object insert(String id, Object param) throws SQLException {
    return delegate.insert(sessionScope, id, param);
  }
  ...

 

0
1
分享到:
评论
2 楼 zhangwei_david 2015-02-27  
x_root 写道
现在都用mybatis了哦。

我们项目还是在使用iBatis
1 楼 x_root 2015-02-27  
现在都用mybatis了哦。

相关推荐

    spring ibatis 配置(包括事务管理)

    在整合Spring和iBatis框架时,我们需要进行一系列的配置工作,以便于让Spring负责管理iBatis的数据访问层。Spring作为一个强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,可以方便地...

    spring+ibatis配置实例

    "spring+ibatis配置实例"这个项目提供了一个完整的开发环境,包含所需的依赖包和标准化的项目结构,对初学者或开发者来说极具价值。 Spring是一个全面的Java应用框架,它提供了依赖注入(Dependency Injection,DI...

    spring+ibatis事务的配置

    很好的spring+ibatis事务的配置文档.

    spring ibatis整合所需jar包

    3. iBatis配置:创建一个名为`sqlmap-config.xml`的iBatis配置文件,定义数据源、事务管理器以及SQL映射文件的位置。 4. 映射文件:每个数据库表对应一个或多个SQL映射文件,如`UserMapper.xml`,其中定义了SQL语句...

    Spring+ibatis 保留ibatis事务的配置

    ibatis配置文件中,可以看到关于ibatis事务管理器的配置。这里设置事务管理器类型为JDBC,表示ibatis将直接使用底层的JDBC连接进行事务控制,而不是使用Spring提供的事务管理器。 ```xml ``` ...

    SPRING IBATIS 保留IBATIS事务的配置方式

    -- 通过文件路径指定iBatis配置文件 --&gt; &lt;value&gt;/WEB-INF/SqlMapConfig.xml ``` #### iBatis事务管理配置 最值得关注的部分是iBatis的事务管理配置,这里明确指定了事务管理器的类型为`JDBC`,并且定义了...

    spring与ibatis整合集成实例

    3. **配置文件**:在整合过程中,需要配置两部分:Spring 配置文件(如 `applicationContext.xml`)和 iBATIS 配置文件(如 `sqlMapConfig.xml`)。Spring 配置文件中定义数据源、事务管理器以及 ...

    struts2 spring ibatis 项目整合源码

    Struts2、Spring和iBatis是Java Web开发中三个非常重要的框架,它们分别负责MVC模式中的Action层、业务层管理和数据访问层。在这个项目整合源码中,这三个组件协同工作,构建了一个完整的Web应用程序。 Struts2是...

    spring和ibatis配置与模板

    spring和ibatis配置与模板

    Spring与iBATIS的集成

    2. **配置Spring**:接下来,需要在Spring的配置文件中定义iBATIS的SqlMapClient或SqlSessionFactory Bean,并配置数据源、事务管理器等相关属性。 3. **定义映射文件**:iBATIS的核心在于定义SQL映射文件,这些...

    Spring+iBatis配置[归类].pdf

    【Spring+iBatis配置归类】的文档主要涵盖了Spring框架与iBatis集成的细节,旨在简化数据库访问的代码,并提供统一的异常处理机制。在本文档中,我们将深入探讨Spring如何与iBatis协同工作,包括JavaBean实体、映射...

    Struts+Spring+Ibatis环境配置(一) - zwjxf的专栏 - 博

    Struts+Spring+Ibatis环境配置(一) - zwjxf的专栏 - 博

    Struts2 Spring Ibatis mysql 项目整合

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

    struts2 spring ibatis整合的最少最全jar包

    Struts2、Spring和iBatis是Java Web开发中非常重要的三个框架,它们分别负责MVC模式中的Action层、业务逻辑层以及数据访问层。这三个框架的整合可以提供一个高效且灵活的开发环境,帮助开发者构建出结构清晰、易于...

    Spring+iBatis配置[文].pdf

    【Spring+iBatis配置】是软件开发中常见的一种技术整合,用于构建高效、灵活的数据访问层。Spring框架提供了对iBatis的内建支持,使得开发者可以更方便地使用iBatis进行数据库操作,同时利用Spring的优势进行事务...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...

    struts2 spring ibatis 整合架构

    6. **配置数据源**:在Spring中配置数据源,以便iBatis能够连接数据库。 7. **编写Mapper接口和XML文件**:定义数据库操作接口,XML文件中编写具体的SQL语句。 8. **测试**:编写JUnit测试或在实际应用中测试整合后...

    spring_ibatis整合案例

    - **iBatis配置**:编写MyBatis的配置文件(如`mybatis-config.xml`),设置数据源、事务管理器等,并定义Mapper接口和对应的XML映射文件。 4. **Mapper接口与XML映射文件** - **Mapper接口**:在Java中创建...

Global site tag (gtag.js) - Google Analytics