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>
說明:順序傳遞參法使用:#{arg0}、#{arg1}... 作為占位符,數(shù)字代表傳入?yún)?shù)的順序。
注意:在Mybatis3.4.2或之前的版本中使用:#{0}、#{1}... 作為占位符,但在新版本的MyBatis中,這種方式已經(jīng)過時(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è)參考。一起跟隨小編過來看看吧2017-12-12Java實(shí)現(xiàn)統(tǒng)計(jì)文檔中關(guān)鍵字出現(xiàn)的次數(shù)
這篇文章主要為大家分享了利用Java語言實(shí)現(xiàn)統(tǒng)計(jì)關(guān)鍵字在文檔中出現(xiàn)的次數(shù)的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-05-05深入解析Java的設(shè)計(jì)模式編程中單例模式的使用
這篇文章主要介紹了深入解析Java的設(shè)計(jì)模式編程中單例模式的使用,一般來說將單例模式分為餓漢式單例和懶漢式單例,需要的朋友可以參考下2016-02-02ExpressionUtil工具類的應(yīng)用實(shí)例
這篇文章主要給大家介紹了關(guān)于ExpressionUtil工具類的應(yīng)用實(shí)例,常用的工具類有很多,這是其中一個(gè),了解基本的API可以幫助我們更好的開發(fā),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04淺談Spring與SpringMVC父子容器的關(guān)系與初始化
這篇文章主要介紹了淺談Spring與SpringMVC父子容器的關(guān)系與初始化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08Java解決No enclosing instance of type PrintListFromTailToHead
這篇文章主要介紹了Java解決No enclosing instance of type PrintListFromTailToHead is accessible問題的兩種方案的相關(guān)資料,需要的朋友可以參考下2016-07-07GC算法實(shí)現(xiàn)篇之并發(fā)標(biāo)記清除
這篇文章主要為大家介紹了GC算法實(shí)現(xiàn)篇之并發(fā)-標(biāo)記-清除,?CMS垃圾收集器在減少停頓時(shí)間上做了很多給力的工作,?大量的并發(fā)線程執(zhí)行的工作并不需要暫停應(yīng)用線程2022-01-01