主题:ibatis3整合spring

Ibatis与Spring3整合实践指南 本文还有配套的精品资源,点击获取 简介:整合Ibatis和Spring3框架以提升开发效率和系统可维护性,通过关键步骤实现两者的协同工作。首先介绍Ibatis作为轻量级SQL映射框架的优势,然后阐述Spring框架的企业级功能。接着,详细说明整合过程中的关键点,包括添加依赖、配置SqlSessionFactory、注册Mapper接口、管理事务、使用SqlSessionTe... 阅读详情

 以前一直从事hibernate教学工作,有几个学生说他们现在有某些时刻要用到ibatis,所有我也研究了一下。
不过我是从ibatis3学起,感觉比ibatis2爽多子。

    因为ibatis3现在还是测试版,spring也没有出相应的整合。所以,我根据spring整合hibernate的原理,也出来show一下,高手就不要笑我了。开工

主要是的文件有:
   Ibatis3SessionFactory.java      这个是由spring读取ibatis配置文件,并产生sessionFactory工厂的

    Ibatis3DaoSupport.java          我们的dao主要继承它了,因为它有一个模板类,定义了许多方法.

    IBatis3DaoTemplate.java         不是上面的说的模板类

    SqlSessionCallback.java          回调方法。

一 . 我们先来看一下Ibatis3SessionFactory.java

Java代码
  1. package com.ibatis3;   
  2.   
  3. import java.io.IOException;   
  4. import java.io.Reader;   
  5.   
  6. import javax.sql.DataSource;   
  7.   
  8. import org.apache.ibatis.builder.xml.XMLConfigBuilder;   
  9. import org.apache.ibatis.io.Resources;   
  10. import org.apache.ibatis.mapping.Environment;   
  11. import org.apache.ibatis.session.Configuration;   
  12. import org.apache.ibatis.session.SqlSessionFactory;   
  13. import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;   
  14. import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;   
  15. import org.springframework.beans.factory.FactoryBean;   
  16. import org.springframework.beans.factory.InitializingBean;   
  17. import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;   
  18. /*  
  19.  *  session工厂类  
  20.  */  
  21. public class Ibatis3SessionFactory implements FactoryBean, InitializingBean {   
  22.     private String configLocation;   
  23.   
  24.     private DataSource dataSource;   
  25.   
  26.     private SqlSessionFactory sqlSessionFactory;   
  27.   
  28.     private boolean useTransactionAwareDataSource = true;   
  29.   
  30.     private String environmentId = "development";   
  31.   
  32.     public void setEnvironmentId(String environmentId) {   
  33.         this.environmentId = environmentId;   
  34.     }   
  35.   
  36.     public void setUseTransactionAwareDataSource(   
  37.             boolean useTransactionAwareDataSource) {   
  38.         this.useTransactionAwareDataSource = useTransactionAwareDataSource;   
  39.     }   
  40.   
  41.     public Object getObject() throws Exception {   
  42.         return this.sqlSessionFactory;   
  43.     }   
  44.   
  45.     public Class getObjectType() {   
  46.         return (this.sqlSessionFactory != null ? this.sqlSessionFactory   
  47.                 .getClass() : SqlSessionFactory.class);   
  48.     }   
  49.   
  50.     public boolean isSingleton() {   
  51.         return true;   
  52.     }   
  53.   
  54.     public void afterPropertiesSet() throws Exception {   
  55.         this.sqlSessionFactory = this.buildSqlSessionFactory(configLocation);   
  56.     }   
  57.     protected SqlSessionFactory buildSqlSessionFactory(String configLocation)   
  58.             throws IOException {   
  59.         if (configLocation == null) {   
  60.             throw new IllegalArgumentException(   
  61.                     "configLocation entry is required");   
  62.         }   
  63.         DataSource dataSourceToUse = this.dataSource;   
  64.         if (this.useTransactionAwareDataSource   
  65.                 && !(this.dataSource instanceof TransactionAwareDataSourceProxy)) {   
  66.             dataSourceToUse = new TransactionAwareDataSourceProxy(   
  67.                     this.dataSource);   
  68.         }   
  69.   
  70.         Environment environment = new Environment(environmentId,   
  71.                 new ManagedTransactionFactory(), dataSourceToUse);   
  72.   
  73.         Reader reader = Resources.getResourceAsReader(configLocation);   
  74.         XMLConfigBuilder parser = new XMLConfigBuilder(reader, null, null);   
  75.         Configuration config = parser.parse();   
  76.         config.setEnvironment(environment);   
  77.   
  78.         return new DefaultSqlSessionFactory(config);   
  79.     }   
  80.   
  81.     public DataSource getDataSource() {   
  82.         return dataSource;   
  83.     }   
  84.   
  85.     public void setDataSource(DataSource dataSource) {   
  86.         this.dataSource = dataSource;   
  87.     }   
  88.   
  89.     public void setConfigLocation(String configLocation) {   
  90.         this.configLocation = configLocation;   
  91.     }   
  92. }  
