1. 程式人生 > >mybatis中sql語句中的#和$

mybatis中sql語句中的#和$

一直寫mybatis的sql語句,當時想只要實現它的功能就行了,也沒過多的去理解;

首先我們大家都知道#和$都是用來傳值的,但他們之間是怎麼區分的呢?什麼時候用哪個好呢?

1、#將傳入的資料都當成字串,執行sql時會對傳入的資料自動加上引號,如:where time like concat (#{time},'%'),如果傳入的值為2016-10-1,解析為sql時則為where time like '2016-10-1%'

2、$將傳入的資料直接顯示在生成的sql中,如:limit ${page.startIndex},${page.pageSize}

3、#能夠很大程度上防止sql注入,$則無法防止sql注入

4、$一般用於傳入資料庫物件

5、mybatis排序時使用order by動態引數時使用$而不是#

6、一般能用#就不使用$,因為預設情況下,使用#{}方式的語法會導致mybatis建立預處理語句屬性並以它為背景設定安全的值,mybatis不會修改和轉義字串,這樣很安全

相關推薦

mybatissql語句的#$

一直寫mybatis的sql語句,當時想只要實現它的功能就行了,也沒過多的去理解; 首先我們大家都知道#和$都是用來傳值的,但他們之間是怎麼區分的呢?什麼時候用哪個好呢? 1、#將傳入的資料都當成字串

MyBatis sql語句include標籤的使用

   <!-- 1.先定義用於select查詢公用抽取的列 -->     <sql id="columns">         id,name,sex,birth

MyBatissql語句的按時間排序無效問題order by create_time desc

mybatis的mapper檔案中書寫sql語句,但是根據時間倒序查詢的order by create_time 突然無效了,這是為什麼?導致無效的原因:時間格式做了改變,時間欄位別名和原始欄位重名,導

MyBatisSql語句動態傳引數·動態SQL拼接

在動態傳遞引數的時候,需要用到OGNL表示式,不懂的童鞋可以下去百度,這裡製作一個簡要的介紹 在向XML檔案傳遞引數的時候,需要用到sqlSession.selectList("Message.que

mybatissql語句使用大於小於號方法

目的: mapper檔案中如何使用大於小於號 例項:查詢語句 <select id="queryInfo" parameterType="com.Time" resultType

Mybatissql語句的in查詢,一定要判斷null的情況

不嚴謹的寫法,可能會報錯:in (),這種情況不符合mysql的語法。    select from loanwhere LOAN_ID in <foreach item="item" index

mybatis的xmlsql語句in的寫法

這裡使用 foreach標籤 <foreach  item="item" collection="listTag" index="index"  open="(" separator="," close=")"> #{item} </foreach>

Oracle sql語句的取前n條數據

沒有 blog tab 註意 sql table bsp num 數據 取得薪水最高的前五名員工 sql: select * from ( select empno,ename,sal from emp order by sal desc) where rownum&l

實習工作Sql 語句 IN EXISTS 的心得體會

在學校時做專案時資料庫表少而且資料量也不大,做子查詢的時候一般沒有什麼區別,所以一直以來沒有注意過這個問題。 如今工作後,讓我實現政府執法人員執政編號的修改,用IN做子查詢時發現效率特別慢,最後發現是因為IN語句中查詢順序不同導致的。 IN 語句:只執行一次   &n

oraclesql語句多個查詢結果的交集、差集並集

1.交集 intersect運算:返回查詢結果中相同的部分。 SELECT product_id FROM tab1 INTERSECT SELECT product_

java mybatis學習之$#區別,mapper代理接口,動態SQL,在日誌輸出mybatissql語句

except 控制臺 處理方式 ron target 技術分享 需要 prefix job 1.在mybatis中,$和#的區別: #{}:表示一個預處理參數,參數類型不定,是根據傳入的參數類型來設定的。類似於JDBC中的? 特例使用,模糊查詢:(針對oracle): an

MyBatis Sql語句的轉義字符

org align eating parse exc 大於號 cin bat 轉義 1、在xml的sql語句中,不能直接用大於號、小於號要用轉義字符 如果用小於號會報錯誤如下: org.apache.ibatis.builder.BuilderException: Erro

mybatissql語句查詢操作

java 拼接 tca 指定 lose pan 添加 fill test 動態sql where if where可以自動處理第一個and。   <!-- 根據id查詢用戶信息 --> <!-- public User findUse

160311、mybatis sql語句轉義字元

 問題: 在mapper  ***.xml中的sql語句中,不能直接用大於號、小於號要用轉義字元 解決方法:   1、轉義字串 小於號    <    &lt; 大於號    >

MyBatis:SQL語句的foreach標籤的詳細介紹

foreach 也就是遍歷迭代,在SQL中通常用在 in 這個關鍵詞的後面 foreach元素的屬性主要有 item,index,collection,open,separator,close。 分別代表: item表示集合中每一個元素進行迭代時的別名, index用

mybatissql語句#{}${}的區別

先直接說用法:    一般引數傳遞用#{},在sql相當於佔位符,sql執行時引數帶引號“”    在進行group by 或order by 的時候,使用${},sql執行的時候不帶引號原則:能用#的地方不要用$,避免sql注入,安全列個例子供參考:    1. #將傳入的

如何編寫Java的MyBatis框架SQL語句對映部分

1..增刪改查、引數、快取 1.1 select  舉例如下: 查詢學員資訊,一個String引數,引數標識為#{studentID},並返回一個StudentEntity型別的物件 <select id="getStudent" parameterType="St

在SpringBootMybatis顯示SQL語句

在SpringBoot中MyBatis顯示SQL語句在application.properties中logging.level.com.spring.jiminshiro.mapper=debugMyB

MyBatis兩種執行XXXMapper.xml配置檔案SQL語句的方法

一、SqlSession單例模式類 package cn.mybatis.Sql; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.i

SQL語句SUM列出前面行的

題目:已知資料庫  表名:Job  結構如下:   ID  DAY  TOTALSALES   1    5    40   2    4    50   3   10    10   4   16    20   5    2    30  ...  ... 通過SQL