案例: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 selectRolesByUserIdAndRoleEnabled(@Param(“userId”)Long userId, @Param(“enabled”)Integer enabled);
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 selectRolesByUserAndRole(@Param(“user”)SysUser user, @Param(“role”)SysRole role);

ü 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 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
>

  1. <**if test="region!=null and region !=''"**><br /> and REGION = #{region}<br /> </**if**><br /></**select**><br /> <br /> <br />