日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Mybatis中Mapper標簽總結大全

瀏覽:230日期:2023-10-23 19:59:58
一、標簽分類

定義SQL語句

insert delete update select

配置關聯關系

collection association

配置java對象屬性與查詢結果集中列名的對應關系

resultMap

控制動態SQL拼接

foreach if choose

格式化輸出

where set trim

定義常量

sql

其他

include二、標簽總結1. 基礎SQL標簽

1.1 查詢select

標簽屬性

id 唯一的名稱,對應dao中mapper的接口名稱 paramterType 定義傳入的參數類型 resultType 返回數據類型對應實體類 resultMap 外部 resultMap 的命名引用。結果集的映射是 MyBatis 最強大的特性,對其有一個很好的理解的話,許多復雜映射的情形都能迎刃而解。使用 resultMap 或 resultType,但不能同時使用 flushCache 將其設置為 true,任何時候只要語句被調用,都會導致本地緩存和二級緩存都會被清空,默認值:false useCache 將其設置為 true,將會導致本條語句的結果被二級緩存,默認值:對 select 元素為 true timeout 這個設置是在拋出異常之前,驅動程序等待數據庫返回請求結果的秒數。默認值為 unset(依賴驅動) fetchSize 這是嘗試影響驅動程序每次批量返回的結果行數和這個設置值相等。默認值為 unset(依賴驅動)。 statementType STATEMENT,PREPARED 或 CALLABLE 的一個。這會讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,默認值:PREPARED。 resultSetType FORWARD_ONLY,SCROLL_SENSITIVE 或 SCROLL_INSENSITIVE 中的一個,默認值為 unset (依賴驅動)。 databaseId 如果配置了 databaseIdProvider,MyBatis 會加載所有的不帶 databaseId 或匹配當前 databaseId 的語句;如果帶或者不帶的語句都有,則不帶的會被忽略。 resultOrdered 這個設置僅針對嵌套結果 select 語句適用:如果為true,就是假設包含了嵌套結果集或是分組了,這樣的話當返回一個主結果行的時候,就不會發生有對前面結果集的引用的情況。這就使得在獲取嵌套的結果集的時候不至導致內存不夠用。默認值:false。 resultSets 這個設置僅對多結果集的情況適用,它將列出語句執行后返回的結果集并每個結果集給一個名稱,名稱是逗號分隔的。

/** * 根據條件查詢用戶集合 */ List<User> selectUsers(@Param('cond')Map<String, Object> map);

<!-- 返回的是List,resultType給定的值是List里面的實體類而不是list,mybatis會自動把結果變成List --> <select parameterType='map' resultType='con.it.bean.User'> select id, username, password, sex, birthday, address from user u <where> <trim suffixOverrides=','> <if test='cond.username != null and cond.username != ’’'> u.username = #{cond.username}, </if> <if test='cond.sex != null'> and u.sex = #{cond.sex}, </if> <if test='cond.beginTime != null'> <![CDATA[ and DATE_FORMAT(u.birthday, ’%Y-%m-%d %H:%T:%s’) >= DATE_FORMAT(#{beginTime}, ’%Y-%m-%d %H:%T:%s’), ]]> </if> <if test='cond.endTime != null'> <![CDATA[ and DATE_FORMAT(u.birthday, ’%Y-%m-%d %H:%T:%s’) <= DATE_FORMAT(#{endTime}, ’%Y-%m-%d %H:%T:%s’), ]]> </if> <if test='cond.address != null and cond.address != ’’'> and u.addrerss like ’%’ || #{cond.address} || ’%’, </if> </trim> </where> </select>

1.2 增刪改

標簽屬性