package com.ibatis3;

import java.io.IOException;
import java.io.Reader;

import javax.sql.DataSource;

import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
/*
 *  session工厂类
 */
public class Ibatis3SessionFactory implements FactoryBean, InitializingBean {
	private String configLocation;

	private DataSource dataSource;

	private SqlSessionFactory sqlSessionFactory;

	private boolean useTransactionAwareDataSource = true;

	private String environmentId = "development";

	public void setEnvironmentId(String environmentId) {
		this.environmentId = environmentId;
	}

	public void setUseTransactionAwareDataSource(
			boolean useTransactionAwareDataSource) {
		this.useTransactionAwareDataSource = useTransactionAwareDataSource;
	}

	public Object getObject() throws Exception {
		return this.sqlSessionFactory;
	}

	public Class getObjectType() {
		return (this.sqlSessionFactory != null ? this.sqlSessionFactory
				.getClass() : SqlSessionFactory.class);
	}

	public boolean isSingleton() {
		return true;
	}

	public void afterPropertiesSet() throws Exception {
		this.sqlSessionFactory = this.buildSqlSessionFactory(configLocation);
	}
	protected SqlSessionFactory buildSqlSessionFactory(String configLocation)
			throws IOException {
		if (configLocation == null) {
			throw new IllegalArgumentException(
					"configLocation entry is required");
		}
		DataSource dataSourceToUse = this.dataSource;
		if (this.useTransactionAwareDataSource
				&& !(this.dataSource instanceof TransactionAwareDataSourceProxy)) {
			dataSourceToUse = new TransactionAwareDataSourceProxy(
					this.dataSource);
		}

		Environment environment = new Environment(environmentId,
				new ManagedTransactionFactory(), dataSourceToUse);

		Reader reader = Resources.getResourceAsReader(configLocation);
		XMLConfigBuilder parser = new XMLConfigBuilder(reader, null, null);
		Configuration config = parser.parse();
		config.setEnvironment(environment);

		return new DefaultSqlSessionFactory(config);
	}

	public DataSource getDataSource() {
		return dataSource;
	}

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}

	public void setConfigLocation(String configLocation) {
		this.configLocation = configLocation;
	}
}


上面代码也借鉴了网络上部分代码,因为转来转去,也不知谁是原创。

二. 下面是最简单的回调函数:

Java代码 复制代码
  1. package com.ibatis3;   
  2.   
  3. import org.apache.ibatis.session.SqlSession;   
  4.   
  5. public interface SqlSessionCallback {   
  6.     public Object doInSqlSession(SqlSession session);   
  7. }  
package com.ibatis3;

import org.apache.ibatis.session.SqlSession;

public interface SqlSessionCallback {
	public Object doInSqlSession(SqlSession session);
}




三.模板类

