mybatis實(shí)現(xiàn)獲取入?yún)⑹荓ist和Map的取值
前言
最近在工作中需要使用到mybatis,需要實(shí)現(xiàn)某個(gè)功能。
但是發(fā)現(xiàn)需要編寫一個(gè)sql,但是mybatis的映射文件入?yún)⑹荓ist集合和Map<String,Integer>,需要循環(huán)List,然后通過List循環(huán)出來的值為Key獲取Map中的值作為sql的入?yún)?,遇到了一些問題。
但是經(jīng)過不懈的努力,最后終于解決了這個(gè)問題。順便分享一下自己的經(jīng)驗(yàn)。
1.項(xiàng)目結(jié)構(gòu)
2.pom文件配置
server: port: 8379 spring: datasource: username: root url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC driver-class-name: com.mysql.jdbc.Driver mybatis: mapper-locations: classpath:mapping/*Mapper.xml type-aliases-package: com.example.bean #showSql logging: level: com: example: dao : debug
3.其他的業(yè)務(wù)代碼
package com.example.bean; import lombok.Data; @Data public class SysUser { private Integer id; private String username; private String image; }
package com.example.controller; import com.example.bean.SysUser; import com.example.service.SysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController public class SysUserController { @Autowired private SysUserService sysUserService; @GetMapping("/getSysUserById/{id}") SysUser getSysUserById(@PathVariable("id") String id) { List<String> ids = new ArrayList<>(); Map<String, Integer> infoMap = new HashMap<>(); infoMap.put("1", 1); infoMap.put("8", 8); infoMap.put("9", 9); ids.add(id); return sysUserService.getSysUserById(ids, infoMap); } }
package com.example.dao; import com.example.bean.SysUser; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @Mapper public interface SysUserMapper { SysUser getSysUserById(@Param("ids") List<String> ids,@Param("infoMap") Map<String,Integer> infoMap); }
package com.example.service; import com.example.bean.SysUser; import com.example.dao.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; @Service public class SysUserService { @Autowired private SysUserMapper sysUserMapper; public SysUser getSysUserById(List<String> ids, Map<String, Integer> infoMap) { return sysUserMapper.getSysUserById(ids,infoMap); } }
<?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.example.dao.SysUserMapper"> <select id="getSysUserById" resultType="com.example.bean.SysUser"> <foreach collection="ids" item="id"> <bind name="userId" value="infoMap[id]"/> select * from sys_user where id = #{userId} </foreach> </select> </mapper>
第一種采用#符的取值法
是可以防止sql注入的,可以通過循環(huán)List獲取Map的值
<?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.example.dao.SysUserMapper"> <select id="getSysUserById" resultType="com.example.bean.SysUser"> <foreach collection="ids" item="id"> <!-- <bind name="userId" value="infoMap[id]"/>--> select * from sys_user where id = '${infoMap[id]}' </foreach> </select> </mapper>
第二種方式采用$符的取值法
也可以獲取,雖然不能防止sql注入,但是可以做白名單的校驗(yàn),防止sql注入
4.總結(jié)
本人小白一枚,以上僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解
這篇文章主要為大家介紹了SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05詳解Java編寫算法時(shí)如何加快讀寫數(shù)據(jù)速度
這篇文章主要為大家詳細(xì)介紹了Java在編寫算法時(shí)如何加快讀寫數(shù)據(jù)速度,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03Java多線程之synchronized關(guān)鍵字的使用
這篇文章主要介紹了Java多線程之synchronized關(guān)鍵字的使用,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04解決@RequestBody接收json對象報(bào)錯415的問題
這篇文章主要介紹了解決@RequestBody接收json對象報(bào)錯415的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06SpringBoot整合Mybatis-Plus、Jwt實(shí)現(xiàn)登錄token設(shè)置
Spring Boot整合Mybatis-plus實(shí)現(xiàn)登錄常常需要使用JWT來生成用戶的token并設(shè)置用戶權(quán)限的攔截器,本文就來詳細(xì)的介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02Java實(shí)現(xiàn)平滑加權(quán)輪詢算法之降權(quán)和提權(quán)詳解
所有負(fù)載均衡的場景幾乎都會用到這個(gè)平滑加權(quán)輪詢算法,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)平滑加權(quán)輪詢算法之降權(quán)和提權(quán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04詳解JVM的內(nèi)存對象介紹[創(chuàng)建和訪問]
這篇文章主要介紹了JVM的內(nèi)存對象介紹[創(chuàng)建和訪問],文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03java二進(jìn)制運(yùn)算基礎(chǔ)知識點(diǎn)詳解
在本文里小編給大家分享了關(guān)于java二進(jìn)制運(yùn)算基礎(chǔ)知識點(diǎn)以及實(shí)例代碼內(nèi)容,需要的朋友們參考學(xué)習(xí)下。2019-08-08