mybatis中多个参数传递的问题

对于接口中传入参数有以下几种方式:

  • 传递一个参数
    接口
    //根据用户id查询
    Account selectById(Integer aid);

接口xml

    <!--根据id查询-->
    <select id="selectById" resultType="Account">
        select * from account where aid=#{aid}
    </select>

测试代码

 @Test
    public void selectById(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //动态创建接口的实现类
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        Account account = mapper.selectById(1);
        System.out.println(JSON.toJSONString(account,true));
    }

测试结果

==>  Preparing: select * from account where aid=? 
==> Parameters: 1(Integer)
<==    Columns: aid, aname, alias_name, age
<==        Row: 1, 李瑞, 瑞瑞, 18
<==      Total: 1

接口

//使用这种方式必须遵守约定  AccountMapper.xml中#{para1},#{param2}
    Account selectByName(String name,String alias);

接口xml

<!--两个参数查询使用方式: aname=#{param1} and alias_name=#{param2}-->
    <select id="selectByName" resultType="Account">
        select * from account where aname=#{param1} and alias_name=#{param2}
    </select>

测试代码

 @Test
    public void selectByName() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //动态创建接口的实现类
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        Account account = mapper.selectByName("李杰","杰伦");
        System.out.println(JSON.toJSONString(account, true));
    }

测试结果

==>  Preparing: select * from account where aname=? and alias_name=? 
==> Parameters: 李杰(String), 杰伦(String)
<==    Columns: aid, aname, alias_name, age
<==        Row: 4, 李杰, 杰伦, 21
<==      Total: 1
  • 两个参数使用@Param
    接口
 //使用注解解决两个参数的问题
 Account selectByName2(@Param("aname") String name,@Param("alias_name") String alias);

接口xml

 <!--两个参数查询使用方式:@Param-->
    <select id="selectByName2" resultType="Account">
        select * from account where aname=#{aname} and alias_name=#{alias_name}
    </select>

测试代码

    @Test
    public void selectByName2() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //动态创建接口的实现类
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        Account account = mapper.selectByName2("李瑞", "瑞瑞");
        System.out.println(JSON.toJSONString(account, true));
    }

测试结果

==>  Preparing: select * from account where aname=? and alias_name=? 
==> Parameters: 李瑞(String), 瑞瑞(String)
<==    Columns: aid, aname, alias_name, age
<==        Row: 1, 李瑞, 瑞瑞, 18
<==      Total: 1
  • Map方式处理参数过多问题
    接口
    //使用Map方式处理参数过多的问题
    Account selectByName3(Map<String,Object> map);

接口xml

    <!-- 使用map解决参数过多的问题-->
    <!-- #{}花括号里面的值要和map.put中key一一对应-->
    <select id="selectByName3" resultType="Account">
        select * from account where aname=#{aname} and alias_name=#{alias_name}
    </select>

测试代码

 @Test
    public void selectByName3() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //动态创建接口的实现类
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("aname","李华");
        map.put("alias_name","华华");
        Account account = mapper.selectByName3(map);
        System.out.println(JSON.toJSONString(account, true));
    }

测试结果

==>  Preparing: select * from account where aname=? and alias_name=? 
==> Parameters: 李华(String), 华华(String)
<==    Columns: aid, aname, alias_name, age
<==        Row: 2, 李华, 华华, 27
<==      Total: 1
  • 对象的方式解决参数过多问题
    接口
  //使用参数为对象的方式解决参数过多问题
    Account selectByName4(Account account);

接口xml

    <select id="selectByName4" resultType="Account">
        select * from account where aname=#{aname} and alias_name=#{aliasname}
    </select>

测试代码

    @Test
    public void selectByName4() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //动态创建接口的实现类
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        Account a = new Account();
        a.setAname("李智");
        a.setAliasname("智智");
        Account account = mapper.selectByName4(a);
        System.out.println(JSON.toJSONString(account,true));
    }

