最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Mybatis的mapper接口函數(shù)重載問題

 更新時間:2022年02月09日 09:19:37   作者:qq_37121463  
這篇文章主要介紹了關(guān)于Mybatis的mapper接口函數(shù)重載問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Mybatis的接口函數(shù)能不能進行重載?

  • mybatis版本:3.4x
  • java版本:java 8

語法層面

1、接口的方法可以進行重載,因為 java 語法可以讓接口函數(shù)進行重載。

Mybatis框架方面

1、結(jié)論:可以有條件的進行重載。

2、為什么會有這個問題?:mybatis里面將接口里面的方法名稱和配置文件里面的id屬性進行唯一配對,在同一個命名空間下只能有一個id,那么所有函數(shù)名稱相同的重載函數(shù)都會被綁定到一個id上,所以,如果要實現(xiàn)函數(shù)的重載,必須讓一個SQL語句去適應(yīng)多個函數(shù)的參數(shù),如果是單純的重載是肯定不行的(重載函數(shù)的定義就是參數(shù)相關(guān)),但是得益于mybatis的多種傳參方式和隱性的分頁功能,可以在接口里面進行函數(shù)重載,但是還是需要將所有的重載函數(shù)適配到同一個id的SQL上面去,仍然有很大的局限性,并不是可以隨意的進行重載。

測試

1、數(shù)據(jù)庫環(huán)境

DROP TABLE IF EXISTS sys_user;
CREATE TABLE sys_user(
? id BIGINT NOT NULL AUTO_INCREMENT COMMENT '用戶的ID',
? user_name VARCHAR(50) COMMENT '用戶名稱',
? user_password VARCHAR(50) COMMENT '密碼',
? user_email VARCHAR(50) COMMENT '郵箱',
? user_info TEXT COMMENT '簡介',
? head_img BLOB COMMENT '頭像',
? create_time DATETIME COMMENT '創(chuàng)建時間',
? PRIMARY KEY (id)
)DEFAULT CHARSET utf8;
ALTER TABLE sys_user COMMENT '用戶表';
INSERT INTO sys_user VALUES ('1','admin','123456','admin@mybatis.tk','管理員',null,'2016-04-01 17:00:58');
INSERT INTO sys_user VALUES ('1001','test','123456','test@mybatis.tk','測試用戶',null,'2016-04-01 17:01:52');

2、實體類

public class SysUser {
? ? private Long id;
? ? private String userName;
? ? private String userPassword;
? ? private String userEmail;
? ? private String userInfo;
? ? private byte[] headImg;
? ? private Date createTime;
? ? public SysUser(){
? ? }
? ? /**setter and getter*/
}

3、測試

3.1、測試模板代碼

