Mybatis参数处理及取参数值

Mybatis参数处理及取参数值

单个参数

  • mybatis不做任何处理

  • 取值方式:

    ​ #{参数名/任意名}

    <!-- Employee getEmpById(Integer id);  -->
    <select id="getEmpById" resultType="com.mxc.bean.Employee">
        select * from employee where id=#{id}
    </select>
    

多个参数

  • mybatis会将多个参数自动封装为一个map

    ​ key:param1,…,paramN,也可以是0,…,N-1(即参数索引,N是参数的个数)

    ​ value:参数值

  • 取值方式:

    ​ #{上述的key}

    <!-- Employee getEmpByIdAndLastName(Integer id, String lastName);  -->
    <select id="getEmpByIdAndLastName" resultType="com.mxc.bean.Employee">
        select * from employee where id=#{param1} and last_name=#{param2}
    </select>
    
  • 为多个参数指定明确的key

    • @Param注解可以为参数指定一个明确的key,方便在sql中取参数值

    • 取值方式:

      ​ #{@Param注解指定的key}

    <!-- Employee getEmpByIdAndLastName(@Param("id")Integer id, @Param("lastName")String lastName);  -->
    <select id="getEmpByIdAndLastName" resultType="com.mxc.bean.Employee">
        select * from employee where id=#{id} and last_name=#{lastName}
    </select>
    

    参数多时会封装map,为了取参数值方便,使用@Param来指定封装时使用的key

参数是一个POJO

  • 若多个参数刚好是一个POJO中的属性值,可以直接传入一个POJO

  • 取值方式:

    ​ #{属性名}

    <!-- Employee getEmpByIdAndLastName(Employee emp);  -->
    <select id="getEmpByIdAndLastName" resultType="com.mxc.bean.Employee">
        select * from employee where id=#{id} and last_name=#{lastName}
    </select>
    

参数是一个Map

  • 若多个参数不是某一个POJO的属性,可以封装为一个Map

  • 取值方式:

    ​ #{Map的key}

    <!-- 
    	Employee getEmpByIdAndLastName(Map<String, Object> map); 
    	map:
    		Map<String, Object> map = new HashMap<>();
    		map.put("id", 1);
    		map.put("lastName", "mxc");
    -->
    <select id="getEmpByIdAndLastName" resultType="com.mxc.bean.Employee">
        select * from employee where id=#{id} and last_name=#{lastName}
    </select>
    

小试牛刀

Employee getEmp(@Param("id")Integer id,String lastName);
// 取值:id=>#{id/param1},lastName=>#{param2}

Employee getEmp(Integer id,@Param("e")Employee emp);
// 取值:id=>#{param1},lastName => #{param2.lastName/e.lastName}

#{}${}的异同

  • 同:

    ​ 可以获取map中的值或者pojo对象属性的值

  • 异:

    • #{}:是以预编译的形式,将参数设置到sql语句中,可以防止sql注入
    • ${}:取出的值直接拼装在sql语句中,会有安全问题
  • 使用场景

    大多情况下,取参数的值使用#{}。在原生JDBC不支持占位符的地方可以使用${}。如按年份分表查询:select * from ${year}_salary;

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值