案例:ZJJ_Mybatis_2019/09/29_18:22:18_i348k |
---|
传递参数有三种方式:
方式 | 描述 |
---|---|
使用map传递参数 | 对于开发人员来讲是非常爽的,不需要太多的开发,直接塞进Map里面就可以了,缺点:可读性差,导致可维护性和可扩展性差,杜绝使用 因为你往Map里面塞了哪些参数后面程序员维护的时候是不知道的,只能去Mapper.xml文件找到这个sql语句去看,才能知道Map里面传递了哪些东西 |
使用注解传递参数 | 直观明了,当参数较少一般小于5个的时候,建议使用. |
使用Java Bean的方式传递参数 | 当参数大于5个的时候,建议使用 |
建议不要用Map作为mapper的输入和输出,不利于代码的可读性和可维护性;见《Java开发手册1.5》之5.4.6;
代码是给系统运行的,但代码更是给人用的,写下一行可能只要1分钟,但是未来会被一代代工程师读很多次,改很多次,代码的可读性与可维护性,是我心目中的代码第一标准.
阿里大神 —-程立
传参两个单一参数
dao接口
给参数配置@Param注解后,Mybatis会自动将参数封装成map类型,@Param注解值会作为Map的key,因此在sql部分就可以通过配置的注解值来使用参数.
为什么一个参数的时候就不使用注解?因为在这种情况下(除了集合和数组外),Mybatis不会关心这个参数叫什么名字就会直接把这个唯一的参数拿来使用.
/**
- 根据用户 id 和 角色的 enabled 状态获取用户的角色
*/
List
daoXml文件
<select id=”selectRolesByUserIdAndRoleEnabled” resultType=”tk.mybatis.simple.model.SysRole”>
select
r.id,
r.role_name roleName,
r.enabled,
r.create_by createBy,
r.create_time createTime
from sys_user u
inner join sys_user_role ur on u.id = ur.user_id
inner join sys_role r on ur.role_id = r.id
where u.id = #{userId} and r.enabled = #{enabled}
</select>
传递两个实体类
这时,在xml中就不能直接使用#{userId}和#{enabled}了,而是要通过 点 取值方式使用#{user.id}和#{role.enabled}从两个javaBean中取出指定属性的值,修改好对应的xml文件后,大家可以自行完善代码并进行测试.
除了以上常用的参数类型外,接口的参数还可能是集合或者数组.
ü dao接口
/根据用户 id 和 角色的 enabled 状态获取用户的角色/
List
ü dao实现类
<select id=”selectRolesByUserAndRole” resultType=”tk.mybatis.simple.model.SysRole”>
select
r.id,
r.role_name roleName,
r.enabled,
r.create_by createBy,
r.create_time createTime
from sys_user u
inner join sys_user_role ur on u.id = ur.user_id
inner join sys_role r on ur.role_id = r.id
where u.id = #{user.id} and r.enabled = #{role.enabled}
</select>
使用map进行参数传递查询
使用map作为参数的方法,就是map中通过key来映射xml中sql使用的参数值名字,value用来存放参数值,需要多个参数的时候,通过key-value方式进行参数传递.
需要注意,必须要有@RequestParam 注解,不然接收不到参数
@PostMapping(“/register”)
public String register(@RequestParam Map
ü
ü dao的xml配置文件
注意占位符写的内容在传入的map里面得有这个参数.
<select id=”getBChargingCarMaintenanceList” resultMap=”bChargingpilerepairMap” parameterType=”java.util.Map”>
select _ _from B_CHARGINGPILEREPAIR where FLAG = 1
<if test=”city!=null and city !=’’”>
and CITY = #{city}
</*if>
<**if test="region!=null and region !=''"**><br /> and REGION = #{region}<br /> </**if**><br /></**select**><br /> <br /> <br />