id 唯一的名稱,對應dao中mapper的接口名稱 parameterType 將要傳入語句的參數的完全限定類名或別名。這個屬性是可選的,因為 MyBatis 可以通過 TypeHandler 推斷出具體傳入語句的參數,默認值為 unset。 flushCache 將其設置為 true,任何時候只要語句被調用,都會導致本地緩存和二級緩存都會被清空,默認值:true(對應插入、更新和刪除語句)。 timeout 這個設置是在拋出異常之前,驅動程序等待數據庫返回請求結果的秒數。默認值為 unset(依賴驅動)。 statementType STATEMENT,PREPARED 或 CALLABLE 的一個。這會讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,默認值:PREPARED。 useGeneratedKeys(僅對 insert 和 update 有用)這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數據庫內部生成的主鍵(比如:像 MySQL 和 SQL Server這樣的關系數據庫管理系統的自動遞增字段, oracle使用序列是不支持的,通過selectKey可以返回主鍵),默認值:false。 keyProperty (僅對 insert 和 update 有用)唯一標記一個屬性,MyBatis 會通過 getGeneratedKeys 的返回值或者通過 insert 語句的 selectKey子元素設置它的鍵值,默認:unset。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。 keyColumn(僅對 insert 和 update 有用)通過生成的鍵值設置表中的列名,這個設置僅在某些數據庫(像PostgreSQL)是必須的,當主鍵列不是表中的第一列的時候需要設置。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。 databaseId 如果配置了 databaseIdProvider,MyBatis 會加載所有的不帶 databaseId 或匹配當前 databaseId 的語句;如果帶或者不帶的語句都有,則不帶的會被忽略。