Java代码 复制代码
  1.   package com.ibatis3;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.SQLException;   
  5. import java.util.List;   
  6.   
  7. import javax.sql.DataSource;   
  8.   
  9. import org.apache.ibatis.session.ResultHandler;   
  10. import org.apache.ibatis.session.RowBounds;   
  11. import org.apache.ibatis.session.SqlSession;   
  12. import org.apache.ibatis.session.SqlSessionFactory;   
  13. import org.apache.taglibs.standard.tag.common.sql.DataSourceUtil;   
  14. import org.springframework.jdbc.datasource.DataSourceUtils;   
  15. import org.springframework.jdbc.support.JdbcAccessor;   
  16. import org.springframework.transaction.support.TransactionSynchronizationManager;   
  17.   
  18. public class IBatis3DaoTemplate extends JdbcAccessor {   
  19.     private SqlSessionFactory sessionFactory;   
  20.   
  21.     public IBatis3DaoTemplate(SqlSessionFactory factory) {   
  22.         this.sessionFactory = factory;   
  23.     }   
  24.   
  25.     public SqlSession openSession() {   
  26.         SqlSession session = (SqlSession) TransactionSynchronizationManager   
  27.                 .getResource(sessionFactory);   
  28.         if (session == null) {   
  29.             session = sessionFactory.openSession();   
  30.         }   
  31.         return session;   
  32.     }   
  33.   
  34.     public void setSessionFactory(SqlSessionFactory sessionFactory) {   
  35.         this.sessionFactory = sessionFactory;   
  36.     }   
  37.   
  38.     public List executeFind(SqlSessionCallback callback) {   
  39.         return (List) execute(callback);   
  40.     }   
  41.   
  42.     public Object execute(SqlSessionCallback callback) {   
  43.   
  44.         SqlSession session = openSession();   
  45.   
  46.         Object obj = callback.doInSqlSession(session);   
  47.         if (session != null)   
  48.             session.close();   
  49.   
  50.         return obj;   
  51.     }   
  52.   
  53.     // 删除,根据语句   
  54.     public int delete(final String statement) {   
  55.         return delete(statement, null);   
  56.     }   
  57.   
  58.     // 删除,根据语句,带条件   
  59.     public int delete(final String statement, final Object param) {   
  60.         return (Integer) execute(new SqlSessionCallback() {   
  61.   
  62.             public Object doInSqlSession(SqlSession session) {   
  63.                 if (param != null)   
  64.                     return session.delete(statement, param);   
  65.                 else  
  66.                     return session.delete(statement);   
  67.             }   
  68.         });   
  69.     }   
  70.   
  71.     // 修改带条件   
  72.     public int update(final String statement, final Object param) {   
  73.         return (Integer) execute(new SqlSessionCallback() {   
  74.   
  75.             public Object doInSqlSession(SqlSession session) {   
  76.                 if (param != null)   
  77.                     return session.update(statement, param);   
  78.                 else  
  79.                     return session.update(statement);   
  80.             }   
  81.         });   
  82.     }   
  83.   
  84.     // 修改不带条件   
  85.     public int update(final String statement) {   
  86.         return update(statement, null);   
  87.     }   
  88.   
  89.     // 增加带条件   
  90.     public int insert(final String statement, final Object param) {   
  91.         return (Integer) execute(new SqlSessionCallback() {   
  92.   
  93.             public Object doInSqlSession(SqlSession session) {   
  94.                 if (param != null)   
  95.                     return session.insert(statement, param);   
  96.                 else  
  97.                     return session.insert(statement);   
  98.             }   
  99.         });   
  100.     }   
  101.   
  102.     // 增加不带条件   
  103.     public int insert(final String statement) {   
  104.         return insert(statement, null);   
  105.     }   
  106.   
  107.     // 查询分页   
  108.     public List selectList(final String statement, final Object param,   
  109.             final RowBounds bounds) {   
  110.         return executeFind(new SqlSessionCallback() {   
  111.   
  112.             public Object doInSqlSession(SqlSession session) {   
  113.                 if (statement == null)   
  114.                     throw new IllegalArgumentException(   
  115.                             "Sql 'statement' require");   
  116.                 if (bounds != null && param != null)   
  117.                     return session.selectList(statement, param, bounds);   
  118.                 else if (bounds!=null)   
  119.                     return session.selectList(statement, null, bounds);   
  120.                 else if (param != null) {   
  121.                     return session.selectList(statement, param);   
  122.                 }    
  123.                
  124.                 else  
  125.                     return session.selectList(statement);   
  126.   
  127.             }   
  128.         });   
  129.     }   
  130.   
  131.     // 条件分页   
  132.     public List selectList(final String statement, final Object param,   
  133.             int skip, int limit) {   
  134.         return selectList(statement, param, new RowBounds(skip, limit));   
  135.     }   
  136.   
  137.     // 查询不分页   
  138.     public List selectList(final String statement, final Object param) {   
  139.         return selectList(statement, param, null);   
  140.     }   
  141.   
  142.     // 查询不带条件   
  143.     public List selectList(final String statement) {   
  144.         return selectList(statement, null);   
  145.     }   
  146.   
  147.     // 条件查带处理查询结果,带分页   
  148.     public void select(final String statement, final Object param,   
  149.             final RowBounds bounds, final ResultHandler handler) {   
  150.         if (statement == null || handler == null)   
  151.             throw new IllegalArgumentException(   
  152.                     "'statement' and 'handler' require");   
  153.   
  154.         execute(new SqlSessionCallback() {   
  155.   
  156.             public Object doInSqlSession(SqlSession session) {   
  157.                 if (handler != null && bounds != null && param != null)   
  158.                     session.select(statement, param, bounds, handler);   
  159.                 else if (bounds == null)   
  160.                     session.select(statement, param, handler);   
  161.   
  162.                 return null;   
  163.             }   
  164.         });   
  165.     }   
  166.   
  167.     // 自己处理查询结果 ,不带分页   
  168.     public void select(final String statement, final Object param,   
  169.             final ResultHandler handler) {   
  170.         select(statement, param, null, handler);   
  171.     }   
  172.   
  173.     // 查唯一结果   
  174.     public Object selectOne(final String statement) {   
  175.         return selectOne(statement, null);   
  176.     }   
  177.   
  178.     // 查唯一结果带条件   
  179.     public Object selectOne(final String statement, final Object param) {   
  180.         if (statement == null)   
  181.             throw new IllegalArgumentException("Sql 'statement' require");   
  182.         return execute(new SqlSessionCallback() {   
  183.   
  184.             public Object doInSqlSession(SqlSession session) {   
  185.                 if (param != null)   
  186.                     return session.selectOne(statement, param);   
  187.                 else  
  188.                     return session.selectOne(statement);   
  189.   
  190.             }   
  191.         });   
  192.     }   
  193.   
  194. }  
  package com.ibatis3;

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

