溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis中#{}與${}有什么區別

發布時間:2021-01-28 08:14:28 來源:億速云 閱讀:253 作者:Leah 欄目:編程語言

這篇文章給大家介紹Mybatis中#{}與${}有什么區別,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

關于 # { }

1、#{}表示一個占位符號 相當于 jdbc 中的 ? 符號 #{}實現的是向prepareStatement中的預處理語句中設置參數值,sql語句中#{}表示一個占位符即?

2、#{}將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如: select * from user where id= #{user_id} ,如果傳入的值是11,那么解析成sql時的值為 where id="11" ,

3、如果sql語句中只有 一個參數 ,此時參數名稱可以 隨意定義 如果sql語句有 個參數,此時參數名稱應該是與當前表關聯[實體類的屬性名]或則[Map集合關鍵字], 不能隨便寫,必須對應 !如下圖

Mybatis中#{}與${}有什么區別 

關于$ { }

1、 {user_id} ,如果傳入的值是11,那么解析成sql時的值為 where id=11`

2、 $ {value}value 值有限制只能寫對應的value值不能隨便寫,因為 ${} 不會自動進行jdbc類型轉換

3、簡單來說,在 JDBC 不支持使用占位符的地方,都可以使用 ${}

Mybatis中#{}與${}的區別

簡單來說區別就是

#{}方式能夠很大程度防止sql注入(安全),${}方式無法防止Sql注入

JDBC 能使用占位符的地方,最好優先使用 #{}

JDBC 不支持使用占位符的地方,就只能使用 ${} ,典型情況就是 動態參數

比如 有兩張表,分別是 emp_2017emp_2018 .如果需要在查詢語句中 動態指定表名 ,就只能使用${}

<select>
  select * from emp_ ${year}
<select>

再比如MyBatis 排序時使用 order by 動態參數 時,此時也只能使用${}

<select>
  select * from dept order by ${name}
</select>

代碼案例

一般# {}與$ {}用的比較多的地方是模糊查詢方面,所以下面來一個模糊查詢的案例

使用#{}案例

1、映射文件

在User.xml配置文件中添加如下內容:

<!-- 如果返回多個結果,mybatis會自動把返回的結果放在list容器中 -->
	<!-- resultType的配置和返回一個結果的配置一樣 -->
	<select id="queryUserByUsername1" parameterType="string"
		resultType="cn.itcast.mybatis.pojo.User">
		SELECT * FROM `user` WHERE username LIKE #{username}
	</select>

2、測試程序

MybatisTest中添加測試方法如下:

@Test
	public void testQueryUserByUsername1() throws Exception {
		// 4. 創建SqlSession對象
		SqlSession sqlSession = sqlSessionFactory.openSession();

		// 5. 執行SqlSession對象執行查詢,獲取結果User
		// 查詢多條數據使用selectList方法
		List<Object> list = sqlSession.selectList("queryUserByUsername1", "%王%");

		// 6. 打印結果
		for (Object user : list) {
			System.out.println(user);
		}

		// 7. 釋放資源
		sqlSession.close();
	}

測試效果如下圖:

Mybatis中#{}與${}有什么區別 

使用$ {}案例

1、映射文件:

在User.xml配置文件中添加如下內容:

<!-- 如果傳入的參數是簡單數據類型,${}里面必須寫value -->
	<select id="queryUserByUsername2" parameterType="string"
		resultType="cn.itcast.mybatis.pojo.User">
		SELECT * FROM `user` WHERE username LIKE '%${value}%'
	</select>

2.測試程序:MybatisTest中添加測試方法如下:

@Test
public void testQueryUserByUsername2() throws Exception {
	// 4. 創建SqlSession對象
	SqlSession sqlSession = sqlSessionFactory.openSession();

	// 5. 執行SqlSession對象執行查詢,獲取結果User
	// 查詢多條數據使用selectList方法
	List<Object> list = sqlSession.selectList("queryUserByUsername2", "王");

	// 6. 打印結果
	for (Object user : list) {
		System.out.println(user);
	}

	// 7. 釋放資源
	sqlSession.close();
}

關于Mybatis中#{}與${}有什么區別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女