public class SysUserDaoTest {
? ? private static SqlSessionFactory sqlSessionFactory;
? ? private SqlSession sqlSession;
? ? @BeforeClass
? ? public static void beforeClass(){
? ? ? ? String resource = "plus/mybatis-config.xml";
? ? ? ? try{
? ? ? ? ? ? InputStream inputStream = Resources.getResourceAsStream(resource);
? ? ? ? ? ? sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
? ? ? ? }catch(IOException e){
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
? ? @Before
? ? public void before(){
? ? ? ? //事物手動提交
? ? ? ? sqlSession = sqlSessionFactory.openSession(false);
? ? }
? ? @After
? ? public void after(){
? ? ? ? //回滾事物
? ? ? ? sqlSession.rollback(true);
? ? ? ? //關(guān)閉會話
? ? ? ? sqlSession.close();
? ? }
}

3.2、測試場景一

重載實現(xiàn)分頁、參數(shù)類型轉(zhuǎn)換實現(xiàn)重載。

3.2.1、接口

public interface SysUserDao {
? ? SysUser selectById(Long id);
? ? List<SysUser> selectById(Long id,RowBounds rowBound);
?}

3.2.2、mapper配置文件

<!--
? ? id:注意事項:接口方法不能進行重載,在3.4版本后是錯的?。。。。?,因為至少可以分頁?。。?
? ? ? ? ? ? 1、接口中的所有重載方法對應(yīng)XML里面的同一個ID,但是3.4之后有一個分頁的插件,所以至少可以接受一個org.apache.ibatis.session.RowBounds的隱性參數(shù)。
? ? ? ? ? ? 2、雖然接口里面的方法可以進行重載,但是需要一個前提:不要指定 parameterType 屬性??!
? ? ? ? ? ? ? ? 接口方法如下:
? ? ? ? ? ? ? ? SysUser selectById(Long id);
? ? ? ? ? ? ? ? List<SysUser> selectById(Long id,RowBounds rowBound);
? ? ? ? ? ? ? ? SysUser selectById(String name);
? ? ? ? ? ? ? ? 測試代碼如下:
? ? ? ? ? ? ? ? SysUserDao sysUserDao = sqlSession.getMapper(SysUserDao.class);
? ? ? ? ? ? ? ? SysUser sysUser = sysUserDao.selectById(1L);
? ? ? ? ? ? ? ? Assert.assertEquals("admin",sysUser.getUserName());
? ? ? ? ? ? ? ? SysUser sysUser1 = sysUserDao.selectById("1");
? ? ? ? ? ? ? ? Assert.assertEquals("admin",sysUser1.getUserName());
? ? ? ? ? ? ? ? /*
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(Long)
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(String)
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? ?RowBounds rowBound = new RowBounds(0,2);
? ? ? ? ? ? ? ? List<SysUser> sysUsers = sysUserDao.selectById(1L,rowBound);
? ? ? ? ? ? ? ? Assert.assertEquals(1,sysUsers.size());
? ? ? ? ? ? ? ? /*
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(Long)
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? 事實證明,當不指定參數(shù)類型的時候(也僅僅當不指定參數(shù)類型的時候才可以,因為重載重載的是參數(shù)),是可以進行
? ? ? ? ? ? ? ? 接口方法重載的,因為mybatis的參數(shù)類型推斷會自動的轉(zhuǎn)換參數(shù)類型,比如:
? ? ? ? ? ? ? ? ? ? sysUserDao.selectById("楚云飛");
? ? ? ? ? ? ? ? 因為ID的類型是Long類型,所以數(shù)據(jù)類型的自動轉(zhuǎn)換失敗,但是是不會出現(xiàn)異常的,只是它選取出來的數(shù)據(jù)集為null,因為ID的類型是bigint,沒有bigint值為楚云飛,所以為null結(jié)果集。
? ? -->
? ? <select id="selectById" resultMap="sysUser" flushCache="true">
? ? ? ? SELECT * FROM sys_user WHERE id = #{id};
? ? </select>
? ? <resultMap id="sysUser" type="plus.pojo.SysUser">
? ? ? ? <id property="id" column="id"/>
? ? ? ? <result property="userName" column="user_name"/>
? ? ? ? <result property="userPassword" column="user_password"/>
? ? ? ? <result property="userEmail" column="user_email"/>
? ? ? ? <result property="userInfo" column="user_info"/>
? ? ? ? <result property="headImg" column="head_img" jdbcType="BLOB"/>
? ? ? ? <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
? ? </resultMap>

3.3、測試場景二

參數(shù)傳遞方式實現(xiàn)重載,map參數(shù)傳遞和固定參數(shù)名的參數(shù)傳遞方式

3.3.1、接口

public interface SysUserDao {
? ? SysUser selectByCondition(@Param("id")Long id,@Param("userName")String userName,@Param("userPassword")String userPassword);
? ? SysUser selectByCondition(Map params);
}

3.3.2、mapper配置文件

<!--
? ? 固定參數(shù)傳遞:
? ? ? ?函數(shù)接口:
? ? ? ? ? ?SysUser selectByCondition(@Param("id")Long id,@Param("userName")String userName,@Param("userPassword")String userPassword);
? ? ? ? ? ?SysUser selectByCondition(Map params);
? ? ? ?測試函數(shù):
? ? ? ? ? ? @Test
? ? ? ? ? ? public void selectByCondition(){
? ? ? ? ? ? ? ? SysUserDao sysUserDao = sqlSession.getMapper(SysUserDao.class);
? ? ? ? ? ? ? ? SysUser sysUser = sysUserDao.selectByCondition(1L,"admin","123456");
? ? ? ? ? ? ? ? Assert.assertEquals("admin@mybatis.tk",sysUser.getUserEmail());
? ? ? ? ? ? ? ? /*
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectByCondition - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ? AND user_name = ? AND user_password = ?;
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectByCondition - ==> Parameters: 1(Long), admin(String), 123456(String)
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectByCondition - <== ? ? ?Total: 1
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? Map<String,Object> params = new HashMap<String,Object>(3);
? ? ? ? ? ? ? ? //傳入的鍵值必須和SQL語句里面的以及重載函數(shù)的參數(shù)名稱相同才可以實現(xiàn)正確的重載,否則將重載出錯。
? ? ? ? ? ? ? ? params.put("id",1L);
? ? ? ? ? ? ? ? params.put("userName","admin");
? ? ? ? ? ? ? ? params.put("userPassword","123456");
? ? ? ? ? ? ? ? SysUser sysUser1 = sysUserDao.selectByCondition(params);
? ? ? ? ? ? ? ? /*
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectByCondition - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ? AND user_name = ? AND user_password = ?;
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectByCondition - ==> Parameters: 1(Long), admin(String), 123456(String)
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectByCondition - <== ? ? ?Total: 1
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? Assert.assertEquals("admin@mybatis.tk",sysUser1.getUserEmail());
? ? ? ? ? ? }
-->
? ? <select id="selectByCondition" resultMap="sysUser" flushCache="true">
? ? ? ? SELECT * FROM sys_user WHERE id = #{id} AND user_name = #{userName} AND user_password = #{userPassword};
? ? </select>

3.4、完整的測試代碼

package plus.dao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import org.junit.*;
import plus.pojo.SysUser;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SysUserDaoTest {
? ? private static SqlSessionFactory sqlSessionFactory;
? ? private SqlSession sqlSession;
? ? @BeforeClass
? ? public static void beforeClass(){
? ? ? ? String resource = "plus/mybatis-config.xml";
? ? ? ? try{
? ? ? ? ? ? InputStream inputStream = Resources.getResourceAsStream(resource);
? ? ? ? ? ? sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
? ? ? ? }catch(IOException e){
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
? ? @Before
? ? public void before(){
? ? ? ? //事物手動提交
? ? ? ? sqlSession = sqlSessionFactory.openSession(false);
? ? }
? ? @After
? ? public void after(){
? ? ? ? //回滾事物
? ? ? ? sqlSession.rollback(true);
? ? ? ? //關(guān)閉會話
? ? ? ? sqlSession.close();
? ? }
? ? @Test
? ? public void selectById(){
? ? ? ? SysUserDao sysUserDao = sqlSession.getMapper(SysUserDao.class);
? ? ? ? SysUser sysUser = sysUserDao.selectById(1L);
? ? ? ? Assert.assertEquals("admin",sysUser.getUserName());
? ? ? ? SysUser sysUser1 = sysUserDao.selectById("1");
? ? ? ? Assert.assertEquals("admin",sysUser1.getUserName());
? ? ? ? /*
? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(Long)
? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(String)
? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ?*/
? ? ? ? RowBounds rowBound = new RowBounds(0,2);
? ? ? ? List<SysUser> sysUsers = sysUserDao.selectById(1L,rowBound);
? ? ? ? Assert.assertEquals(1,sysUsers.size());
? ? ? ? /*
? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(Long)
? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ?*/
? ? }
? ? @Test
? ? public void selectByCondition(){
? ? ? ? SysUserDao sysUserDao = sqlSession.getMapper(SysUserDao.class);
? ? ? ? SysUser sysUser = sysUserDao.selectByCondition(1L,"admin","123456");
? ? ? ? Assert.assertEquals("admin@mybatis.tk",sysUser.getUserEmail());
? ? ? ? /*
? ? ? ? plus.dao.SysUserDao.selectByCondition - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ? AND user_name = ? AND user_password = ?;
? ? ? ? plus.dao.SysUserDao.selectByCondition - ==> Parameters: 1(Long), admin(String), 123456(String)
? ? ? ? plus.dao.SysUserDao.selectByCondition - <== ? ? ?Total: 1
? ? ? ? ?*/
? ? ? ? Map<String,Object> params = new HashMap<String,Object>(3);
? ? ? ? params.put("id",1L);
? ? ? ? params.put("userName","admin");
? ? ? ? params.put("userPassword","123456");
? ? ? ? SysUser sysUser1 = sysUserDao.selectByCondition(params);
? ? ? ? /*
? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(Long)
? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ?*/
? ? ? ? Assert.assertEquals("admin@mybatis.tk",sysUser1.getUserEmail());
? ? }
}