import javax.sql.DataSource;

import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.taglibs.standard.tag.common.sql.DataSourceUtil;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.jdbc.support.JdbcAccessor;
import org.springframework.transaction.support.TransactionSynchronizationManager;

public class IBatis3DaoTemplate extends JdbcAccessor {
	private SqlSessionFactory sessionFactory;

	public IBatis3DaoTemplate(SqlSessionFactory factory) {
		this.sessionFactory = factory;
	}

	public SqlSession openSession() {
		SqlSession session = (SqlSession) TransactionSynchronizationManager
				.getResource(sessionFactory);
		if (session == null) {
			session = sessionFactory.openSession();
		}
		return session;
	}

	public void setSessionFactory(SqlSessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public List executeFind(SqlSessionCallback callback) {
		return (List) execute(callback);
	}

	public Object execute(SqlSessionCallback callback) {

		SqlSession session = openSession();

		Object obj = callback.doInSqlSession(session);
		if (session != null)
			session.close();

		return obj;
	}

	// 删除,根据语句
	public int delete(final String statement) {
		return delete(statement, null);
	}

	// 删除,根据语句,带条件
	public int delete(final String statement, final Object param) {
		return (Integer) execute(new SqlSessionCallback() {

			public Object doInSqlSession(SqlSession session) {
				if (param != null)
					return session.delete(statement, param);
				else
					return session.delete(statement);
			}
		});
	}

	// 修改带条件
	public int update(final String statement, final Object param) {
		return (Integer) execute(new SqlSessionCallback() {

			public Object doInSqlSession(SqlSession session) {
				if (param != null)
					return session.update(statement, param);
				else
					return session.update(statement);
			}
		});
	}

	// 修改不带条件
	public int update(final String statement) {
		return update(statement, null);
	}

	// 增加带条件
	public int insert(final String statement, final Object param) {
		return (Integer) execute(new SqlSessionCallback() {

			public Object doInSqlSession(SqlSession session) {
				if (param != null)
					return session.insert(statement, param);
				else
					return session.insert(statement);
			}
		});
	}

	// 增加不带条件
	public int insert(final String statement) {
		return insert(statement, null);
	}

	// 查询分页
	public List selectList(final String statement, final Object param,
			final RowBounds bounds) {
		return executeFind(new SqlSessionCallback() {

			public Object doInSqlSession(SqlSession session) {
				if (statement == null)
					throw new IllegalArgumentException(
							"Sql 'statement' require");
				if (bounds != null && param != null)
					return session.selectList(statement, param, bounds);
				else if (bounds!=null)
					return session.selectList(statement, null, bounds);
				else if (param != null) {
					return session.selectList(statement, param);
				} 
			
				else
					return session.selectList(statement);

			}
		});
	}

	// 条件分页
	public List selectList(final String statement, final Object param,
			int skip, int limit) {
		return selectList(statement, param, new RowBounds(skip, limit));
	}

	// 查询不分页
	public List selectList(final String statement, final Object param) {
		return selectList(statement, param, null);
	}

	// 查询不带条件
	public List selectList(final String statement) {
		return selectList(statement, null);
	}

	// 条件查带处理查询结果,带分页
	public void select(final String statement, final Object param,
			final RowBounds bounds, final ResultHandler handler) {
		if (statement == null || handler == null)
			throw new IllegalArgumentException(
					"'statement' and 'handler' require");

		execute(new SqlSessionCallback() {

			public Object doInSqlSession(SqlSession session) {
				if (handler != null && bounds != null && param != null)
					session.select(statement, param, bounds, handler);
				else if (bounds == null)
					session.select(statement, param, handler);

				return null;
			}
		});
	}

	// 自己处理查询结果 ,不带分页
	public void select(final String statement, final Object param,
			final ResultHandler handler) {
		select(statement, param, null, handler);
	}

	// 查唯一结果
	public Object selectOne(final String statement) {
		return selectOne(statement, null);
	}

	// 查唯一结果带条件
	public Object selectOne(final String statement, final Object param) {
		if (statement == null)
			throw new IllegalArgumentException("Sql 'statement' require");
		return execute(new SqlSessionCallback() {

			public Object doInSqlSession(SqlSession session) {
				if (param != null)
					return session.selectOne(statement, param);
				else
					return session.selectOne(statement);

			}
		});
	}

}


 
四.Ibatis3DaoSupport支持类

Java代码 复制代码
  1.   package com.ibatis3;   
  2.   
  3. import org.springframework.dao.support.DaoSupport;   
  4.   
  5. import org.springframework.transaction.support.TransactionSynchronizationManager;   
  6.   
  7. import org.apache.ibatis.session.SqlSessionFactory;   
  8. import org.apache.ibatis.session.SqlSession;   
  9.   
  10. import javax.sql.DataSource;   
  11. /*  
  12.  * Dao类  
  13.  * 主要接收传入的sessionFactory  
  14.  * 取得模板  
  15.  */  
  16. public class Ibatis3DaoSupport extends DaoSupport {   
  17.     private SqlSessionFactory sessionFactory;   
  18.     private IBatis3DaoTemplate template;   
  19.        
  20.     public void createTemplate(){   
  21.         this.template = new IBatis3DaoTemplate(sessionFactory);   
  22.     }   
  23.   
  24.     public IBatis3DaoTemplate getTemplate() {   
  25.         //System.out.println(template);   
  26.         return template;   
  27.     }   
  28.   
  29.     public void setTemplate(IBatis3DaoTemplate template) {   
  30.         this.template = template;   
  31.     }   
  32.   
  33.     //创建或得到session   
  34.     public SqlSession openSession() {   
  35.   
  36.         SqlSession session = (SqlSession) TransactionSynchronizationManager   
  37.                 .getResource(sessionFactory);   
  38.         if (session == null) {   
  39.             session = sessionFactory.openSession();   
  40.         }   
  41.         
  42.         return session;   
  43.     }   
  44.   
  45.     public SqlSessionFactory getSessionFactory() {   
  46.         return sessionFactory;   
  47.     }   
  48.   
  49.     public void setSessionFactory(SqlSessionFactory sessionFactory) {   
  50.         this.sessionFactory = sessionFactory;   
  51.         this.template = new IBatis3DaoTemplate(sessionFactory);   
  52.            
  53.     }   
  54.   
  55.        
  56.     @Override  
  57.     protected void checkDaoConfig() throws IllegalArgumentException {   
  58.            
  59.         if (sessionFactory == null) {   
  60.             throw new IllegalArgumentException(   
  61.                     "Property 'sessionFactory' or 'template'  is required");   
  62.         }   
  63.   
  64.     }   
  65.   
  66. }  
  package com.ibatis3;

import org.springframework.dao.support.DaoSupport;

import org.springframework.transaction.support.TransactionSynchronizationManager;

import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSession;

import javax.sql.DataSource;
/*
 * Dao类
 * 主要接收传入的sessionFactory
 * 取得模板
 */
public class Ibatis3DaoSupport extends DaoSupport {
	private SqlSessionFactory sessionFactory;
	private IBatis3DaoTemplate template;
	
