1. 程式人生 > >Mybatis步步進階(二)——SQL的基本配置與執行

Mybatis步步進階(二)——SQL的基本配置與執行

  Mybatis使用過程中,相對於hibernate更為靈活、簡潔之處就在於它利用mybatis封裝的標籤配置sql語句,在程式碼中載入配置檔案執行sql。咱採取“先做,再總結”方針,方便大家理解。諸位客官請往下看。

 現對一個Message實體類進行操作:

1、建立實體類

/**
 * @author Max1209
 * 實體類
 *
public class Message {
	private int id;
	private String command;
	private String description;
	private String content;

	//此處省略getter setter 方法
}

2、建立配置檔案,通過xml檔案對該實體進行查詢、刪除、批量刪除的相關配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Message">
	 <!-- TYPE message類路徑 -->
  <resultMap type="cn.max.domain.Message" id="MsgResult">
    <id column="Id" jdbcType="INTEGER" property="id"/>
    <result column="command" jdbcType="VARCHAR" property="command"/>
    <result column="content" jdbcType="VARCHAR" property="content"/>
    <result column="description" jdbcType="VARCHAR" property="description"/>
  </resultMap>

  <select id="queryMsgList" parameterType="cn.max.domain.Message"
	resultMap="MsgResult">
	select Id,command,content,description from message where 1=1
	<if test="command !=null and !"".equals(command.trim())"> 
		and command=#{command}
	</if>
		<!--等同於 command!=null && !"".equals(command.trim()) -->
	<if test="description !=null and !"".equals(command.trim())">
		and description  like '%' #{description} '%'
 	</if>	
</select>

	<delete id="deleteOne" parameterType="int">
		delete from message where Id='{_parameter}'
	</delete>
	
	<delete id="deleteBatch" parameterType="java.util.List">
		delete from massage where Id in(
		<foreach collection="list" item="item" separator=",">
			#{item}
		</foreach>
		)
	</delete>
</mapper>
配置檔案詳解:


3、在配置檔案【Configuration.xml】中新增Message實體配置檔案【同hibernate原理】

 <mappers>
    <mapper resource="config1/Message.xml"/>
  </mappers>

4、程式中讀取配置,以傳參的方式【namespace.標籤id】載入配置檔案執行資料操作 
/**通過mybatis建立資料庫連線
	 * @param command
	 * @param description
	 * @return List<Message>
	 */
public class MessageDao {
	
	DBAccess dbAccess=new DBAccess();
	SqlSession sqlSession=null;
	
	public List<Message> queryMsgList(String command,String description)
	{
		List<Message> msgList=new ArrayList<Message>();
		try{
			Message msg=new Message();
			msg.setCommand(command);
			msg.setDescription(description);
	
			//讀取配置,建立sqlSession物件
			sqlSession=dbAccess.getSqlSesion();	
			//通過sqlsession執行sql語句-----配置檔案已包含
			//namespace.select 標籤的id
			msgList=sqlSession.selectList("Message.queryMsgList",msg);
			
		}catch(IOException e)
		{
			e.printStackTrace();
		}finally
		{
			if(sqlSession!=null)
			{
				sqlSession.close();
			}
		}
		return msgList;
	}

	
	/*
	 * 單條刪除
	 */
	public void deleteOne(int id)
	{
		try{
			//獲得資料庫和對應實體表
			sqlSession=dbAccess.getSqlSesion();
			//執行sql語句   引數  (配置檔案namespace.標籤id ,傳參)
			sqlSession.delete("Message.deleteOne",id);
			sqlSession.commit();
		}catch (Exception e) {
			e.printStackTrace();
		}finally
		{
			sqlSession.close();
		}
		
	}
	
	public void deleteBatch(List<Integer> ids)
	{
		try{
			//獲取sqlsession物件			
			//執行sql語句
			sqlSession=dbAccess.getSqlSesion();
			
			sqlSession.delete("Message.deleteBatch", ids);
			sqlSession.commit();
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			sqlSession.close();
		}
	}

 所有MyBatis執行增刪改查,都不再是通過在程式中嵌入sql,或是類似於hibernate封裝一套hql面向物件進行查詢,而是整體通過mybatis標籤,將對實體進行所有的資料sql都配置到select\delete\insert標籤中,並通過方法讀取配置檔案,載入標籤id便可執行查詢。這種基於XML對映配置檔案配置來實現更利於管理優化。而且程式通過獲取sqlSession物件的crud方法,傳入配置檔案的【名稱空間+查詢標籤ID】引數進行呼叫,非常方便,十分靈活。

 同時這也要求學習者對OGNL表示式和EL使用熟練,才能使用mybatis標籤靈活配置滿足複雜需求的sql拼接。

相關推薦

Mybatis步步——SQL基本配置執行

