本人也是工作之中总结的,写此博客总结。
#{}跟${}区别
首先#{}跟${}
的区别我相信大家也心里知道什么意思网上一搜一大把的关于这方面知识。就我平时用到而言:#{}用的比较普遍(基本上用的都是这个),传入的参数会默认带有“”
,而${}也能传入参数只不过说的是会造成SQL注入,什么是SQL注入:
就这样跟你讲吧就是#{}是针对具体的某个参数,而后者是原样输出。
当然我有点总结不对反正就是个别场景用不同的,普通带参数查找就是#{}。而有的时候SQL需要比如in(),这个时候就需要后者了。如果用前者那么就是in(“1,2”)就会造成错误。
@Param注解传参法(针对传入较少参数)
public User selectUser(@Param("userName") String name, int @Param("deptId") deptId);
<select id="selectUser" resultMap="UserResultMap">
select * from user
where user_name = #{userName} and dept_id = #{deptId}
</select>
Map传参法(不推荐用)
public User selectUser(Map<String, Object> params);
<select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">
select * from user
where user_name = #{userName} and dept_id = #{deptId}
</select>
#{}里面的名称对应的是 Map里面的key名称。
Java Bean传参法(推荐使用)
public User selectUser(User params);
<select id="selectUser" parameterType="com.test.User" resultMap="UserResultMap">
select * from user
where user_name = #{userName} and dept_id = #{deptId}
</select>
#{}里面的名称对应的是 User类里面的成员属性。
返回类型
- resultMap 返回类型是对应的实体类类型 (不过不是直接返回,看例子)
<resultMap id="periodResult" type="com.bzzn.stability.dto.analysis.SensitivesResult">
<result property="name" column="name"/>
<result property="status" column="event_Status"/>
<result property="startDate" column="start_date"/>
<result property="endDate" column="end_date"/>
<result property="periodId" column="id"/>
</resultMap>
<select id="queryPeriodList" resultMap="periodResult"></select>
这样让实体类属性与字段名一 一对应,就好比是起别名。
- resultType返回类型是1.基本类型String 2.map 3.实体类
总结
#{}获取参数内容
1.使用索引,从 0 开始 #{0}表示第一个参数
2.也可以使用#{param1}第一个参数
3.如果只有一个参数(基本数据类型或 String),mybatis对#{}里面内容没有要求只要写内容即可.
4.如果参数是对象#{属性名}
5.如果参数是map,写成#{key}