mybatis中的${} 和#{} 的做用和區別sql
當使用parameterType向SQL傳遞參數的時候,能夠使用基本數據類型int,String,Map和自定義的Model類,在SQL中引用這些參數的時候兩種方式均可以使用。安全
示例1: 執行SQL:Select * from emp where name = #{employeeName} 參數:employeeName=>Smith 解析後執行的SQL:Select * from emp where name = ? ==》Select * from emp where name = ‘Simith’ 執行SQL:Select * from emp where name = ${employeeName} 參數:employeeName傳入值爲:Smith 解析後執行的SQL:Select * from emp where name =Smith
#{} 會生成preparedStatement .預編譯SQL語句,這樣比較安全,防止SQL注入,並且傳入的值是字符串類型mybatis
${} : 至關於直接賦值,不能防止SQL注入和預編譯app
總結,建議使用#{}方式,可是在order by ${name} 這些固定不變的狀況下,也能夠使用${} 方式。ui
參考:http://blog.csdn.net/szwangdf/article/details/26714603 spa
http://blog.csdn.net/kobi521/article/details/16941403 .net
http://blog.csdn.net/shaozengwei/article/details/17446247code
二.mybatis 中使用模糊語句查詢xml
模糊查詢:對象
工做中用到,寫三種用法吧,第四種爲大小寫匹配查詢
1. sql中字符串拼接
SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');
2. 使用 ${...} 代替 #{...}
SELECT * FROM tableName WHERE name LIKE '%${text}%';
3. 程序中拼接
Java
// or String searchText = "%" + text + "%";
String searchText = new StringBuilder("%").append(text).append("%").toString();
parameterMap.put("text", searchText);
SqlMap.xml
SELECT * FROM tableName WHERE name LIKE #{text};
4. 大小寫匹配查詢
[sql] view plaincopy
SELECT * FROM TABLENAME WHERE UPPER(SUBSYSTEM) LIKE '%' || UPPER('jz') || '%'
--或者是
SELECT * FROM TABLENAME WHERE LOWER(SUBSYSTEM) LIKE '%' || LOWER('jz') || '%'
參考:http://blog.csdn.net/luqin1988/article/details/7865643
三 ,mybatis中resultMap 和resultType 的區別
MyBatis中在查詢進行select映射的時候,返回類型能夠用resultType,也能夠用resultMap,resultType是直接表示返回類型的(對應着咱們的model對象中的實體),而resultMap則是對外部ResultMap的引用(提早定義了db和model之間的隱射key-->value關係),可是resultType跟resultMap不能同時存在。
在MyBatis進行查詢映射時,其實查詢出來的每個屬性都是放在一個對應的Map裏面的,其中鍵是屬性名,值則是其對應的值。
①當提供的返回類型屬性是resultType時,MyBatis會將Map裏面的鍵值對取出賦給resultType所指定的對象對應的屬性。因此其實MyBatis的每個查詢映射的返回類型都是ResultMap,只是當提供的返回類型屬性是resultType的時候,MyBatis對自動的給把對應的值賦給resultType所指定對象的屬性。
②當提供的返回類型是resultMap時,由於Map不能很好表示領域模型,就須要本身再進一步的把它轉化爲對應的對象,這經常在複雜查詢中頗有做用。
參考:http://www.tuicool.com/articles/ju2Y7n