【MyBatis】映射器传递参数的三种方法

本文介绍了在MyBatis中通过三种不同的方式传递映射器参数的方法:使用Map、使用@Param注解及使用JavaBean。每种方法都有其适用场景,并通过具体的例子展示了如何在DAO接口和XML文件中应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBtis在实现映射器的时候,通常采用xml文件的形式而非注解的形式,这样的好处是将sql和程序代码解耦,便于统一的管理,因此在java代码中,需要将参数传递到xml文件形式的sql语句。

传递映射器参数一共三种方法,分别是:

  1. 利用map
  2. 利用注解@Param
  3. 利用java bean

下面利用一个例子具体讲解这三种方式,java bean如下。

public class Role{
    private Long id;
    private String roleName;
    private String note;
    /** getter and setter*/
}

1,利用map的形式

// Dao层接口
public List<Role> findRoleByMap(Map<String, Object> parameterMap);


// XML文件
<select id="findRoleByMap" parameterType="map" resultType="role">
    select id, role_name as roleName, note 
    from t_role
    where role_name like concat('%', #{roleName}, '%')
    and note like concat('%', #{note}, '%')
</select>

// 测试代码
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
Map<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("roleName", "1");
parameterMap.put("noet", "1");
List<Role> roles = roleMapper.findRoleByMap(parameterMap);

注意,参数roleName和note是map的键,map的值是参数的值。

2,利用@Param

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

// XML文件
<select id="findRoleByMap" resultType="role">
    select id, role_name as roleName, note 
    from t_role
    where role_name like concat('%', #{roleName}, '%')
    and note like concat('%', #{note}, '%')
</select>

// 测试代码
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
List<Role> roles = roleMapper.findRoleByAnnotation(roleName, note);

利用@Param的形式来传递参数使用得非常多,利用这种方式,可以不在xml中指定parameterType属性,但是如果参数的数量过多,那么这种方式就不太方便了,利用java bean来传递参数的形式可以解决这个问题。

3,利用java bean

//首先定义一个参数的POJO
public class RoleParams{
    private String roleName;
    private String note;
}

// Dao层接口
public List<Role> findRoleByBean(RoleParams roleParams);

// XML文件
<select id="findRoleByMap" parameterType="RoleParams类的全限定名" resultType="role">
    select id, role_name as roleName, note 
    from t_role
    where role_name like concat('%', #{roleName}, '%')
    and note like concat('%', #{note}, '%')
</select>

// 测试代码
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
RoleParams roleParams = new RoleParams();
roleParams.setRoleName("1");
roleParams.setNote("1");
List<Role> roles = roleMapper.findRoleByBean(parameterMap);

4,以上三种方式其实可以混合使用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值