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抽象接口中寫通用操做方法,具體實現類繼承便可;

相關文章
相關標籤/搜索