MyBatis传递参数的各种方式以及获取方式

1、map
<select id="findRole" parametertype="map" resultMap="java.util.HashMap">
    SELECT
    id,role_name,note FROM t_role
    WHERE role_name like concat
    ('%',#{roleName},'%')
    and note like concat('%',#{note},'%')
</select>

public <T> List<T> findRole(Map<String, String> params);//接口

HashMap<String, String> paramsMap = new HashMap<String, String>();
        paramsMap.put("roleName", "me");
        paramsMap.put("note", "te");
        roleMapper.findRole(paramsMap);

2、@Param注解

public List<Role> findRole(@Param("roleName")String roleName,@Param("note")String note);//接口

<select id="findRole" resultMap="roleMap">
    SELECT
    id,role_name,note FROM t_role
    WHERE role_name like concat
    ('%',#{roleName},'%')
    and note like concat('%',#{note},'%')
</select>
3、JavaBean

<select id="findRole" parametertype="com.learn.params.RoleParam" resultMap="roleMap">
    SELECT
    id,role_name,note FROM t_role
    WHERE role_name like concat
    ('%',#{roleName},'%')
    and note like concat('%',#{note},'%')
</select>

public List<Role> findRole(RoleParam roleParam);//接口

@TableSeg(tableName = "ly_role", id="id")
public class RoleParam extends FormMap<String,Object>{


    private static final long serialVersionUID = 1L;

}

 

### ### MyBatis 获取参数值的两种方式 MyBatis 提供了两种主要方式获取参数值,分别是 `#{}` 和 `${}`,它们在 SQL 语句中用于动态地将参数传递给数据库查询。 #### `#{}` 方式 `#{}` 是 MyBatis 推荐使用的方式,它能够防止 SQL 注入攻击,并且可以自动处理参数类型转换。当使用 `#{}` 时,MyBatis 会创建一个预编译语句(PreparedStatement),并且将参数值作为占位符传递进去。这种方式适用于大多数参数传递场景,包括基本数据类型、Map、Java Bean 以及集合等。 例如,当 mapper 接口中方法参数为多个时,MyBatis 会自动将这些参数放入一个 Map 集合中,并使用 `arg0`, `arg1` 或 `param1`, `param2` 等键来存储参数值。此时可以通过 `#{}` 访问这些键来获取对应的值。 ```xml <select id="checkLogin" resultType="user"> select * from user where username=#{param1} and password=#{param2} </select> ``` 上述 SQL 语句中的 `#{param1}` 和 `#{param2}` 分别代表入的第一个和第二个参数值[^2]。 #### `${}` 方式 `${}` 是直接替换的方式,它不会进行预编译处理,而是直接将参数值替换到 SQL 语句中。这种方式适用于需要动态拼接 SQL 语句的情况,但需要注意的是,使用 `${}` 时必须手动添加单引号来包裹字符串类型的参数值,以避免 SQL 注入攻击和语法错误。 例如,在使用 `${}` 时,如果参数是字符串类型,则需要手动添加单引号: ```xml <select id="checkLogin" resultType="user"> select * from user where username='${param1}' and password='${param2}' </select> ``` 在上述 SQL 语句中,`'${param1}'` 和 `'${param2}'` 分别代表入的第一个和第二个参数值,并且被单引号包围以确保 SQL 语句的正确性[^2]。 #### 使用 @Param 注解 除了上述两种基本方式之外,还可以通过 `@Param` 注解来指定参数名称,这样在 SQL 语句中就可以使用更具意义的名称来引用参数值。这种方式使得 SQL 语句更加清晰易懂,并且可以避免参数顺序带来的混淆。 ```java User checkLoginByParam(@Param("username") String username, @Param("password") String password); ``` 对应的 SQL 语句可以如下所示: ```xml <select id="checkLoginByParam" resultType="user"> select * from user where username = #{username} and password = #{password} </select> ``` 或者使用 `${}`: ```xml <select id="checkLoginByParam" resultType="user"> select * from user where username = '${username}' and password = '${password}' </select> ``` 在使用 `@Param` 注解的情况下,MyBatis 会将参数值以 `@Param` 注解的 `value` 属性值为键存入 Map 集合中,也可以使用 `param1`, `param2` 等键来访问参数值[^3]。 #### 单个字面量参数 当方法参数为单个字面量类型时,可以直接使用 `#{}` 或 `${}` 来引用该参数值,而无需指定键名。 ```xml <select id="selectUserById" resultType="user"> select * from user where id = #{id} </select> ``` 或者使用 `${}`: ```xml <select id="selectUserById" resultType="user"> select * from user where id = ${id} </select> ``` 在这种情况下,无论是 `#{}` 还是 `${}` 都可以直接引用参数值[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值