09 MyBatis——Mapper的参数ParameterType

参数类型ParameterType

传递参数

selectList()方法和selectOne方法,只能传一个参数:

  • 下面方法的第二个参数,即需要传入的参数(如下传入1)
  • 第一个参数为方法名。
  • session.selectOne("cn.xiaohei.mapper.PeopleMapper.selById",1);

selectMap()方法,传递多个参数

  • 第三个参数为实参。
  • Map<String,Object> map = new HashMap<>();
  • map.put("id",1);
  • map.put("name","zhangsan");
  • session.selectOne("a.b.selById",map);//传入map

传递的参数类型

  • 基本数据类型
  • 复杂数据类型:类和Map

获取参数

使用#获取

此方法为占位方法

下图为log4j输出的日志

设置参数类型:这里设置了int。

获取参数:#{0},0表示第1个参数

 

如果参数是map则写为#{key}

  • 获取的方法如下
  • 其中,map为map对象,id和name为map对象中的两个属性。

 

获取时的代码转换成下面这样:

 

 如果传递的参数是对象,则获取时可以#{对象的属性名}这样获取:

<update id="updBalanceByAccno" parameterType="bank" >
         update bank set balance=balance+#{balance} where accno=#{accno}
</update>

  

如果传递的参数是多个基础类型(字符串,布尔值,数值),获取时按arg0,arg1,或param1,param2这样一次获取

update t_user set uname=#{param1} where id=#{param2}

  

推荐:或者在接口中使用@param("参数别名")来给参数起别名,而在获取时直接使用别名获取。

List<User> selByIf(@Param("name")String name,@Param("gender") String gender);

Mapper中:

<select id="selByIf" resultType="User">
		select * from User
		<!-- OGNL表达式,直接写key或对象的属性 -->       
		<where>
			<if test="name!=null and name!=''">
			    and name=#{name}
			</if>
			<if test="gender!=null and gender!=''">
			    and gender=#{gender}
			</if>
		</where>
     </select>

  

使用${}获取(很少用)

此方式为字符串拼接,大括号中填入基础数据类型会被直接拼接近sql语句中(不是替换),所以当参数类型为对象时,大括号中可填入对象的属性名作为实参。

 

 

 

 

posted @ 2020-03-04 17:27  Scorpicat  阅读(538)  评论(0编辑  收藏  举报