Mybatis中使用萬能的Map傳參實(shí)現(xiàn)
在編程中,有可能遇到我們的實(shí)體類或者數(shù)據(jù)庫(kù)中表的字段或參數(shù)過多的情況,那這時(shí)候用Map傳參是比較理想的選擇。
Map的特性是鍵值對(duì)應(yīng)的,只要確定了一個(gè)鍵key,那么值value可以是任何的數(shù)據(jù),這樣就可以在map內(nèi)存中存入任何數(shù)據(jù)。
下面例子演示在mybatis中結(jié)合Map實(shí)現(xiàn)基本的增刪改查
數(shù)據(jù)庫(kù)表(fruits)結(jié)構(gòu):

實(shí)體類:
package com.pojo.pp1;
import java.math.BigDecimal;
/**
* 簡(jiǎn)述:
*創(chuàng)建實(shí)體
* @author:LiYansheng
* @date:2021/07/20 22:29
* @version:
*/
public class fruits {
private int id;
private String name;
private BigDecimal price;
public fruits(int id, String name, BigDecimal price) {
this.id = id;
this.name = name;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
@Override
public String toString() {
return "fruits{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}
Dao接口:
package com.pojo.Dao;
import com.pojo.pp1.fruits;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 簡(jiǎn)述:
*
* @author:LiYansheng
* @date:2021/07/20 22:31
* @version:
*/
public interface fruitsDao {
/*查詢?nèi)啃畔?/
List<fruits> getfruitsList();
/*通過ID查詢信息*/
fruits getfruitsById(@Param("map") Map<String, Object> map);
/*添加信息*/
int addfruits(@Param("map") Map<String, Object> map);
/*刪除信息*/
int deletefruits(@Param("map") Map<String, Object> map);
/*修改信息*/
int updatefruits(@Param("map") Map<String, Object> map);
}
Dao接口.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.pojo.Dao.fruitsDao">
<select id="getfruitsList" resultType="fruits">
select id,name,price from fruits
</select>
<select id="getfruitsById" parameterType="Map" resultType="fruits">
select id,name,price from fruits where id=#{map.id};
</select>
<insert id="addfruits" parameterType="Map" >
insert into fruits(id,name,price) values (#{map.id},#{map.name},#{map.price});
</insert>
<delete id="deletefruits" parameterType="Map" >
delete from fruits where id=#{map.id};
</delete>
<update id="updatefruits" parameterType="Map" >
update fruits set name=#{map.name},price=#{map.price} where id=#{map.id}
</update>
</mapper>
在Test類中測(cè)試運(yùn)行:
package com.pojo.Dao;
import com.pojo.pp1.fruits;
import com.utils.mybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 簡(jiǎn)述:
*
* @author:LiYansheng
* @date:2021/07/20 22:39
* @version:
*/
public class fruitsDaoTest {
@Test
public void getfruitsListTest() {
SqlSession sqlSession = mybatisUtils.getSqlSession();
fruitsDao fruitsDao = sqlSession.getMapper(com.pojo.Dao.fruitsDao.class);
List<fruits> fruitsList = fruitsDao.getfruitsList();
for (fruits f : fruitsList) {
System.out.println(f);
}
sqlSession.close();
}
@Test
public void getfruitsByIdTest() {
SqlSession sqlSession = mybatisUtils.getSqlSession();
fruitsDao fruitsDao = sqlSession.getMapper(com.pojo.Dao.fruitsDao.class);
Map<String, Object> map = new HashMap<>();
map.put("id", 3);
fruits f = fruitsDao.getfruitsById(map);
System.out.println(f);
sqlSession.close();
}
@Test
public void addfruits() {
SqlSession sqlSession = mybatisUtils.getSqlSession();
fruitsDao fruitsDao = sqlSession.getMapper(com.pojo.Dao.fruitsDao.class);
Map<String, Object> map = new HashMap<>();
map.put("id", 0);
map.put("name", "watermelon");
BigDecimal bigDecimal= BigDecimal.valueOf(2);
map.put("price", bigDecimal);
int a = fruitsDao.addfruits(map);
if (a > 0) {
System.out.println("添加信息ok");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void deletefruits() {
SqlSession sqlSession = mybatisUtils.getSqlSession();
fruitsDao fruitsDao = sqlSession.getMapper(com.pojo.Dao.fruitsDao.class);
Map<String, Object> map = new HashMap<>();
map.put("id", 3);
int a = fruitsDao.deletefruits(map);
if (a > 0) {
System.out.println("刪除信息ok");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void updatefruits() {
SqlSession sqlSession = mybatisUtils.getSqlSession();
fruitsDao fruitsDao = sqlSession.getMapper(com.pojo.Dao.fruitsDao.class);
Map<String, Object> map = new HashMap<>();
map.put("id", 1);
BigDecimal bigDecimal = BigDecimal.valueOf(5);
map.put("name", "Big_apple");
map.put("price", bigDecimal);
int a = fruitsDao.updatefruits(map);
if (a > 0) {
System.out.println("修改信息ok");
}
sqlSession.commit();
sqlSession.close();
}
}
測(cè)試結(jié)果,全部都可以通過

需要注意的地方:
標(biāo)記序號(hào)的地方是兩種寫類型的方式

第二種方式需要在項(xiàng)目配置中resources下mybatis-config.xml的文件中加入以下的類型別名:
<typeAliases>
<typeAlias type="java.util.Map" alias="Map"/>
</typeAliases>
推薦用第二種方式哦
到此這篇關(guān)于Mybatis中使用萬能的Map傳參實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mybatis Map傳參內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux的shell命令檢測(cè)某個(gè)java程序是否執(zhí)行
ps -ef |grep java|grep2016-04-04
Fluent Mybatis學(xué)習(xí)之Update語法實(shí)踐
Fluent MyBatis是一個(gè)MyBatis的增強(qiáng)工具,沒有對(duì)mybatis做任何修改。本篇文章將詳細(xì)介紹對(duì)Fluent Mybatis中的update語法進(jìn)行驗(yàn)證。代碼具有一定價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2021-11-11
Java正則表達(dá)式之Pattern類實(shí)例詳解
Pattern類的作用在于編譯正則表達(dá)式后創(chuàng)建一個(gè)匹配模式,下面這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式之Pattern類的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
Java安全 ysoserial CommonsCollections2示例分析
這篇文章主要為大家介紹了Java安全 ysoserial CommonsCollections2示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
淺談Mybatis+mysql 存儲(chǔ)Date類型的坑
這篇文章主要介紹了淺談Mybatis+mysql 存儲(chǔ)Date類型的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11

