MyBatis映射文件的参数处理

单个参数传递

可以接受基本类型,对象类型,集合类型的值。这种情况MyBatis克直接使用这个惨数,不需要经过任何处理。

代码演示
UserDao接口代码:

 /**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    User queryForId(Integer id);

UserDaoMapper.xml代码:

<select id="queryForId" resultType="com.gz.mybatis01.User">
            select * from user where id = #{id}
    </select>

多个参数传递

两个以上参数,都会被MyBatis重新包装成一个Map传入。Map的key就是param1,param2…。 0,1…就是我们传入的参数。

代码演示

方式一

UserDao接口代码:

 /**
     * 根据id和name查询用户信息
     * @param id
     * @param name
     * @return
     */
    User queryForIdAndName(Integer id,String name);

UserDaoMapper.xml代码:

<select id="queryForIdAndName" resultType="com.gz.mybatis01.User">
            select * from user where id = #{param1} and name = #{param2}
    </select>

但是我们一般不是用这种方法,参数多的时候,不清楚传入的参数是什么。

方式二:我们在UserDao接口方法参数中使用@Param注解

UserDao接口代码:

 /**
     * 根据id和name查询用户信息
     * @param id
     * @param name
     * @return
     */
    User queryForIdAndName(@Param("id") Integer id, @Param("name") String name);

UserDaoMapper.xml代码:

 <select id="queryForIdAndName" resultType="com.gz.mybatis01.User">
            select * from user where id = #{id} and name = #{name}
    </select>

方式三:自定义Map,传入参数。

UserDao接口代码:

 /**
    /**
     * 根据id和name查询用户信息
     * @param map
     * @return
     */
    User queryForIdAndName(Map map);

UserDaoMapper.xml代码:

<select id="queryForIdAndName" resultType="com.gz.mybatis01.User">
            select * from user where id = #{id} and name = #{name}
    </select>

调用方法类:

 		Map<String,Object> map = new HashMap<String, Object>();
        map.put("id",1);
        map.put("name","芒果");
        User user = mapper.queryForIdAndName(map);
        System.out.println(user);

#{}与${}

#{}:占位符,会Sql预编译,变量替换实在DBMS中,#{} 对应的变量自动加上单引号 ‘’, 能防止sql 注入。
S{}:拼接符,Sql拼接,变量替换实在DBMS外,${} 对应的变量不会加上单引号 ‘’,不能能防止sql 注入。

#{} 和 ${} 在使用中的技巧和建议:

  • 能用 #{} 的地方就用 #{},不用或少用 ${}
  • 表名作参数时,必须用 ${}。如:select * from ${tableName}
  • order by 时,必须用 ${}。如:select * from t_user order by ${columnName}
  • 使用 ${} 时,要注意何时加或不加单引号,即 ${} 和 ‘${}’
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值