	public void createTemplate(){
		this.template = new IBatis3DaoTemplate(sessionFactory);
	}

	public IBatis3DaoTemplate getTemplate() {
		//System.out.println(template);
		return template;
	}

	public void setTemplate(IBatis3DaoTemplate template) {
		this.template = template;
	}

	//创建或得到session
	public SqlSession openSession() {

		SqlSession session = (SqlSession) TransactionSynchronizationManager
				.getResource(sessionFactory);
		if (session == null) {
			session = sessionFactory.openSession();
		}
     
		return session;
	}

	public SqlSessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SqlSessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
		this.template = new IBatis3DaoTemplate(sessionFactory);
		
	}

	
	@Override
	protected void checkDaoConfig() throws IllegalArgumentException {
		
		if (sessionFactory == null) {
			throw new IllegalArgumentException(
					"Property 'sessionFactory' or 'template'  is required");
		}

	}

}




五.ibatis配置文件,我放在src下面
  

Java代码
  1.  <?xml version="1.0" encoding="UTF-8"?>   
  2. ;!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"  
  3.                     "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">   
  4.   
  5. ;configuration>   
  6.  <mappers>   
  7.    <mapper resource="com/pojos/Dep.xml"/>   
  8. </mappers>   
  9. ;/configuration>   
    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
                       "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">

