MyBatis中如何传递多个参数呢?
下文笔者讲述Mybatis中传递多个参数的方法分享,如下所示
Mybatis简介
MyBatis是Java开发中使用最多的ORM框架
使用MyBatis进行开发时
需向方法中传递多个参数
下面将介绍几种MyBatis传递多个参数的方法
Mybatis传递多个参数的实现思路
方式1:
使用顺序法传递参数
方式2:
使用@Param注解传递参数---笔者强烈推荐此方法
方式3:
Map传参法
方式4:
JavaBean传参法
例:
使用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('java265的博客','123456','https://www.java265.com','您好,欢迎访问 java265的博客');
2.创建用户信息持久化类(User.java)。
package com.java265.mybatis.po;
/**
* 用户信息的持久化类
**/
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.java265.mybatis.mapper.UserMapper">
<!-- 根据用户账号和用户密码,获取用户信息 -->
<select id="getUser" resultType="com.java265.mybatis.po.User">
SELECT * FROM tb_user
WHERE user_account = #{arg0}
AND user_password = #{arg1}
</select>
</mapper>
注意事项:
1.顺序传递参法使用:#{arg0}、#{arg1}... 作为占位符
数字代表传入参数的顺序。
2.在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.java265.mybatis.mapper;
import com.java265.mybatis.po.User;
/**
* 用户信息Mapper动态代理接口
**/
public interface UserMapper
{
public User getUser(String account,String password);
}
编写执行方法。
/**
* MyBatis传递多个参数
*
*/
@Test
public void getUser()
{
DataConnection dataConnection = new DataConnection();
SqlSession sqlSession = dataConnection.getSqlSession();
//获取Mapper代理
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//执行Mapper代理对象的查询方法
User user = userMapper.getUser("java265的博客","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.java265.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.java265.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","java265的博客");
params.put("userPassword","123456");
//执行Mapper代理对象的查询方法
User user = userMapper.getUser(params);
#{}里面的名称对应的是Map里面的key名称。
JavaBean传参法(推荐)
创建用户信息参数类(UserParam.java)。
package com.java265.mybatis.po;
/**
* 用户信息参数类
*
**/
public class UserParam
{
private String userAccount; //用户账号
private String userPassword; //用户密码
//省略getter与setter方法...
}
public User getUser(UserParam userParam);
<select id="getUser" parameterType="com.java265.mybatis.po.UserParam" resultType="com.java265.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("java265的博客");
userParam.setUserPassword("123456");
//执行Mapper代理对象的查询方法
User user = userMapper.getUser(userParam);
#{}里面的名称对应的是UserParam类里面的成员属性。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


