MyBatis傳遞多個(gè)參數(shù)方式
MyBatis是一款優(yōu)秀的ORM框架。
使用MyBatis進(jìn)行開發(fā)時(shí)經(jīng)常需要往方法中傳遞多個(gè)參數(shù),下面將介紹幾種MyBatis傳遞多個(gè)參數(shù)的方法。
【示例】
根據(jù)用戶賬號(hào)和用戶密碼,獲取用戶信息。
(1)在MySQL數(shù)據(jù)庫(kù)中創(chuàng)建用戶信息表(tb_user),并添加數(shù)據(jù)。
-- 創(chuàng)建“用戶信息”數(shù)據(jù)表
CREATE TABLE IF NOT EXISTS tb_user
(
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶編號(hào)',
user_account VARCHAR(50) NOT NULL COMMENT '用戶賬號(hào)',
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; //用戶編號(hào)
private String userAccount; //用戶賬號(hào)
private String userPassword; //用戶密碼
private String blogUrl; //博客地址
private String remark; //備注
//省略getter與setter方法...
}(3)開啟駝峰命名規(guī)則。
實(shí)例中使用了MyBatis駝峰命名規(guī)則。
需要在MyBatis的全局配置文件SqlMapConfig.xml(mybatis-config.xml)中,設(shè)置開啟駝峰命名規(guī)則配置。
<!-- 開啟自動(dòng)駝峰命名規(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ù)用戶賬號(hào)和用戶密碼,獲取用戶信息 -->
<select id="getUser" resultType="com.pjb.mybatis.po.User">
SELECT * FROM tb_user
WHERE user_account = #{arg0}
AND user_password = #{arg1}
</select>
</mapper>說(shuō)明:順序傳遞參法使用:#{arg0}、#{arg1}... 作為占位符,數(shù)字代表傳入?yún)?shù)的順序。
注意:在Mybatis3.4.2或之前的版本中使用:#{0}、#{1}... 作為占位符,但在新版本的MyBatis中,這種方式已經(jīng)過(guò)時(shí)了,會(huì)提示錯(cuò)誤:
org.apache.ibatis.binding.BindingException: Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]
創(chuàng)建用戶信息Mapper動(dòng)態(tài)代理接口。
package com.pjb.mybatis.mapper;
import com.pjb.mybatis.po.User;
/**
* 用戶信息Mapper動(dòng)態(tài)代理接口
* @author pan_junbiao
**/
public interface UserMapper
{
public User getUser(String account,String password);
}編寫執(zhí)行方法。
/**
* MyBatis傳遞多個(gè)參數(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代理對(duì)象的查詢方法
User user = userMapper.getUser("pan_junbiao的博客","123456");
if(user!=null)
{
System.out.println("用戶編號(hào):" + user.getId());
System.out.println("用戶賬號(hào):" + 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>#{}里面的名稱對(duì)應(yīng)的是注解@Param括號(hào)里面修飾的名稱。
這種方法在參數(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代理對(duì)象的查詢方法
User user = userMapper.getUser(params);#{}里面的名稱對(duì)應(yīng)的是Map里面的key名稱。
這種方法適合傳遞多個(gè)參數(shù),且參數(shù)易變能靈活傳遞的情況。
方法四:JavaBean傳參法(推薦)
創(chuàng)建用戶信息參數(shù)類(UserParam.java)。
package com.pjb.mybatis.po;
/**
* 用戶信息參數(shù)類
* @author pan_junbiao
**/
public class UserParam
{
private String userAccount; //用戶賬號(hào)
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代理對(duì)象的查詢方法
User user = userMapper.getUser(userParam);#{}里面的名稱對(duì)應(yīng)的是UserParam類里面的成員屬性。
這種方法很直觀,需要建一個(gè)實(shí)體類,推薦使用。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot整合Dubbo教程之項(xiàng)目創(chuàng)建和環(huán)境搭建
本篇文章主要介紹了Springboot整合Dubbo教程之項(xiàng)目創(chuàng)建和環(huán)境搭建,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
Java實(shí)現(xiàn)統(tǒng)計(jì)文檔中關(guān)鍵字出現(xiàn)的次數(shù)
這篇文章主要為大家分享了利用Java語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)關(guān)鍵字在文檔中出現(xiàn)的次數(shù)的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-05-05
深入解析Java的設(shè)計(jì)模式編程中單例模式的使用
這篇文章主要介紹了深入解析Java的設(shè)計(jì)模式編程中單例模式的使用,一般來(lái)說(shuō)將單例模式分為餓漢式單例和懶漢式單例,需要的朋友可以參考下2016-02-02
ExpressionUtil工具類的應(yīng)用實(shí)例
這篇文章主要給大家介紹了關(guān)于ExpressionUtil工具類的應(yīng)用實(shí)例,常用的工具類有很多,這是其中一個(gè),了解基本的API可以幫助我們更好的開發(fā),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
淺談Spring與SpringMVC父子容器的關(guān)系與初始化
這篇文章主要介紹了淺談Spring與SpringMVC父子容器的關(guān)系與初始化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧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算法實(shí)現(xiàn)篇之并發(fā)標(biāo)記清除
這篇文章主要為大家介紹了GC算法實(shí)現(xiàn)篇之并發(fā)-標(biāo)記-清除,?CMS垃圾收集器在減少停頓時(shí)間上做了很多給力的工作,?大量的并發(fā)線程執(zhí)行的工作并不需要暫停應(yīng)用線程2022-01-01

