MyBatis传递多个参数方式

 更新时间:2024年02月01日 08:43:16   作者:pan_junbiao  
这篇文章主要介绍了MyBatis传递多个参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

MyBatis是一款优秀的ORM框架。

使用MyBatis进行开发时经常需要往方法中传递多个参数,下面将介绍几种MyBatis传递多个参数的方法。

【示例】

根据用户账号和用户密码,获取用户信息。

(1)在MySQL数据库中创建用户信息表(tb_user),并添加数据。

-- 创建“用户信息”数据表
CREATE TABLE IF NOT EXISTS tb_user
( 
	id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
	user_account VARCHAR(50) NOT NULL COMMENT '用户账号',
	user_password VARCHAR(50) NOT NULL COMMENT '用户密码',
	blog_url VARCHAR(50) NOT NULL COMMENT '博客地址',
	remark VARCHAR(50) COMMENT '备注'
) COMMENT = '用户信息表';
 
-- 添加数据
INSERT INTO tb_user(user_account,user_password,blog_url,remark) VALUES('pan_junbiao的博客','123456','https://blog.csdn.net/pan_junbiao','您好,欢迎访问 pan_junbiao的博客');

(2)创建用户信息持久化类(User.java)。

package com.pjb.mybatis.po;
 
/**
 * 用户信息的持久化类
 * @author pan_junbiao
 **/
public class User
{
    private int id; //用户编号
    private String userAccount; //用户账号
    private String userPassword; //用户密码
    private String blogUrl; //博客地址
    private String remark; //备注
 
    //省略getter与setter方法...
}

(3)开启驼峰命名规则。

实例中使用了MyBatis驼峰命名规则。

需要在MyBatis的全局配置文件SqlMapConfig.xml(mybatis-config.xml)中,设置开启驼峰命名规则配置。

<!-- 开启自动驼峰命名规则(camel case)映射 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>

方法一:顺序传参法

创建SQL配置文件UserMapper.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.pjb.mybatis.mapper.UserMapper">
 
    <!-- 根据用户账号和用户密码,获取用户信息 -->
    <select id="getUser" resultType="com.pjb.mybatis.po.User">
        SELECT * FROM tb_user
        WHERE user_account = #{arg0}
        AND user_password = #{arg1}
    </select>
 
</mapper>

说明:顺序传递参法使用:#{arg0}、#{arg1}... 作为占位符,数字代表传入参数的顺序。

注意:在Mybatis3.4.2或之前的版本中使用:#{0}、#{1}... 作为占位符,但在新版本的MyBatis中,这种方式已经过时了,会提示错误:

org.apache.ibatis.binding.BindingException: Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]

创建用户信息Mapper动态代理接口。

package com.pjb.mybatis.mapper;
 
import com.pjb.mybatis.po.User;
 
/**
 * 用户信息Mapper动态代理接口
 * @author pan_junbiao
 **/
public interface UserMapper
{
    public User getUser(String account,String password);
}

编写执行方法。

/**
 * MyBatis传递多个参数
 * @author pan_junbiao
 */
@Test
public void getUser()
{
    DataConnection dataConnection = new DataConnection();
    SqlSession sqlSession = dataConnection.getSqlSession();
    //获取Mapper代理
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    //执行Mapper代理对象的查询方法
    User user = userMapper.getUser("pan_junbiao的博客","123456");
    if(user!=null)
    {
        System.out.println("用户编号:" + user.getId());
        System.out.println("用户账号:" + user.getUserAccount());
        System.out.println("用户密码:" + user.getUserPassword());
        System.out.println("博客地址:" + user.getBlogUrl());
        System.out.println("备注信息:" + user.getRemark());
 
    }
    sqlSession.close();
}

执行结果:

方法二:@Param注解传参法(推荐)

public User getUser(@Param("userAccount") String account,@Param("userPassword") String password);
<select id="getUser" resultType="com.pjb.mybatis.po.User">
    SELECT * FROM tb_user
    WHERE user_account = #{userAccount}
    AND user_password = #{userPassword}
