Mybatis中使用萬能的Map傳參實現(xiàn)
在編程中,有可能遇到我們的實體類或者數(shù)據(jù)庫中表的字段或參數(shù)過多的情況,那這時候用Map傳參是比較理想的選擇。
Map的特性是鍵值對應(yīng)的,只要確定了一個鍵key,那么值value可以是任何的數(shù)據(jù),這樣就可以在map內(nèi)存中存入任何數(shù)據(jù)。
下面例子演示在mybatis中結(jié)合Map實現(xiàn)基本的增刪改查
數(shù)據(jù)庫表(fruits)結(jié)構(gòu):
實體類:
package com.pojo.pp1; import java.math.BigDecimal; /** * 簡述: *創(chuàng)建實體 * @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; /** * 簡述: * * @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類中測試運行:
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; /** * 簡述: * * @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(); } }
測試結(jié)果,全部都可以通過
需要注意的地方:
標記序號的地方是兩種寫類型的方式
第二種方式需要在項目配置中resources下mybatis-config.xml的文件中加入以下的類型別名:
<typeAliases> <typeAlias type="java.util.Map" alias="Map"/> </typeAliases>
推薦用第二種方式哦
到此這篇關(guān)于Mybatis中使用萬能的Map傳參實現(xiàn)的文章就介紹到這了,更多相關(guān)Mybatis Map傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux的shell命令檢測某個java程序是否執(zhí)行
ps -ef |grep java|grep2016-04-04Java安全 ysoserial CommonsCollections2示例分析
這篇文章主要為大家介紹了Java安全 ysoserial CommonsCollections2示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11