MyBatis傳遞多個參數(shù)方式
MyBatis是一款優(yōu)秀的ORM框架。
使用MyBatis進行開發(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-12Java實現(xiàn)統(tǒng)計文檔中關(guān)鍵字出現(xiàn)的次數(shù)
這篇文章主要為大家分享了利用Java語言實現(xiàn)統(tǒng)計關(guān)鍵字在文檔中出現(xiàn)的次數(shù)的方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2022-05-05淺談Spring與SpringMVC父子容器的關(guān)系與初始化
這篇文章主要介紹了淺談Spring與SpringMVC父子容器的關(guān)系與初始化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Java解決No enclosing instance of type PrintListFromTailToHead
這篇文章主要介紹了Java解決No enclosing instance of type PrintListFromTailToHead is accessible問題的兩種方案的相關(guān)資料,需要的朋友可以參考下2016-07-07