<configuration>
    <mappers>
      <mapper resource="com/pojos/Dep.xml"/>
   </mappers>
</configuration>

   


  很简单,就是装载些映射文件,其实可以sessionFactory中完成。

六.  pojo类和映射文件就不贴出了,请看附件

七.  spring的配置文件,用了声明式事务.
   

Java代码 复制代码
  1.      <?xml version="1.0" encoding="UTF-8"?>   
  2.   
  3. lt;beans xmlns="http://www.springframework.org/schema/beans"  
  4. xmlns:aop="http://www.springframework.org/schema/aop"  
  5. xmlns:tx="http://www.springframework.org/schema/tx"  
  6. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  7. xsi:schemaLocation="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/aop  http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">   
  8. <!-- - - - - - - - Apache Dbcp Pool - - - - - - - -->   
  9. <bean id="datasource"  
  10.     class="org.apache.commons.dbcp.BasicDataSource">   
  11.     <property name="driverClassName"  
  12.         value="oracle.jdbc.driver.OracleDriver" />   
  13.     <property name="username" value="scott" />   
  14.     <property name="password" value="tiger" />   
  15.     <property name="url"  
  16.         value="jdbc:oracle:thin:@127.0.0.1:1521:ora92" />   
  17. </bean>   
  18.   
  19. <!-- sqlMapClientSessionBean -->   
  20. <bean id="sessionFactory"  
  21.     class="com.ibatis3.Ibatis3SessionFactory">   
  22.     <property name="configLocation" value="sqlMapConfig.xml"></property>   
  23.     <property name="dataSource" ref="datasource"></property>   
  24. </bean>   
  25.   
  26. <!-- dao -->   
  27. <bean id="depDao" class="com.dao.DepDaoImpl">   
  28.     <property name="sessionFactory" ref="sessionFactory"></property>   
  29. </bean>   
  30.   
  31. <!-- - - - - - - spring Transaction Manager - - - - - - - -->   
  32. <bean id="transactionManager"  
  33.     class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   
  34.     <property name="dataSource" ref="datasource" />   
  35. </bean>   
  36. <!-- - - - - - - spring Transaction Attribute - - - - - - - -->   
  37. <tx:advice id="transactionAdvice"  
  38.     transaction-manager="transactionManager">   
  39.     <tx:attributes>   
  40.         <tx:method name="*"/>   
  41.     </tx:attributes>   
  42. </tx:advice>   
  43. <!--******    weave  *********-->   
  44. <aop:config>   
  45.     <aop:advisor advice-ref="transactionAdvice"  
  46.         pointcut="execution(* com.test.*.*(..))" />   
  47. </aop:config>   
  48.   
  49.   
  50. lt;/beans>
