MyBatis傳遞多個參數(shù)方式
MyBatis是一款優(yōu)秀的ORM框架。
使用MyBatis進(jìn)行開發(fā)時經(jīng)常需要往方法中傳遞多個參數(shù),下面將介紹幾種MyBatis傳遞多個參數(shù)的方法。
【示例】
根據(jù)用戶賬號和用戶密碼,獲取用戶信息。
(1)在MySQL數(shù)據(jù)庫中創(chuàng)建用戶信息表(tb_user),并添加數(shù)據(jù)。
-- 創(chuàng)建“用戶信息”數(shù)據(jù)表
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 = '用戶信息表';
-- 添加數(shù)據(jù)
INSERT INTO tb_user(user_account,user_password,blog_url,remark) VALUES('pan_junbiao的博客','123456','https://blog.csdn.net/pan_junbiao','您好,歡迎訪問 pan_junbiao的博客');(2)創(chuàng)建用戶信息持久化類(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)開啟駝峰命名規(guī)則。
實例中使用了MyBatis駝峰命名規(guī)則。
需要在MyBatis的全局配置文件SqlMapConfig.xml(mybatis-config.xml)中,設(shè)置開啟駝峰命名規(guī)則配置。
<!-- 開啟自動駝峰命名規(guī)則(camel case)映射 --> <setting name="mapUnderscoreToCamelCase" value="true"/>
方法一:順序傳參法
創(chuàng)建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">
<!-- 根據(jù)用戶賬號和用戶密碼,獲取用戶信息 -->
<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}... 作為占位符,數(shù)字代表傳入?yún)?shù)的順序。
注意:在Mybatis3.4.2或之前的版本中使用:#{0}、#{1}... 作為占位符,但在新版本的MyBatis中,這種方式已經(jīng)過時了,會提示錯誤:
org.apache.ibatis.binding.BindingException: Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]
創(chuàng)建用戶信息Mapper動態(tài)代理接口。
package com.pjb.mybatis.mapper;
import com.pjb.mybatis.po.User;
/**
* 用戶信息Mapper動態(tài)代理接口
* @author pan_junbiao
**/
public interface UserMapper
{
public User getUser(String account,String password);
}編寫執(zhí)行方法。
/**
* MyBatis傳遞多個參數(shù)
* @author pan_junbiao
*/
@Test
public void getUser()
{
DataConnection dataConnection = new DataConnection();
SqlSession sqlSession = dataConnection.getSqlSession();
//獲取Mapper代理
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//執(zhí)行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();
}執(zhí)行結(jié)果:

方法二:@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>#{}里面的名稱對應(yīng)的是注解@Param括號里面修飾的名稱。
這種方法在參數(shù)不多的情況還是比較直觀的,推薦使用。
方法三: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>調(diào)用方法:
//獲取Mapper代理
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//查詢參數(shù)
Map params = new HashMap();
params.put("userAccount","pan_junbiao的博客");
params.put("userPassword","123456");
//執(zhí)行Mapper代理對象的查詢方法
User user = userMapper.getUser(params);#{}里面的名稱對應(yīng)的是Map里面的key名稱。
這種方法適合傳遞多個參數(shù),且參數(shù)易變能靈活傳遞的情況。
方法四:JavaBean傳參法(推薦)
創(chuàng)建用戶信息參數(shù)類(UserParam.java)。
package com.pjb.mybatis.po;
/**
* 用戶信息參數(shù)類
* @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>調(diào)用方法:
//獲取Mapper代理
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//查詢參數(shù)
UserParam userParam = new UserParam();
userParam.setUserAccount("pan_junbiao的博客");
userParam.setUserPassword("123456");
//執(zhí)行Mapper代理對象的查詢方法
User user = userMapper.getUser(userParam);#{}里面的名稱對應(yīng)的是UserParam類里面的成員屬性。
這種方法很直觀,需要建一個實體類,推薦使用。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot整合Dubbo教程之項目創(chuàng)建和環(huán)境搭建
本篇文章主要介紹了Springboot整合Dubbo教程之項目創(chuàng)建和環(huán)境搭建,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
淺談Spring與SpringMVC父子容器的關(guān)系與初始化
這篇文章主要介紹了淺談Spring與SpringMVC父子容器的關(guān)系與初始化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Java解決No enclosing instance of type PrintListFromTailToHead
這篇文章主要介紹了Java解決No enclosing instance of type PrintListFromTailToHead is accessible問題的兩種方案的相關(guān)資料,需要的朋友可以參考下2016-07-07
GC算法實現(xiàn)篇之并發(fā)標(biāo)記清除
這篇文章主要為大家介紹了GC算法實現(xiàn)篇之并發(fā)-標(biāo)記-清除,?CMS垃圾收集器在減少停頓時間上做了很多給力的工作,?大量的并發(fā)線程執(zhí)行的工作并不需要暫停應(yīng)用線程2022-01-01

