mapper动态代理和传递多参数

6 篇文章 0 订阅

实现动态代理

优点

开发者只需声明mapper接口(也就是dao接口),无需声明接口的实现类,而由mybatis框架创建接口的代理对象,就和实现类类似。

规范

  • 映射文件mapper.xml和接口名称一致
  • 映射文件的namespace是接口的全路径
  • 映射文件的sql statement的id是接口的方法名称
  • 映射文件的输入参数类型和接口方法的参数类型一致
  • 映射文件的输出结果类型和接口方法的返回类型一致

mapper动态代理的实现方式.jpg

mybatis.xml加载映射文件

    <mappers>
        <!--<mapper resource="UsersMapper.xml"></mapper>-->
        <!--批量加载映射文件-->
        <package name="com.me.mapper"/>
    </mappers>

接口:UsersMapper.class

import com.me.pojo.Users;

public interface UsersMapper {
    public Users selectById(int id);
}

mapper文件:UsersMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.me.mapper.UsersMapper">
    <select id="selectById" parameterType="int" resultType="Users">
        select * from users where id=#{id}
    </select>
</mapper>

测试类:MapperTest

import com.me.mapper.UsersMapper;
import com.me.pojo.Users;
import com.me.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MapperTest {
    @Test
    public void test(){
        SqlSession sqlSession=MybatisUtils.getSqlSessionFactory().openSession();
        UsersMapper usersMapper=sqlSession.getMapper(UsersMapper.class);
        Users user =usersMapper.selectById(1);
        sqlSession.close();
    }
}

根据map查询

参数是hashmap。

接口

public List<Users> selectByMap(Map<String,Object> map);

mapper

  • 注意接收的第二个参数,如果写成’%#{addr}%‘无法获取;如果写成’${value}%'也无法获取,因为不是简单类型。
  • “#{?}”中要和传递过来map的key一致。
<select id="selectByMap" parameterType="map" resultType="Users">
        select * from users where sex=#{sex} and address like '${addr}%'
</select>

测试类

Map<String,Object> map=new HashMap<String,Object>();
map.put("sex","男");
map.put("addr","北");
List<Users> usersList=usersMapper.selectByMap(map);

传递多参数

传递多参数有两种方式。

  • 方法一

接口

@Param()就相当于将参数封装到map中去

public List<Users> selectByParams(@Param("sex") String sex, @Param("addr") String addr);

mapper

传递多参数时无需配置参数类型

<select id="selectByParams" resultType="Users">
        select * from users where sex=#{sex} and address like '${addr}%'
</select>

测试类

List<Users> usersList=usersMapper.selectByParams("男","北");
  • 方法二

接口

public List<Users> selectByParams2( String sex, String addr);

mapper

第二个参数如果写成’%${1}%'无法获取。

<select id="selectByParams2" resultType="Users">
    select * from users where sex=#{0} and address like #{1}
</select>

测试类

List<Users> usersList=usersMapper.selectByParams2("男","%济%");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值