1、#{}
和${}
的區別是什么?
#{}
是預編譯處理,${}
是字符串替換。
Mybatis 在處理#{}時,會將 sql 中的#{}替換為?號,調用 PreparedStatement 的
set 方法來賦值;
Mybatis 在處理${}
時,就是把${}
替換成變量的值。
使用#{}可以有效的防止 SQL注入,提高系統安全性。
2、當實體類中的屬性名和表中的字段名不一樣 ,怎么辦 ?
第 1種: 通過在查詢的sql語句中定義字段名的別名,讓字段名的別名和實體類
的屬性名一致。
<select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”>select order_id id,order_no orderno,order_price price fromorders where order_id=#{id};</select>
第2種:通過<resultMap>
來映射字段名和實體類屬性名的一一對應的關系。
<select id="getOrder" parameterType="int" resultMap="orderresultmap">select * from orders where order_id=#{id}</select><resultMap type=”me.gacl.domain.order” id=”orderresultmap”><!–用id屬性來映射主鍵字段–><id property=”id” column=”order_id”><!–用result屬性來映射非主鍵字段,property為實體類屬性名,column
為數據表中的屬性–><result property=“orderno” column=”order_no”/><result property=”price” column=”order_price”/></reslutMap>
3、模糊查詢like語句該怎么寫?
第1種:在Java代碼中添加sql通配符。
string wildcardname=“%smi%”;list<name> names=mapper.selectlike(wildcardname);
<select id=”selectlike”>select * from foo where bar like #{value}</select>
第 2種:在sql語句中拼接通配符,會引起sql注入
string wildcardname = “smi”;list<name> names = mapper.selectlike(wildcardname);<select id=”selectlike”>select * from foo where bar like "%"#{value}"%"</select>
阿里云“99計劃”,新老同享,低價長效,助力開發者普惠上云!