Ibatis独立使用配置实例

本文记录Ibatis使用配置过程,不与spring结合的场景,快速实现与数据库的链接访问。java

准备工做:node

  1. MySql数据库mysql

  2. Maven依赖            
                     <dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>5.1.23</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.ibatis</groupId>
    			<artifactId>ibatis-core</artifactId>
    			<version>3.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.ibatis</groupId>
    			<artifactId>ibatis-sqlmap</artifactId>
    			<version>2.3.4.726</version>
    		</dependency>

实例:spring

  1. 全局配置文件IbatisSqlMapConfig.xmlsql

<?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>
	
	<!-- 引用JDBC属性的配置文件 -->
	<properties resource ="jdbc.properties" />
	
	  <!--是否启用缓存机制-->  
	  <!-- 是否启用延迟加载机制 -->  
	  <!-- 是否启用字节码加强机制 -->  
	  <!-- 是否启用错误处理机制 -->
	  <!-- 最大并发请求数 -->  
	  <!-- 最大Session数 -->  
	  <!-- 最大并发事务数 -->
	  <!-- 是否启用名称空间 -->
	<settings  cacheModelsEnabled ="true"
               lazyLoadingEnabled="true" 
               enhancementEnabled="true"
 			   errorTracingEnabled="true"  
			   maxRequests="32" 
			   maxSessions="10" 
			   maxTransactions="5" 
			   useStatementNamespaces="true"/>
	
	<!-- 使用JDBC的事务管理 -->
	<transactionManager type = "JDBC"> <!-- 定义了ibatis的事务管理器有3中(JDBC,JTA,EXTERNAL) -->
		<!-- 数据源 -->
		<dataSource type = "SIMPLE"> <!-- type属性指定了数据源的连接类型,也有3种类型(SIMPLE,DBCP,JNDI) -->
			<property name = "JDBC.Driver" value="${driver}" />
			<property name = "JDBC.ConnectionURL" value="${url}" />
			<property name = "JDBC.Username" value="${username}" />
			<property name = "JDBC.Password" value="${password}" />
  	        <property  name ="Pool.MaximumActiveConnections"  value ="10"/>   <!-- 链接池维持的最大容量 -->  
            <property  name ="Pool.MaximumIdleConnections"  value ="5"/>      <!-- 链接池容许挂起的最大链接 -->  
            <property  name ="Pool.MaximumCheckoutTime"  value ="120000"/>    <!-- 链接被某个任务所容许占用的最大时间 -->  
            <property  name ="TimeToWait"  value ="500" />                    <!-- 线程容许等待的最大时间 -->  
		</dataSource>
	</transactionManager>
	
	<!-- 这里能够写多个实体的映射文件 -->
	<sqlMap resource = "sqlmap/ProcessNodeDao.xml" />
	
</sqlMapConfig>

2.Dao配置文件:数据库

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap 
 PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"  
 "http://www.ibatis.com/dtd/sql-map-2.dtd">  
<sqlMap namespace="com.jd.jcc.process.dao.ProcessNodeDao">  
 <select id="queryNodesByProId" parameterClass="com.jd.jcc.process.nodedefine.BaseProNode" 
 	resultClass="com.jd.jcc.process.nodedefine.BaseProNode">  
    select n.id as nodeId,n.node_alias as nodeName
          ,n.node_key as nodeKey,n.parent_key as parentKey
          ,n.process_id as processId,n.node_status as nodeStatus
          ,d.node_type as nodeType 
   from p_process_node n,p_node_declare d
   where n.process_id=#processId# and d.id = n.ref_node_declare_id
</select>
</sqlMap>

3.Dao接口定义:apache

public interface ProcessNodeDao {

	/** 
	 * @Description: TODO(这里用一句话描述这个方法的做用) 
	 * @Date 2016年4月1日 上午9:58:59
	 * @param processId
	 * @return        
	 * @throws 
	 */
	List<BaseProNode> queryNodesByProId(String processId);
}
public abstract class AbstractBaseDao {
	
	private static SqlMapClient sqlMapClient;
	
	static {
		try {
			Reader reader = Resources.getResourceAsReader("IbatisSqlMapConfig.xml");//加载配置文件,使用全局静态变量共享便可
			sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public abstract String getNameSpace();
	
	/**
	 * @return the sqlMapClient
	 */
	public static SqlMapClient getSqlMapClient() {
		return sqlMapClient;
	}
}
public class ProcessNodeDaoImpl extends AbstractBaseDao implements	ProcessNodeDao {
	
	private Logger log = LoggerFactory.getLogger(getClass());
	
	public List<BaseProNode> queryNodesByProId(String processId){
		BaseProNode pm = new BaseProNode();
		pm.setProcessId(processId);
		try {
		        // getSqlMapClient().startTransaction(); //如须要,可手动开启事务    
			List<BaseProNode> queryForList = getSqlMapClient().queryForList(getNameSpace()+"queryNodesByProId", pm);
			// getSqlMapClient().commitTransaction();//提交事务
			return queryForList;
		} catch (SQLException e) {
			log.error("数据库查询失败",e);
		}
		return null;
	}
}

4.项目结构:
缓存

写在最后:并发

1.通常使用Dao接口全类路径做为配置文件的namespaces值ui

2.通常在业务层手动控制事务;

3.通常Dao抽象接口中写通用操做方法,具体实现类继承便可;

相关文章
相关标签/搜索