Ibatis3手册 Ibatis3参考手册 Ibatis3,手册,Ibatis3手册,Ibatis3使用手册,Ibatis3参考手册 立即下载

相关推荐

ibatis3 jar

ibatis3 最新jar包 ibatis3 jar spring hibernate ibatis 3

Mybatis源码简易导读

mybatis官方demo代码如下 import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.sess...

cheshou2634的博客 206

ibatis3开发指南

ibatis3开发指南ibatis3开发指南ibatis3开发指南ibatis3开发指南ibatis3开发指南ibatis3开发指南ibatis3开发指南ibatis3开发指南ibatis3开发指南ibatis3开发指南ibatis3开发指南

Ibatis3入门学习

简单的ibatis3入门实例-- 快速实现

djy1135的专栏 1534

spring3 ibatis整合实例

资源是spring3结合ibatis 的项目,内有项目详解文档。是新手学习绝世宝典哦。不可错过~

ibatis3批量插入

通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置文件。

iBatis3架构分析

关于执行器包executor与其子包下的所有文件,是整个框架非常核心的部分,在代码重构之后,结构要比以前好很多整个框架在jdbc的执行上除去那些辅助代码:如配置文件解析(从配置文件构建已映射语句及其它一些属性);缓存系统;反射工具;数据源等,最终那些与jdbc执行相关的代码并不是太多,也不是很复杂,至少重构之后我认为较之以前要好理解多了.整个框架从上层到下层我认为主要可以分为以下几个层次:A.se...

iteye_956的博客 180

ibatis 与spring3整合

NULL 博文链接:https://wcp88888888.iteye.com/blog/1328481

ibatis3

[size=medium]MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除 了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 每一个MyBatis的应用程序都以一个Sq...

编程日常记录与总结 https://franciswmf.iteye.com 190

Llama模型结构拆解:为什么MLP模块要这样设计?从参数配置到计算流程全解析

本文深入解析了Llama模型MLP模块的设计精髓。通过拆解其三线性层结构、门控机制与SwiGLU激活函数,揭示了并行计算如何提升效率,并详细阐述了intermediate_size参数配置背后的经验权衡与计算考量,帮助读者透彻理解这一核心组件的设计逻辑与工程实现。

