1. 程式人生 > 實用技巧 >Spring Boot多資料來源的配置

Spring Boot多資料來源的配置

1.歷史

Apache        Google           GitHub  
IBatis        Mybatis          Mybatis 

2.Mybatis的作用

1 它支援普通的SQL 操作  以及 儲存過程的呼叫 
2 它是一個高階的ORM框架 (以面向物件的思想操作資料庫)
3 它封裝了幾乎的jdbc操作  以及引數的手工設定 
4 自動檢索結果集(自動把結果集轉換成物件 甚至關聯的物件)  

3.MyBatis 框架的構成

1 實體bean     封裝資料資訊 
2 SQL 定義檔案        封裝SQL語句的XML
3 主配置檔案   定義連線資料庫的資訊的 載入sql定義檔案 等
4 框架的API    涉及到SqlSession物件的建立  還有SqlSession 對應的API 主要完成增刪改查

4.以根據id 查詢銀行賬戶為例 編寫Mybatis程式

1 建立一個專案  匯入jar包(mybatis.jar ojdbc6.jar) 
2 根據表 建立對應的實體類  
3 編寫SQL 定義檔案  (拷貝sql定義的模板到一個包中)

<mapper namespace="com.xdl.dao.DeptMapper">
	<!-- 定義SQL語句 -->	
    <select id="findById" parameterType="int" 
      resultType="com.xdl.entity.Bank">
         select * from bank where bid = #{bid}
    </select>
</mapper>

4 拷貝主配置檔案模板到src下  修改對應的資訊 
5 使用Mybatis的API  獲取SqlSession 物件  使用這個物件完成對應的sql操作

工具類
public class SqlSessionUtil {
	private static SqlSessionFactory ssf;
	
	static {
		SqlSessionFactoryBuilder  ssfb = new SqlSessionFactoryBuilder();
		// 得到一個SqlSessionFactory 型別的物件 
		InputStream  inputStream = Bank.class.getClassLoader().getResourceAsStream("sqlmap-config.xml");
		ssf = ssfb.build(inputStream);
		
	}
	
	public static SqlSession getSqlSession(){
		try {
			return ssf.openSession();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
		
	}

}

5.Mapper 對映器 ---- 根據規則設計DAO介面 可以自動產生實現類

1 DAO 介面的方法名  必須和  SQL 定義檔案中 SQL語句的id保持一致 
2 介面方法的返回值型別  一般和resultType 保持一致 
	查詢語句如果返回單值   那使用 resultType 
	查詢語句如果可能返回多個值  則使用List<resultType對應的型別>
	對DML(insert delete update) 可以是返回void  也可以返回int  推薦返回int
3  介面方法的引數型別  和  parameterType 保持一致 
	如果沒有    parameterType  則引數可以任意 
4 SQL 定義檔案中的namespace 必須是 包名.介面名      

Mybatis 多個引數的處理

1 通過Map  或者 物件型別 包裝多個引數 
2 通過在sql 語句中 使用 index 對引數進行編號  編號從 0開始 
3 也可以使用 param1  等對引數進行編號 編號從 param1 開始  
4 @Param("引數名") 設定在介面方法的引數上

分頁的實現

1 rownum
 按照acc_money 排序 一頁顯示 X 條  顯示 第 n 頁資料 
pageSize:每頁顯示條數 pageNumber:當前頁

<select id="findBankListBypageInfo" resultType="com.xdl.entity.Bank">
	 select * from 
      (select rownum r,t.*  from    
        (select  * from bank  order by money) t  
        where  rownum &lt; #{pageSize}*#{pageNumber} + 1 
    ) where r > ((#{pageNumber}-1)*#{pageSize})  
</select>

使用分頁外掛 ---- 根據某個欄位排序 查詢表中的所有資料

a.拷貝分頁外掛的jar包(pageHelper.jar  jsqlparser.jar) 到lib  
b.在主配置檔案中配置 分頁外掛的攔截器 
c.使用分頁外掛的api 完成分頁查詢    

select * from ( 
   select tmp_page.*, rownum row_id from ( 
    select * from xdl_bank_account_30 order by acc_money ) 
    tmp_page where rownum <= ? ) where row_id > ? 

當資料庫中的欄位 表 實體類中屬性不對應時如何解決?

1 使用欄位的別名 

2 使用resultMap   讓資料庫欄位和實體類中的屬性對應  

Spring 和 Mybatis 整合

1 SqlSessionFactoryBean  
    產生的是 SqlSessionFactory 型別的物件  最終能提供 SqlSession
   這個型別 依賴於  dataSource  和  Sql 定義檔案 
2 MapperFactoryBean 
   產生的是Mapper 的實現類
   這個型別  依賴於   SqlSessionFactory   和  Mapper介面 

整合步驟

  5.1建立一個專案  匯入jar包(mybatis.jar mybatis-spring.jar
   ojdbc14.jar ioc aop dao  資料庫連線池  ) 拷貝Spring配置檔案到src 
  5.2 編寫實體類  
  5.3 編寫SQL 定義檔案   
                   根據id 查詢銀行賬戶 
  5.4 根據Mapper對映器規則 編寫DAO 介面
  5.5 在Spring 配置檔案中  配置    SqlSessionFactoryBean  
    依賴於dataSource  和 SQL 定義
  5.6 在Spring 配置檔案中  配置   MapperFactoryBean  就可以產生DAO 的實現類    

批量產生Mapper實現類的元件

 <bean  id="mapperScanner"  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     <property name="basePackage"  value="com.xdl.mapper"></property> 
 </bean>

通過自定義標註 控制介面產生實現類

第二種整合方案

SqlSessionTemplate     
1建立一個專案  匯入jar包(mybatis.jar mybatis-spring.jar
   ojdbc14.jar ioc aop dao  資料庫連線池  ) 拷貝Spring配置檔案到src 
2 編寫實體類  
3 編寫SQL 定義檔案   
                   根據id 查詢銀行賬戶 
4 根據Mapper對映器規則 編寫DAO 介面
5 在Spring 配置檔案中  配置    SqlSessionFactoryBean  
    依賴於dataSource  和 SQL 定義 
6 編寫DAO 的實現類 實現DAO 介面   並注入 SqlSessionTemplate 型別的物件 
      這個物件依賴於  sqlSessionFactory。利用SqlSessionTemplate 對應的API 完成操作。
注意建立DAO 實現類元件 需要元件掃描