1. 程式人生 > >Mybatis基本sql語法

Mybatis基本sql語法

引數(Parameters)

前面的所有語句中你所見到的都是簡單引數的例子,實際上引數是 MyBatis 非常強大的元素,對於簡單的做法,大概 90% 的情況引數都很少,比如:

<selectid="selectUsers"resultType="User">
  select id, username, password
  from users
  where id = #{id}
</select>

上面的這個示例說明了一個非常簡單的命名引數對映。引數型別被設定為 int,這樣這個引數就可以被設定成任何內容。原生的型別或簡單資料型別(比如整型和字串)因為沒有相關屬性,它會完全用引數值來替代。然而,如果傳入一個複雜的物件,行為就會有一點不同了。比如:

<insertid="insertUser"parameterType="User">
  insert into users (id, username, password)
  values (#{id}, #{username}, #{password})
</insert>

如果 User 型別的引數物件傳遞到了語句中,id、username 和 password 屬性將會被查詢,然後將它們的值傳入預處理語句的引數中。

這點相對於向語句中傳參是比較好的,而且又簡單,不過引數對映的功能遠不止於此。

首先,像 MyBatis 的其他部分一樣,引數也可以指定一個特殊的資料型別。

#{property,javaType=int,jdbcType=NUMERIC}

像 MyBatis 的剩餘部分一樣,javaType 通常可以由引數物件確定,除非該物件是一個 HashMap。這時所使用的 TypeHandler 應該明確指明 javaType。

NOTE 如果一個列允許 null 值,並且會傳遞值 null 的引數,就必須要指定 JDBC Type。閱讀 PreparedStatement.setNull()

的 JavaDocs 文件來獲取更多資訊。

為了以後定製型別處理方式,你也可以指定一個特殊的型別處理器類(或別名),比如:

#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}

儘管看起來配置變得越來越繁瑣,但實際上,很少需要去設定它們。

對於數值型別,還有一個小數保留位數的設定,來確定小數點後保留的位數。

#{height,javaType=double,jdbcType=NUMERIC,numericScale=2}

最後,mode 屬性允許你指定 IN,OUT 或 INOUT 引數。如果引數為 OUT 或 INOUT,引數物件屬性的真實值將會被改變,就像你在獲取輸出引數時所期望的那樣。如果 mode 為 OUT(或 INOUT),而且 jdbcType 為 CURSOR(也就是 Oracle 的 REFCURSOR),你必須指定一個 resultMap 來對映結果集 ResultMap 到引數型別。要注意這裡的 javaType 屬性是可選的,如果留空並且 jdbcType 是 CURSOR,它會被自動地被設為 ResultMap

#{department, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=departmentResultMap}

MyBatis 也支援很多高階的資料型別,比如結構體,但是當註冊 out 引數時你必須告訴它語句型別名稱。比如(再次提示,在實際中要像這樣不能換行):

#{middleInitial, mode=OUT, jdbcType=STRUCT, jdbcTypeName=MY_TYPE, resultMap=departmentResultMap}

儘管所有這些選項很強大,但大多時候你只須簡單地指定屬性名,其他的事情 MyBatis 會自己去推斷,頂多要為可能為空的列指定 jdbcType

#{firstName}#{middleInitial,jdbcType=VARCHAR}#{lastName}

字串替換

預設情況下,使用 #{} 格式的語法會導致 MyBatis 建立 PreparedStatement 引數並安全地設定引數(就像使用 ? 一樣)。這樣做更安全,更迅速,通常也是首選做法,不過有時你就是想直接在 SQL 語句中插入一個不轉義的字串。比如,像 ORDER BY,你可以這樣來使用:

ORDER BY ${columnName}

這裡 MyBatis 不會修改或轉義字串。

NOTE 用這種方式接受使用者的輸入,並將其用於語句中的引數是不安全的,會導致潛在的 SQL 注入攻擊,因此要麼不允許使用者輸入這些欄位,要麼自行轉義並檢驗。

相關推薦

Mybatis基本sql語法

引數(Parameters) 前面的所有語句中你所見到的都是簡單引數的例子,實際上引數是 MyBatis 非常強大的元素,對於簡單的做法,大概 90% 的情況引數都很少,比如: <selectid="selectUsers"resultType="User"&

基本sql語法

value 檢查 其他 drop desc font 部分 tin bsp SQL 語句主要可以劃分為以下 3 個類別。? DDL(Data Definition Languages)語句:數據定義語言,這些語句定義了不同的數據段、數據庫、表、列、索引等數據庫對象的定義。常

SQL-基本學習I-基本SQL語法與概念

目錄 1檢索 1.1基本檢索 1.1.1檢索單個列 1.1.2檢索多個列 1.1.3檢索所有列 1.1.4檢索不同的值 1.1.5限制結果

Mybatis動態sql語句(OGNL語法)

type 語法 key ognl select 動態 font tab class 下面是Mybatis動態sql語句(即OGNL語法)的簡單案例 1.創建表 create table test(id int primary key auto_increment,n

Oracle速查語法基本SQL語言

資料控制語言 1.授權 GRANT <許可權列表> to <user_name>; 2.收回許可權 REVOKE <許可權列表> fr

mybatis中的基本sql書寫

查詢語句 <!--返回Map--> <resultMap id="BaseResultMap" type="com.rongdu.cashloa

淘寶數據庫OceanBase SQL編譯器部分 源代碼閱讀--解析SQL語法

git itemtype 工具 銷毀 cin bsp 年輕 you any OceanBase是阿裏巴巴集團自主研發的可擴展的關系型數據庫,實現了跨行跨表的事務,支持數千億條記錄、數百TB數據上的SQL操作。在阿裏巴巴集團下,OceanBase數據庫支持了多個重

SQL 語法之“增”、“刪”、“改”、“查”

group by num having div 沒有 popu 模糊查詢 上海 條件 /* 四、查 1.普通查詢 語法:select <列名> from <表名> [where <查詢條件表達試>] [order by &

008-Hadoop Hive sql語法詳解3-DML 操作:元數據存儲

pan 查詢 寫入 所有 not insert語句 int 寫入文件 文件系統 一、概述 hive不支持用insert語句一條一條的進行插入操作,也不支持update操作。數據是以load的方式加載到建立好的表中。數據一旦導入就不可以修改。 DML包括:INSERT插入

MyBatis動態SQL————MyBatis動態SQL標簽的用法

efi 數組 cnblogs 朋友 正常 scm jdbc pojo 動態語言 1.MyBatis動態SQL MyBatis 的強大特性之一便是它的動態 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句有多

基於mysql的一些sql語法

文本搜索 print use 客戶 .com fault lac images 磁盤 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p.p2 {

CSDN-markdown基本語法說明

tty 來看 人性化 一個 隱式 [] 常常 clu block 文件夾 概述 簡介Markdown CSDN Markdown的功能支持 標題 Setext形式 atx形式 區塊引用 分隔線 強調 列表 無序列表 有序列表 註意事項 鏈接

基本SQL,SELECT語句

alt rom 分行 sql 技術分享 .cn src blog 也不能 SQL 語言大小寫不敏感。 SQL 可以寫在一行或者多行 關鍵字不能被縮寫也不能分行 各子句一般要分行寫。 使用縮進提高語句的可讀性。 select語句 例如表:SCOTT.EMP select *

sql語法

sqlSQL 約束 (Constraints)SQL 約束約束用於限制加入表的數據的類型。可以在創建表時規定約束(通過 CREATE TABLE 語句),或者在表創建之後也可以(通過 ALTER TABLE 語句)。我們將主要探討以下幾種約束:NOT NULLUNIQUEPRIMARY KEYFOREIGN

Swift基礎1.1——基本語法—變量和常量

設置 沒有 bsp 日子 類型 amp rgb 隱式轉換 而且 前些日子。第一屆Swift開發人員大會開了之後。身邊非常多搞OC的朋友就按捺不住了。都認為是時候學一下Swift了,畢竟Swift已是趨勢。也是應他們再三要求,讓我整理一下Swift的學習心得。今天就從

mybatis 針對SQL Server 的 主鍵id生成策略

pwd create 映射 mapper lec ted div 策略 wrong SQL Server中命令: select newId() ,可以得到SQL server數據庫原生的UUID值,因此我們可以將這條指令寫到 Mybatis的主鍵生成策略配置sele

Swift入門(一)——基本語法

應該 不支持 .text pre each abc add 語法 高精度 近期開始學習swift。把學習的過程和總結整理成一個系列。方便日後回想總結。 基本的語法 基礎語法 swift中每一行結束後不須要加分號。多個語句在同一行內須要用分好

Java千百問_03基本語法(005)_二進制是如何做位運算的

無符號 img 進制 amp 取整 查找 進行 href 有符號 點擊進入_很多其它_Java千百問二進制是如何做位運算的程序中的全部數在計算機內存中都是以二進制的形式儲存的。位運算說白了,就是直接對整數在內存中的二進制位進行操作。其它運算符看這裏:java種的運算符都

4.mybatis動態SQL拼接/取值/OGNL

align log 值方法 enter png 動態 mybatis框架 -a ognl 4.mybatis動態SQL拼接/取值 一、mybatis框架的SQL拼接是采用OGNL表達式進行的,以下我會列出常用的取值方法。 圖片來源:慕課網 1.1常用的取值方法: 1.2特

MyBatis-動態SQL

convert 指定 app 數組 bject end sep name over 動態SQL是MyBatis的一個強大的特性。MyBatis 使用了基於強大的 OGNL(Object-Graph Navigation Language 的縮寫,它是一種功能強大的表達式語言