<insert parameterType='com.it.bean.User'> <!-- 使用序列插入oracle數據庫返回主鍵,MYSQL數據庫無需添加selectKey --> <selectKey resultType='long' order='BEFORE' keyProperty='id'> SELECT user_seq.NEXTVAL as id from DUAL </selectKey> insert into User (ID, USERNAME, PASSWORD, SEX, ADRESS, CREATED_BY, CREADTED_DATE) values (#{id}, #{username}, #{password}, #{sex}, #{adress}, #{createdBy}, SYSDATE) </insert>

1.3 其他基礎標簽

1.3.1 sql 標簽

定義一些常用的sql語句片段

<sql id='selectParam'> id, username, password, sex, birthday, address</sql>

1.3.2 include 標簽

引用其他的常量,通常和sql一起使用

<select> select <include refid='selectParam'></include> from user</select>

1.3.3 if 標簽

基本都是用來判斷值是否為空,注意Integer的判斷,mybatis會默認把0變成 ‘’

<if test='item != null and item != ’’'></if><!-- 如果是Integer類型的需要把and后面去掉或是加上or--><if test='item != null'></if><if test='item != null and item != ’’ or item == 0'></if>

1.3.4 別名

經常使用的類型可以定義別名,方便使用,mybatis也注冊了很多別名方便我們使用,詳情見底部附錄

<typeAliases> <typeAlias type='com.it.bean.User' alias='User'/></typeAliases>2. collection與association標簽

collection與association的屬性一樣,都是用于resultMap返回關聯映射使用,collection關聯的是集合,而association是關聯單個對象

標簽屬性

property resultMap返回實體類中字段和result標簽中的property一樣 column 數據庫的列名或者列標簽別名,是關聯查詢往下一個語句傳送值。注意: 在處理組合鍵時,您可以使用column=“{prop1=col1,prop2=col2}”這樣的語法,設置多個列名傳入到嵌套查詢語句。這就會把prop1和prop2設置到目標嵌套選擇語句的參數對象中。 javaType 一般為ArrayList或是java.util.List ofType java的實體類,對應數據庫表的列名稱,即關聯查詢select對應返回的類 select 執行一個其他映射的sql語句返回一個java實體類型

/** *問題表 */public class Question { private Long id; //問題id private String question; //問題 private Integer questionType; //問題類型 private List<QuestionAnswer> answerList; //問題選項集合 //Getter和Setter省略}/** *問題選項表 */public class QuestionAnswer { private Long id; //選項id private Long questionId; //問題id private String answer; //選項 //Getter和Setter省略}

<!-- 具體可參考下面ResultMap --><collection property='answerList' javaType='java.util.List' ofType='com.it.bean.QuestionAnswer' column='id' select='setlectQuestionAnswerByQuestionId'/>3. resultMap標簽

resultMap屬性

id 唯一標識 type 返回類型 extends 繼承別的resultMap,可選

關聯其他標簽

id 設置主鍵使用,使用此標簽配置映射關系(可能不止一個) result 一般屬性的配置映射關系,一般不止一個 association 關聯一個對象使用 collection 關聯一個集合使用

<!-- 返回關聯查詢的問題 --><resultMap type='com.it.bean.Question'> <id column='id' property='id' /> <result column='question' property='question' /> <result column='question_type' property='questionType' /> <collection property='answerList' javaType='java.util.List' ofType='com.it.bean.QuestionAnswer' column='id' select='setlectQuestionAnswerByQuestionId'/></resultMap><!-- 查詢問題集 --><select parameterType='map' resultMap='detail_result'> select q.id, q.question, q.question_type from question q <where> <if test='cond.id != null'> q.id = #{cond.id} </if> <if test='cond.idList != null and cond.idList.size() != 0'> q.id in <foreach collection='cond.idList' item='id' open='(' separator=',' close=')'> #{id} </foreach> </if> </where></select><!-- 查詢對應問題的答案集 --><select parameterType='long' resultType='com.it.bean.QuestionAnswer'> select a.id, a.answer from question_answer a where a.question_id = #{id}</select>4. foreach標簽

foreach屬性

collection 循環的集合。傳的是集合為list,數組為array, 如果是map為java.util.HashMap item 循環的key index 循環的下表順序 open 循環的開頭 close 循環結束 separator 循環的分隔符

<sql id='base_column'>id, question_id, answer</sql><!-- oracle的批量插入 --><insert parameterType='list'> insert into question_answer ( <include refid='base_column' /> ) select question_answer_seq.NEXTVAL, A.* from ( <foreach collection='list' item='item' separator='union all'> select #{item.questionId}, #{item.answer} from dual </foreach> ) A </insert><!-- Mysql的批量插入,主鍵自增 --><insert parameterType='list'> insert into question_answer ( <include refid='base_column' /> ) values <foreach collection='list' item='item' open='(' separator='union all' close=')'> #{item.id}, #{item.questionId}, #{item.answer} </foreach></insert>5. where標簽

where用來去掉多條件查詢時,開頭多余的and

<select parameterType='com.it.bean.User' resultType='com.it.bean.User'> <!-- 引用Sql片段 --> select <include refid='selectParam'> from user u <where> <!--where 可以自動去掉條件中的第一個and--> <if test='id != null'> and u.id = #{id} </if> <if test='name != null and name != ’’'> and u.name = #{name} </if> </where> </select>6. set標簽

set是mybatis提供的一個智能標記,當在update語句中使用if標簽時,如果前面的if沒有執行,則或導致逗號多余錯誤。使用set標簽可以將動態的配置SET 關鍵字,和剔除追加到條件末尾的任何不相關的逗號。沒有使用if標簽時,如果有一個參數為null,都會導致錯誤,如下示例:

<update parameterType='com.it.bean.user'> update user <set> <if test='username != null and username != ’’'> username = #{username}, </if> <if test='sex != null and sex == 0 or sex == 1'> sex = #{sex}, </if> <if test='birthday != null '> birthday = #{birthday}, </if > <if test='address != null and address != ’’'> address = #{address}, </if> <if test='lastModifiedBy != null and lastModifiedBy != ’’'> last_modified_by = #{lastModifiedBy}, last_modified_date = SYSDATE, </if> </set> <where> id = #{id} </where> </update>7. trim標簽

trim標記是一個格式化的標記,可以完成set或者是where標記的功能

標簽屬性

prefix、suffix 表示再trim標簽包裹部分的前面或后面添加內容(注意:是沒有prefixOverrides,suffixOverrides的情況下) prefixOverrides,suffixOverrides 表示覆蓋內容,如果只有這兩個屬性表示刪除內容

<update parameterType='com.it.bean.User'> update user <!-- 開頭加上set,結尾去除最后一個逗號 --> <trim prefix='set' suffixOverrides=','> <if test='username!=null and username != ’’'> name= #{username}, </if> <if test='password!=null and password != ’’'> password= #{password}, </if> </trim> <where> id = #{id} </where> </update>8. choose、when、otherwise標簽

有時候我們并不想應用所有的條件,而只是想從多個選項中選擇一個。MyBatis提供了choose 元素,按順序判斷when中的條件出否成立,如果有一個成立,則choose結束。當choose中所有when的條件都不滿則時,則執行 otherwise中的sql。類似于Java 的switch 語句,choose為switch,when為case,otherwise則為default。if是與(and)的關系,而choose是或(or)的關系

<select resultType='com.it.bean.User' parameterType='com.it.bean.User'> SELECT <include refid='resultParam'></include> FROM User u <where> <choose> <when test='username !=null and username != ’’'> u.username LIKE CONCAT(CONCAT(’%’, #{username}),’%’) </when > <when test='sex != null'> AND u.sex = #{sex} </when > <when test='birthday != null '> AND u.birthday = #{birthday} </when > <otherwise> </otherwise> </choose> </where> </select>

附Mybatis已經注冊好的別名表

別名 映射類型 _byte byte _long long _short short _int int _integer int _double double _float float _boolean boolean string String byte Byte long Long short Short int Integer integer Integer double Double float Float boolean Boolean date Date decimal BigDecimal bigdecimal BigDecimal map Map hashmap HashMap list list arraylist ArrayList collection Collection iterator Iterator

二、寫在后面

在網上看了很多標簽的解釋,但不是很全,我就自己總結了一份,搭配示例更好理解標簽的含義,如有什么遺漏或是錯誤還望多多發言補充,我會繼續完善。

注: 關于參數指定jdbcType,是因為當傳參為null時候,mybatis無法自動判斷類型,就必須要顯示指定它的類型,多用于insert中

到此這篇關于Mybatis中Mapper標簽總結大全的文章就介紹到這了,更多相關Mybatis Mapper標簽內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品九色| 97精品国产一区二区三区 | 欧美特黄一区| 日韩av在线播放网址| 国产91在线播放精品| 精品福利久久久| 精品久久福利| 色综合狠狠操| 神马久久午夜| 国产精品高清一区二区| 国产精品久久久久久久久免费高清 | 国产成人黄色| 国产精品亚洲一区二区三区在线观看| 日韩av黄色在线| 久久精品一区二区三区中文字幕| 久久精品国产福利| 欧美精品日日操| 亚洲精品网址| 日韩av资源网| 日本久久综合| 99亚洲精品| 日本久久黄色| 成人福利视频| 久久久久欧美精品| 午夜精品成人av| 中文字幕成人| 国产精品hd| 久久婷婷久久| 极品av在线| 91成人福利| 久久中文在线| 大香伊人久久精品一区二区| 男人操女人的视频在线观看欧美| 国产日韩在线观看视频| 伊人久久高清| 加勒比视频一区| 日韩综合一区| 欧美精品一线| 日韩精品欧美| 久久久久久夜| 精品亚洲二区| 久久精品欧美一区| 久久精品九色| 一区二区精品| 国产精品美女久久久浪潮软件| 精品国产一区二区三区性色av| 日韩欧美中文字幕一区二区三区| 精品一区av| 麻豆精品新av中文字幕| 国产极品一区| 国产精品蜜月aⅴ在线| 国产亚洲在线| 91tv亚洲精品香蕉国产一区| 麻豆精品蜜桃视频网站| 国产精品一区三区在线观看| 欧美午夜三级| 美女精品视频在线| 欧美一级鲁丝片| 麻豆视频在线看| 日韩一区二区三区免费视频| 人人爱人人干婷婷丁香亚洲| 亚洲在线网站| 一区免费视频| 99精品视频在线| 国语对白精品一区二区| 国产精品777777在线播放| 欧美在线精品一区| 日韩精品视频网| 日韩中出av| 91亚洲无吗| 国产欧美欧美| 麻豆精品视频在线观看| 国产精品主播在线观看| 蜜芽一区二区三区| 免费久久精品视频| 亚洲有吗中文字幕| 综合激情一区| 国产精品一区高清| 日韩欧美精品一区| 夜夜嗨一区二区| 日韩av资源网| 久久精品一本| 性欧美69xoxoxoxo| 亚洲三级网站| 精品理论电影在线| 亚洲欧美一区在线| 亚洲不卡视频| 视频在线不卡免费观看| 国产在线成人| 日韩中文字幕视频网| 欧美国产极品| 免费视频国产一区| 日韩av一区二区在线影视| 精品国产亚洲日本| 石原莉奈在线亚洲二区| 国产激情久久| 女人天堂亚洲aⅴ在线观看| 日韩精品乱码av一区二区| 国产一区二区三区不卡视频网站 | 97精品视频在线看| 女同性一区二区三区人了人一| 日本不卡一区二区| 91精品xxx在线观看| 久久精品99国产国产精| 亚洲激情av| 国产精品日本欧美一区二区三区| 欧美亚洲人成在线| 亚洲一区二区毛片| 欧美精品高清| 久久国内精品| 伊人久久亚洲| 蜜桃tv一区二区三区| 国产毛片精品| 蜜桃视频在线观看一区| 亚洲午夜一级| 色吊丝一区二区| 国精品产品一区| 国产精品日本一区二区不卡视频 | 精品国产乱码久久久| 亚洲小说春色综合另类电影| 国产精品黑丝在线播放| 日韩av一区二区在线影视| 欧美日韩国产在线一区| 福利一区二区免费视频 | 韩国一区二区三区视频| 久久国产人妖系列| 在线日韩成人| 欧美特黄视频| 日韩精品视频中文字幕| 神马久久午夜| 国产精品国产一区| 久久中文字幕一区二区三区| 久久精品 人人爱| 欧美日韩一区二区三区在线电影| 亚洲精品极品| 日韩区一区二| 国产欧美亚洲一区| 亚洲精品女人| 日韩精品一级| 国产精品欧美大片| 免费在线欧美黄色| 精品久久免费| 美女少妇全过程你懂的久久| 欧美1区2区3区| 噜噜噜躁狠狠躁狠狠精品视频| 性欧美长视频| 日韩精品第二页| 国产精品一区二区中文字幕| 久久香蕉网站| 好吊一区二区三区| 伊人久久大香伊蕉在人线观看热v| 日韩精品免费观看视频| 欧美午夜三级| 中文在线а√在线8| 亚洲一区欧美二区| 国产日韩在线观看视频| 激情国产在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产乱论精品| 99久久久久国产精品| 丝袜美腿亚洲一区二区图片| 国产精品日韩精品中文字幕| 午夜影院一区| 亚洲欧洲国产精品一区| 国产成人精品三级高清久久91| 国产一级一区二区| 国产精品久久观看| 亚洲国产成人精品女人| 国产毛片精品久久| 欧美日韩国产在线观看网站| 日韩动漫一区| 五月天久久网站| 麻豆91精品视频| 羞羞答答国产精品www一本| 麻豆免费精品视频| 欧美一区二区三区激情视频| 日本国产欧美| 好吊一区二区三区| 精品国产免费人成网站| 青青草视频一区| 亚洲高清成人| 另类专区亚洲| 日本va欧美va精品发布| 激情久久五月| 韩国久久久久久| 麻豆精品视频在线观看| 日韩在线视频一区二区三区| 欧美一区二区三区激情视频| 成人污污视频| 国产精品theporn| 日本不卡在线视频| 中文字幕日韩亚洲| 成人av二区| 91高清一区| 亚洲激情婷婷| 久久xxxx| 亚洲久久在线| 在线国产日韩| 日韩在线观看中文字幕| 亚洲三级在线|