</select>

#{}里面的名称对应的是注解@Param括号里面修饰的名称。

这种方法在参数不多的情况还是比较直观的,推荐使用。

方法三:Map传参法

public User getUser(Map<String, Object> params);
<select id="getUser" parameterType="java.util.Map" resultType="com.pjb.mybatis.po.User">
    SELECT * FROM tb_user
    WHERE user_account = #{userAccount}
    AND user_password = #{userPassword}
</select>

调用方法:

//获取Mapper代理
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//查询参数
Map params = new HashMap();
params.put("userAccount","pan_junbiao的博客");
params.put("userPassword","123456");
//执行Mapper代理对象的查询方法
User user = userMapper.getUser(params);

#{}里面的名称对应的是Map里面的key名称。

这种方法适合传递多个参数,且参数易变能灵活传递的情况。

方法四:JavaBean传参法(推荐)

创建用户信息参数类(UserParam.java)。

package com.pjb.mybatis.po;
 
/**
 * 用户信息参数类
 * @author pan_junbiao
 **/
public class UserParam
{
    private String userAccount; //用户账号
    private String userPassword; //用户密码
 
    //省略getter与setter方法...
}
public User getUser(UserParam userParam);
<select id="getUser" parameterType="com.pjb.mybatis.po.UserParam" resultType="com.pjb.mybatis.po.User">
    SELECT * FROM tb_user
    WHERE user_account = #{userAccount}
    AND user_password = #{userPassword}
</select>

调用方法:

//获取Mapper代理
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//查询参数
UserParam userParam = new UserParam();
userParam.setUserAccount("pan_junbiao的博客");
userParam.setUserPassword("123456");
//执行Mapper代理对象的查询方法
User user = userMapper.getUser(userParam);

#{}里面的名称对应的是UserParam类里面的成员属性。

这种方法很直观,需要建一个实体类,推荐使用。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • IOC 容器启动和Bean实例化两个阶段详解

    IOC 容器启动和Bean实例化两个阶段详解

    这篇文章主要为大家介绍了IOC 容器启动和Bean实例化两个阶段详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • java常用工具类之数据库连接类(可以连接多种数据库)

    java常用工具类之数据库连接类(可以连接多种数据库)

    这篇文章主要介绍了java常用工具类之数据库连接类,可以连接多种数据库,代码中包含详细注释,需要的朋友可以参考下
    2014-07-07
  • MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询

    MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询

    本文主要介绍了MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • Java向上转型和向下转型的区别说明

    Java向上转型和向下转型的区别说明

    这篇文章主要介绍了Java向上转型和向下转型的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java使用OpenFeign管理多个第三方服务调用

    Java使用OpenFeign管理多个第三方服务调用

    最近开发了一个统一调度类的项目,需要依赖多个第三方服务,这些服务都提供了HTTP接口供我调用。感兴趣的可以了解一下
    2021-06-06
  • IDEA关闭git管理,文件变成红色解决方案

    IDEA关闭git管理,文件变成红色解决方案

    在软件开发中,当一个文件夹内的Java项目启用Git版本控制,通常会导致该文件夹下所有项目同步开启Git,这种做法有助于保持项目的一致性和可追溯性,但也可能带来管理上的复杂性,如果需要解除某个项目的Git管理,可以通过IDE的设置选项进行调整
    2024-10-10
  • Jmeter多用户并发压力测试过程图解

    Jmeter多用户并发压力测试过程图解

    这篇文章主要介绍了Jmeter多用户并发压力测试过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Mybatis延迟加载和缓存深入讲解

    Mybatis延迟加载和缓存深入讲解

    这篇文章主要给大家介绍了关于Mybatis延迟加载和缓存的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • java保证一个方法只能执行一次的问题

    java保证一个方法只能执行一次的问题

    这篇文章主要介绍了java保证一个方法只能执行一次的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 浅谈SpringCloud之zuul源码解析

    浅谈SpringCloud之zuul源码解析

    这篇文章主要介绍了浅谈SpringCloud之zuul源码解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论