一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 詳解mybatis #{}和${}的區(qū)別、傳參、基本語法

詳解mybatis #{}和${}的區(qū)別、傳參、基本語法

2020-07-22 11:55wutongyuWxc Java教程

這篇文章主要介紹了mybatis #{}和${}的區(qū)別、傳參、基本語法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1 #{}和${}的區(qū)別、及注入問題

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(1) 區(qū)別:
  首先清楚一點,動態(tài) SQL 是 mybatis 的強大特性之一,在 mapper 中定義的參數(shù)傳到 xml 中之后,在查詢之前 mybatis 會對其進行動態(tài)解析,#{} 和 ${} 在預(yù)編譯中的處理是不一樣的:
  例如:select * from t_user where userName = #{name};
  #{}預(yù)編譯:用一個占位符 ? 代替參數(shù):select * from t_user where userName = ?
  #{}預(yù)編譯:會將參數(shù)值一起進行編譯:select * from t_user where userName = 'zhangsan'
(2) 使用場景:
  一般情況首選#{},因為這樣能避免sql注入;如果需要傳參 動態(tài)表名、動態(tài)字段名時,需要使用${}
  比如:select * from ${tableName} where id > #{id};
(3) SQL注入問題:
  舉個例子,如果使用${}出現(xiàn)的注入問題:
  select * from ${tableName};
  如果傳參 t_user;delete from t_user,則預(yù)編譯后的sql如下,將會導(dǎo)致系統(tǒng)不可用:
  select * from t_user;delete from t_user;
(4) like 語句防注入:
  使用concat函數(shù):
  select * from t_user where name like concat('%', #{name}, '%')

2 mybatis幾種傳參方式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
非注解:
(1)單參數(shù):
public User getUserByUuid(String uuid);
<select id="getUserByUuid" resultMap="BaseResultMap" parameterType="Object">
  SELECT * FROM   t_user  WHERE uuid = #{uuid}
</select>
(2)多參數(shù)
public User getUserByNameAndPass(String name,String pass);
<select id="getUserByNameAndPass" resultMap="BaseResultMap" parameterType="Object">
  SELECT * FROM t_user  WHERE t_name = #{0} and t_pass = #{1}
</select>
(3)Map參數(shù)
public User getUserByMap(Map<String,Object> map);
<select id="getUserByMap" resultMap="BaseResultMap" parameterType="java.util.Map">
  SELECT * FROM t_user  WHERE t_name = #{name} and t_pass = #{pass}
</select>
(4)實體對象參數(shù)
public int updateUser(User user); 
<select id="updateUser" resultMap="BaseResultMap" parameterType="Object">
  update t_user set t_name = #{name}, t_pass = #{pass} where uuid=#{uuid}
</select>
(4)List集合參數(shù)
public int batchDelUser(List<String> uuidList);
<delete id="batchDelUser" parameterType="java.util.List">
  DELETE FROM t_user WHERE uuid IN
  <foreach collection="list" index="index" item="uuid" open="(" separator="," close=")">
       #{uuid}
   </foreach>
</delete>
注解:
public List<User> getUserByTime(@Param("startTime")String startTime, @Param("endTime")String endTime);
<select id="getUserByTime" resultMap="BaseResultMap" parameterType="Object">
  SELECT * from t_user where createTime &gt;= #{startTime} and createTime &lt;= #{endTime}
</select>

2 choose when otherwise

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//JAVA 代碼
public List<Group> getUserRoleRelByUserUuid(@Param("groupUuid") String userUuid,@Param("roleList")List<String> roleUuidList);
//SQL
SELECT * from user_role where groupUuid=#{groupUuid}
   <choose>
    <when test="roleList!=null&amp;&amp;roleList.size()&gt;0">
      AND roleUuid IN
      <foreach collection="roleList" index="index" item="roleUuid" open="(" separator="," close=")">
        #{roleUuid}
      </foreach>
    </when>
    <otherwise>
      AND roleUuid IN ('')
    </otherwise>
   </choose>

3 判斷字符串相等

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//JAVA 代碼
public int getOrderCountByParams(Map<String, Object> params);
//SQL
<select id="getOrderCountByParams" resultType="java.lang.Integer" parameterType="Object">
  SELECT count(*) FROM itil_publish_order where 1=1
     <if test="timeType == '1'.toString()" >
            AND create_time &gt;= #{timeStr}
       </if>
       <if test="timeType == '2'.toString()" >
            AND end_time &lt;= #{timeStr}
       </if>
 </select>
或者
<if test = 'timeType== "1"'> </if>

4 CONCAT函數(shù)實現(xiàn) 模糊匹配

?
1
2
3
4
5
6
<select id="getMaxSerialCode" resultType="java.lang.String" parameterType="Object">
        SELECT count(*) FROM
       itil_publish_order
        WHERE serial_code LIKE CONCAT('%',#{codeStr},'%')
        ORDER BY serial_code DESC LIMIT 1
</select>

5 大于等于、小于等于

?
1
2
3
4
5
6
7
//JAVA代碼
public List<PublishOrder> getOrderCount(@Param("startTime") String startTime,@Param("startTime")List<String> startTime);
//SQL
<select id="getOrderCount" resultType="java.lang.String" parameterType="Object">
        SELECT * FROM itil_publish_order
        WHERE createTime &gt;= #{startTime} and &lt;= #{startTime}
</select>

到此這篇關(guān)于mybatis #{}和${}的區(qū)別、傳參、基本語法的文章就介紹到這了,更多相關(guān)MyBatis中${}和#{}傳參的區(qū)別內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/wutongyuWxc/article/details/84584239

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91这里只有精品 | 五月最新商场女厕所高跟嘘嘘 | 欧美大奶艳星 | 久9青青cao精品视频在线 | ady久久 | 日韩精品欧美激情国产一区 | 91碰碰 | 国产精品久久久久久久福利院 | 北岛玲在线视频 | 国产成人久视频免费 | 脱女学小内内摸出水网站免费 | 午夜宅男在线观看 | 亚洲六月丁香六月婷婷蜜芽 | xxx95日本老师xxx学生 | 成年视频在线观看 | 亚洲精品国产一区二区三区在 | 亚洲欧美久久久久久久久久爽网站 | 成成人看片在线 | 和两个男人玩3p好爽视频 | 成人黄色a级片 | 先锋影音 av| avidolz中文版| 狠狠躁夜夜躁人人爽天天miya | 单亲乱l仑在线观看免费观看 | 99r视频 | 久久精品亚洲国产AV涩情 | 天天射天天舔 | 狠狠五月天中文字幕 | ysav67| 99热在这里只有精品 | 人配人种视频xxxx | a一级一级| 黄瓜视频黄版 | 日韩色在线观看 | 亚色九九九全国免费视频 | 爱豆传媒最新视频国产 | 婷婷综合缴情亚洲五月伊 | 国产精品一区二区久久不卡 | 1986葫芦兄弟全集免费观看第十集 | 百合女女师生play黄肉黄 | 亚洲国产精品成 |