3.5、完整的mapper文件

<?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="plus.dao.SysUserDao">
? ? <!--
? ? id:當使用接口時,屬性值必須為接口里面的方法名稱,在同一個命名空間里面不重復(fù),否則將啟動報錯;
? ? ? ? 在任何情況下,id屬性不能出現(xiàn)英文句點 '.' (Caused by: org.apache.ibatis.builder.BuilderException: Dots are not allowed in element names, please remove it) ;
? ? ? ? 注意事項:接口方法不能進行重載,在3.4版本后是錯的?。。。。?,因為可以分頁?。?!
? ? ? ? ? ? 1、接口中的所有重載方法對應(yīng)XML里面的同一個ID,但是3.4之后有一個分頁的插件,所以可以接受一個org.apache.ibatis.session.RowBounds的隱性參數(shù)。
? ? ? ? ? ? 2、雖然接口里面的方法可以進行重載,但是如果要在運行的時候依然不報錯的話,需要一個前提:不要指定 parameterType 屬性!!
? ? ? ? ? ? ? ? 接口方法如下:
? ? ? ? ? ? ? ? SysUser selectById(Long id);
? ? ? ? ? ? ? ? List<SysUser> selectById(Long id,RowBounds rowBound);
? ? ? ? ? ? ? ? SysUser selectById(String name);
? ? ? ? ? ? ? ? 測試代碼如下:
? ? ? ? ? ? ? ? SysUserDao sysUserDao = sqlSession.getMapper(SysUserDao.class);
? ? ? ? ? ? ? ? SysUser sysUser = sysUserDao.selectById(1L);
? ? ? ? ? ? ? ? Assert.assertEquals("admin",sysUser.getUserName());
? ? ? ? ? ? ? ? SysUser sysUser1 = sysUserDao.selectById("1");
? ? ? ? ? ? ? ? Assert.assertEquals("admin",sysUser1.getUserName());
? ? ? ? ? ? ? ? /*
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(Long)
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(String)
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? ?RowBounds rowBound = new RowBounds(0,2);
? ? ? ? ? ? ? ? List<SysUser> sysUsers = sysUserDao.selectById(1L,rowBound);
? ? ? ? ? ? ? ? Assert.assertEquals(1,sysUsers.size());
? ? ? ? ? ? ? ? /*
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> ?Preparing: SELECT * FROM sys_user WHERE id = ?;
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - ==> Parameters: 1(Long)
? ? ? ? ? ? ? ? plus.dao.SysUserDao.selectById - <== ? ? ?Total: 1
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? 事實證明,當不指定參數(shù)類型的時候(也僅僅當不指定參數(shù)類型的時候才可以,因為重載重載的是參數(shù)),是可以進行
? ? ? ? ? ? ? ? 接口方法重載的,因為mybatis的參數(shù)類型推斷會自動的轉(zhuǎn)換參數(shù)類型,比如:
? ? ? ? ? ? ? ? ? ? sysUserDao.selectById("楚云飛");
? ? ? ? ? ? ? ? 因為ID的類型是Long類型,所以數(shù)據(jù)類型的自動轉(zhuǎn)換失敗,但是是不會出現(xiàn)異常的,只是它選取出來的數(shù)據(jù)集為null
? ? -->
? ? <select id="selectById" resultMap="sysUser" flushCache="true">
? ? ? ? SELECT * FROM sys_user WHERE id = #{_parameter};
? ? </select>
? ? <!--
? ? 參數(shù)傳遞問題:
? ? 1、接口函數(shù):
? ? ? ? SysUser selectByCondition(Long id,String userName,String userPassword);
? ? 參數(shù)傳遞:
? ? ? ? 1、默認參數(shù)傳遞:默認的參數(shù)的命名為 param + 序位,SQL語句如下:
? ? ? ? ? ? SELECT * FROM sys_user WHERE id = #{param1} AND user_name = #{param2} AND user_password = #{param3};
? ? ? ? 2、默認參數(shù)傳遞:直接序列參數(shù),SQL語句如下:
? ? ? ? ? ? SELECT * FROM sys_user WHERE id = #{0} AND user_name = #{1} AND user_password = #{2};
? ? ? ? 3、固定參數(shù)傳遞:
? ? ? ? ? ? 函數(shù)接口:
? ? ? ? ? ? ? ? SysUser selectByCondition(@Param("id")Long id,@Param("userName")String userName,@Param("userPassword")String userPassword);
? ? ? ? ? ? SQL語句如下:
? ? ? ? ? ? ? ? SELECT * FROM sys_user WHERE id = #{id} AND user_name = #{userName} AND user_password = #{userPassword};
? ? ? ? 4、使用Map傳遞參數(shù):
? ? ? ? ? ? 函數(shù)接口:SysUser selectByCondition(Map params);
? ? ? ? ? ? 調(diào)用代碼段:
? ? ? ? ? ? ? ? Map<String,Object> params = new HashMap<String,Object>(3);
? ? ? ? ? ? ? ? params.put("id",1L);
? ? ? ? ? ? ? ? params.put("userName","admin");
? ? ? ? ? ? ? ? params.put("userPassword","123456");
? ? ? ? ? ? ? ? SysUser sysUser1 = sysUserDao.selectByCondition(params);
? ? ? ? ? ? ? ? Assert.assertEquals("admin@mybatis.tk",sysUser1.getUserEmail());
? ? ? ? ? ? SQL語句:
? ? ? ? ? ? ? ? SELECT * FROM sys_user WHERE id = #{id} AND user_name = #{userName} AND user_password = #{userPassword};
? ? ? ? ? ? 思考:
? ? ? ? ? ? ? ? 1、與固定參數(shù)的SQL相比,沒有改變SQL語句,而且兩個接口實現(xiàn)重載。
? ? ? ? ? ? ? ? 2、接口函數(shù)可以實現(xiàn)重載,但是需要SQL語句來兼容這個函數(shù)的重載,也就是可以進行有條件的重載。
? ? ? ? 5、使用 $ 和 # 進行取值的區(qū)別:
? ? ? ? ? ? 1. #將傳入的數(shù)據(jù)都當成一個字符串,會對自動傳入的數(shù)據(jù)加一個雙引號。如:order by #user_id#,如果傳入的值是111,那么解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
? ? ? ? ? ? 2. $將傳入的數(shù)據(jù)直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時的值為order by user_id, ?如果傳入的值是id,則解析成的sql為order by id.
? ? ? ? ? ? 3. #方式能夠很大程度防止sql注入。
? ? ? ? ? ? 4.$方式無法防止Sql注入。
? ? ? ? ? ? 5.$方式一般用于傳入數(shù)據(jù)庫對象,例如傳入表名.
? ? ? ? ? ? 6.一般能用#的就別用$.
? ? ? ? ? ? SELECT * FROM sys_user WHERE id = ${id} AND user_name = '${userName}' AND user_password = '${userPassword}';
? ? -->
? ? <select id="selectByCondition" resultMap="sysUser" flushCache="true">
? ? ? ? SELECT * FROM sys_user WHERE id = #{id} AND user_name = #{userName} AND user_password = #{userPassword};
? ? </select>
? ? <resultMap id="sysUser" type="plus.pojo.SysUser">
? ? ? ? <id property="id" column="id"/>
? ? ? ? <result property="userName" column="user_name"/>
? ? ? ? <result property="userPassword" column="user_password"/>
? ? ? ? <result property="userEmail" column="user_email"/>
? ? ? ? <result property="userInfo" column="user_info"/>
? ? ? ? <result property="headImg" column="head_img" jdbcType="BLOB"/>
? ? ? ? <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
? ? </resultMap>
</mapper>

3.6、完整的接口 

public interface SysUserDao {
? ? SysUser selectById(Long id);
? ? List<SysUser> selectById(Long id,RowBounds rowBound);
? ? SysUser selectById(String name);
? ? SysUser selectByCondition(@Param("id")Long id,@Param("userName")String userName,@Param("userPassword")String userPassword);
? ? SysUser selectByCondition(Map params);
}

MyBatis實現(xiàn)方法重載的小技巧

QuestionMapper.java

利用接口默認方法 default 實現(xiàn)

QuestionMapper.xml

利用動態(tài)sql對 userId 字段進行判斷

在這里插入圖片描述

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • SpringCloud搭建netflix-eureka微服務(wù)集群的過程詳解

    SpringCloud搭建netflix-eureka微服務(wù)集群的過程詳解

    這篇文章主要介紹了SpringCloud搭建netflix-eureka微服務(wù)集群的過程詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java語言求解完美數(shù)代碼分析

    Java語言求解完美數(shù)代碼分析

    這篇文章主要介紹了Java語言求解完美數(shù)代碼分析,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • SpringCloud?Ribbon負載均衡原理

    SpringCloud?Ribbon負載均衡原理

    這篇文章主要介紹了SpringCloud?Ribbon負載均衡原理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的朋友可以參考一下
    2022-09-09
  • 在Java中將List轉(zhuǎn)換為String輸出過程解析

    在Java中將List轉(zhuǎn)換為String輸出過程解析

    這篇文章主要介紹了在Java中將List轉(zhuǎn)換為String輸出過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • springdoc?openapi使用解決方案

    springdoc?openapi使用解決方案

    SpringDoc注解的使用,它是基于OpenAPI?3和Swagger?3的現(xiàn)代化解決方案,相較于舊版的Swagger2即SpringFox,SpringDoc提供了更簡潔、更直觀的注解方式,這篇文章主要介紹了springdoc?openapi使用,需要的朋友可以參考下
    2024-04-04
  • JAVA內(nèi)存溢出解決方案圖解

    JAVA內(nèi)存溢出解決方案圖解

    這篇文章主要介紹了JAVA內(nèi)存溢出解決方案圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • postman中POST請求時參數(shù)包含參數(shù)list設(shè)置方式

    postman中POST請求時參數(shù)包含參數(shù)list設(shè)置方式

    這篇文章主要介紹了postman中POST請求時參數(shù)包含參數(shù)list設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • SpringBoot接值實現(xiàn)方法詳解

    SpringBoot接值實現(xiàn)方法詳解

    這篇文章主要介紹了SpringBoot接值實現(xiàn)方法,SpringBoot接值是指在SpringBoot應(yīng)用程序中接收請求參數(shù),從HTTP請求中獲取參數(shù),并將其綁定到Java對象中進行處理的過程,感興趣想要詳細了解可以參考下文
    2023-05-05
  • java實現(xiàn)捕魚達人游戲

    java實現(xiàn)捕魚達人游戲

    這篇文章主要介紹了java實現(xiàn)捕魚達人游戲,大部分功能都已實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java中tomcat的80端口被占用問題解決

    java中tomcat的80端口被占用問題解決

    java中tomcat的80端口被占用問題解決,需要的朋友可以參考一下
    2013-03-03

最新評論

金秀| 如东县| 滁州市| 德昌县| 临清市| 新邵县| 普兰县| 进贤县| 滨海县| 固阳县| 印江| 平昌县| 珠海市| 灵璧县| 廉江市| 达拉特旗| 正宁县| 瑞昌市| 通山县| 泽库县| 都兰县| 镇宁| 嘉义市| 辽阳县| 舟山市| 沾化县| 邵阳市| 博白县| 江达县| 赤壁市| 西平县| 上犹县| 巩留县| 永胜县| 枣阳市| 靖安县| 墨玉县| 夏邑县| 博野县| 眉山市| 韶关市|