  Mybatis使用過程中,相對於hibernate更為靈活、簡潔之處就在於它利用mybatis封裝的標籤配置sql語句,在程式碼中載入配置檔案執行sql。咱採取“先做,再總結”方針,方便大家理解。

mysql之細談索引、分頁慢日誌

連表 組合索引 rar 偏移量 最小值 num glob 要求 for 索引 1、數據庫索引   數據庫索引是一種數據結構,可以以額外的寫入和存儲空間為代價來提高數據庫表上的數據檢索操作的速度,以維護索引數據結構。索引用於快速定位數據,而無需在每次訪問數據庫表時搜索數據

python學習之函數學習

python學習之函數進階二一、內置函數 zip函數: zip()是Python的一個內建函數,它接受一系列可叠代的對象作為參數,將對象中對應的 元素按順序組合成一個tuple,每個tuple中包含的是原有序列中對應序號位置的元素,然後返回由 這些tuples組成的list。若傳入參數的長度不等,則返回li

蘋果新的編程語言 Swift 語言--基本數據類型

保持 popu 多條語句 常量 num access 對象 程序 進制 一 、 常量和變量 Swift語言 對常量和變量的聲明進行了明白的區分 Swift語言的常量類型比C 語言的co

自己定義ViewGroup控件-----&gt;流式布局

avi ride sch get spec tracking htm out fst main.xml <?xml version="1.0" encoding="utf-8"?> <com.exa

shell腳本

rom 參數 特殊變量 ech erro cas 菜單 actor -o select 循環與菜單 select variable in list do 循環體命令 done select 循環主要用於創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,

TensorFlow

trunc pos ike 2.4 concat 填充 輸出 產生 seed 張量操作 在tensorflow中,有很多操作張量的函數,有生成張量、創建隨機張量、張量類型與形狀變換和張量的切片與運算 生成張量 固定值張量 tf.zeros(shape, dtype=tf.

Python基礎【day03】:字典

本節內容 深淺拷貝 迴圈方式 字典常用方法總結 一、深淺拷貝 列表、元組、字典(以及其他) 對於列表、元組和字典而言,進行賦值(=)、淺拷貝(copy)、深拷貝(deepcopy)而言,其記憶體地址是變化不通的。 賦值(=) 賦值只是建立一個變數,該變數指向原來的記憶體地址

Redis高階

一、訊息通知 在一些網站上,經常會有一些釋出/訂閱或者郵件訂閱的功能,尤其一些部落格上。其實這種問題很常見,當頁面需要進行如傳送郵件、複雜的計算時會阻塞頁面的渲染。為了避免使用者等待太久,應該使用其他程序單獨完成此類操作,這裡郵件訂閱可以用任務佇列來實現,具體來說,當需要傳送郵件時,將其存入佇列中,另外一個

JavaScriptwindow物件

前言        本章學習JS的window物件的相關知識 方法        特別的,window物件不用new,直接進行使用即可,類似Math的使用方式,window關鍵字可以省略不寫。 一、框

Android: 應用程序啟動過程

1.前言 最近一直在看 《Android進階解密》 的一本書,這本書編寫邏輯、流程都非常好,而且很容易看懂,非常推薦大家去看看(沒有收廣告費,單純覺得作者寫的很好)。 今天就將 應用程序啟動過程 總結一下(基於Android 8.0 系統)。 文章中例項&nbs

牛客演算法

二叉樹套路系列(樹型dp) 指在樹上的動態規劃;思路是:考慮左邊的答案、考慮右邊的答案、考慮整體的答案 最大搜索二叉樹 給定一棵二叉樹的頭節點head,請返回最大搜索二叉子樹的大小 思路: 以節點node為頭的樹中,最大的搜尋二叉子樹只可能來自一下兩種情況。 1.如果來自

flowable工作流

Flowable spring boot 進階(二) 資料庫表介紹 Flowable的資料庫名稱都以ACT_開頭。第二部分是表的用例的雙字元標識。此用例也將大致匹配服務API。 ACT_RE_ *:RE代表repository。具有此字首的表包含靜態資訊,例如流程定義和流程

PyQt5——多執行緒:QTimer

應用程式開發中多執行緒的必要性: 一般情況下,應用程式都是單執行緒執行的,但是對GUI程式來說,單執行緒有時候滿足不了要求,但是對於一些特殊情況:比如一個耗時較長的操作,執行過程會有卡頓讓使用者以為程式出錯而把程式關閉或是系統本身認為程式執行出錯而自動關閉程式。這個時候就

PyQt5——多執行緒:QThread & 事件處理

接上篇… 2. QThread 要使用QThread開始一個執行緒,可以建立它的一個子類,然後覆蓋其QThread.run()函式 class Thread(QThread): def __init__(self): super().__init__()

SpringCloud從入門到——註冊中心Eureka

spring: profiles: peer1 application: name: application-eurekaserver server: port: 7001 eureka: instance: hostname: eureka7001.com instance

http協議URL資源

一、URL的語法  URL是網際網路資源的標準化名稱 URL提供了一種定位網際網路上任意資源的手段,但這些資源要通過不同方案(協議:比如http、ftp、smtp)來訪問,因此URL語法會略有差異 大部分URL都遵循通用的語法,而且不同URL方案風格和語法都有重疊 大多數URL

Hive

上次課複習: 1. hive的view非常簡單,只是元資料層面,所以hdfs下根本找不到的。 view主要用於複雜邏輯的隱藏 2. 側檢視 行轉列專置 3. select 用於查詢後面可以跟where  limit等條件 多用Common Table Expr

蘋果新的程式語言 Swift 語言--基本資料型別

一  、   常量和變數                    Swift語言 對常量和變數的宣告進行了明確的區分          Swift語言的常量型別比C 語言的constants型別更加強大,語義更加明確。          常量和變數的區別是常量在設定或初

java程式設計師菜鳥oracle基礎詳解oracle查詢語句和資料排序

本文所以練習都是基於oracle自帶提供的一個數據庫進行的。資料庫中包含員工表emp。部門資訊表dept。員工工資工總表下面是三個表的表結構:一:基本查詢語句1.最簡單的查詢所有列語句Select * from emp;2.查詢指定列表的查詢語句Select empno ,e