mac99的博客 528

力扣(Leetcode)第1题:两数之和(C语言版本)

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], target = 6

qq_39855356的博客 3294

ibatis3整合spring

转载自:http://www.javaeye.com/topic/528374    因为ibatis3现在还是测试版,spring也没有出相应的整合。所以,我根据spring整合hibernate的原理,也出来show一下,高手就不要笑我了。开工 主要是的文件有:    Ibatis3SessionFactory.java      这个是由spring读取ibatis配置文件,并产生ses

qqzhuyuehe的专栏 2635

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

ibatis-Spring 整合

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受吧。呵呵,废话就不多说了。 在此先引用几句别人的资料。。。 Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置

itmyhome的专栏 1万+

告别手动烧录!给STM32H750外挂Flash制作Keil专用下载算法(保姆级避坑指南)

本文详细介绍了为STM32H750外挂Flash开发Keil专用下载算法的全过程,从原理到实战操作,特别针对QSPI Flash的配置和优化提供了保姆级避坑指南。通过定制下载算法,开发者可以告别手动烧录,实现一键下载到外部Flash,大幅提升开发效率。

weixin_42567497的博客 250

图形化界面无限转圈?CentOS 7的SELinux避坑指南(附命令行修复实录)

本文详细解析了CentOS 7图形界面启动时无限转圈或卡在'starting switch root'的故障原因,主要与SELinux安全策略冲突有关。提供了三种修复方案:临时禁用SELinux、重装策略包和精细调整策略,并分享了长期维护建议,帮助用户平衡系统安全性与可用性。

potato的博客 797

从ibatis过度到mybatis,spring整合i/mybatis配置文件的差别

哈哈

flysun的博客 3446

电磁兼容标准体系解析:从基础到认证的完整指南

本文系统解析了电磁兼容(EMC)标准体系,从基础概念到认证流程提供完整指南。文章阐述了EMC对于产品可靠性与市场准入的重要性,详细拆解了基础标准、通用标准、产品类标准及认证流程四层结构,并结合5G设备与工业控制等实战案例,为工程师提供了从设计初期到认证测试的高效应用策略。

weixin_29294975的博客 355

Spring整合Ibatis之SqlMapClientDaoSupport

前言 HibernateDaoSupport  SqlMapClientDaoSupport 。 其实就作用而言两者是一样的,都是为提供DAO支持,为访问数据库提供支持。    只不过HibernateDaoSupport是Spring对Hibernate的支持,而SqlMapClientDaoSupport是Spring对ibatis的支持。Hibernate是一个全自动化的ORM框架,而I

5810

Unity物理驱动3D汽车实现:从刚体控制到参数调优

在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案

weixin_34380948的博客 500

华为OD新系统机试真题 - 端口流量统计

华为OD机试新系统真题【端口流量统计】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月26号机试真题【端口流量统计】。

qq_45776114的博客 761

Mybatis Ibatis Spring整合方式

mybatis ibatis sprin mybatis是ibatis的升级版,spring也有自带mybatis的orm。所以,搭建ibatis的框架也会有多种方式(我这里mybatis是3.0的,ibatis是2.3的,spring是3.0的,数据库是mysql)。下面介绍3中方式 1,只是用mybatis3。 2,使用mybatis3+spring3(使用mybatis的SqlSess

zhujiaxing666666的专栏 1386

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ibatis+Spring 整合

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受吧。呵呵,废话就不多说了。 在此先引用几句别人的资料。。。 Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以

andyLiuJava的专栏 592

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

spring ibatis整合

Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建。 与hibernate类似,Spring提供了SqlMapClientDaoSupport对象,我们的DAO可以继承这个类,通过它所提供的SqlMapClientTemplate对象来操纵数据库。看...

134

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: java中的for each循环
下一篇: String 对象内存分析
J2EE_dev
博客等级 码龄18年 237粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值