测试结果

==>  Preparing: select * from account where aname=? and alias_name=? 
==> Parameters: 李智(String), 智智(String)
<==    Columns: aid, aname, alias_name, age
<==        Row: 3, 李智,
  • 实体类中封装了多个对象
    实体类
public class QueryVo {
    private Account account;
    //等等
    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }
}

接口

   //现在有一种情况 如果要查询的是多张表那么就是需要将多张表的实体类封装到一个新的实体类中
    Account selectByName5(QueryVo queryVo);

接口xml

 <!--使用QueryVo 封装实体类-->
    <select id="selectByName5" resultType="Account">
        select * from account where aname=#{account.aname} and alias_name=#{account.aliasname}
    </select>

测试代码

 @Test
    public void selectByName5() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //动态创建接口的实现类
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        QueryVo queryVo = new QueryVo();
        Account a = new Account();
        a.setAname("李瑞");
        a.setAliasname("瑞瑞");
        queryVo.setAccount(a);
        Account account = mapper.selectByName5(queryVo);
        System.out.println(JSON.toJSONString(account,true));
    }

测试结果

==>  Preparing: select * from account where aname=? and alias_name=? 
==> Parameters: 李瑞(String), 瑞瑞(String)
<==    Columns: aid, aname, alias_name, age
<==        Row: 1, 李瑞, 瑞瑞, 18
<==      Total: 1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个优秀的Java持久化框架,它可以轻松地将数据库表和Java对象之间进行映射。在开发过程,我们通常需要向MyBatis的SQL语句传递多个参数。下面我们来介绍MyBatis传递多个参数的方法。 1. 使用Map传递参数。 通过使用Map来传递多个参数,可以将多个参数打包到一个Map对象。在MyBatis的Mapper.xml文件,使用#{key}来引用Map的参数值。例如,如果我们要传递两个参数,一个是username,一个是age,可以使用如下的方式: ``` <select id="getUser" parameterType="map" resultType="User"> SELECT * FROM user WHERE username = #{username} AND age = #{age} </select> ``` 在Java使用Map传递参数的例子如下: ``` Map<String, Object> parameterMap = new HashMap<>(); parameterMap.put("username", "张三"); parameterMap.put("age", 18); User user = sqlSession.selectOne("getUser", parameterMap); ``` 2. 使用@Param注解传递参数。 @Param注解可以用来指定参数的名称,从而在Mapper.xml文件和Java使用相同的参数。在Mapper.xml文件,使用#{参数名}来引用参数值。例如,如果我们要传递两个参数,一个是username,一个是age,可以使用如下的方式: ``` <select id="getUser" parameterType="map" resultType="User"> SELECT * FROM user WHERE username = #{username} AND age = #{age} </select> ``` 在Java使用@Param注解传递参数的例子如下: ``` public User getUser(@Param("username") String username, @Param("age") int age); ``` 3. 使用JavaBean传递参数。 在Java,我们可以使用JavaBean来封装多个参数,然后在Mapper.xml文件使用#{属性名}来引用JavaBean属性的值。例如,如果我们要传递两个参数,一个是username,一个是age,可以使用如下的JavaBean: ``` public class UserInfo { private String username; private int age; // getter/setter } ``` 在Mapper.xml文件,可以如下使用JavaBean传递参数: ``` <select id="getUser" parameterType="UserInfo" resultType="User"> SELECT * FROM user WHERE username = #{username} AND age = #{age} </select> ``` 在Java使用JavaBean传递参数的例子如下: ``` UserInfo userInfo = new UserInfo(); userInfo.setUsername("张三"); userInfo.setAge(18); User user = sqlSession.selectOne("getUser", userInfo); ``` 总之,MyBatis传递多个参数的方法有很多,主要是使用Map、@Param注解和JavaBean来封装参数。在使用的时候,我们需要根据具体情况,选择最适合的方法来传递参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值