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 from
orders 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计划",新老同享,低价长效,助力开发者普惠上云!