mybatis 如何利用resultMap復(fù)雜類(lèi)型list映射
mybatis resultMap復(fù)雜類(lèi)型list映射
映射泛型為對(duì)象
xml
<resultMap id="internetDataDTO" type="com.mdm.skr.mdm_common.dto.StrategyInternetDataDTO">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="internetData" column="internet_data" jdbcType="INTEGER"/>
<collection property="userList" ofType="com.mdm.skr.mdm_common.entity.SysUser">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="number" column="number" jdbcType="VARCHAR"/>
<result property="pushToken" column="push_token" jdbcType="VARCHAR"/>
<result property="wsChannelId" column="ws_channel_id" jdbcType="VARCHAR"/>
</collection>
</resultMap>
<select id="selectInternetDataDTOByInternetDataIdList" resultMap="internetDataDTO">
SELECT sidu.id, sidu.internet_data, su.id, su.number, su.push_token, su.ws_channel_id
FROM strategy_internet_data_user sidu JOIN skr_user su on su.id = sidu.user_id
WHERE sidu.id IN
<foreach collection="internetDataIdList" open="(" close=")"
separator="," item="internetDataId">
#{internetDataId}
</foreach>
</select>
DTO
@Data
public class StrategyInternetDataDTO {
private Integer id ;
private Integer internetData ;
private List<SysUser> userList ;
}
ENTITY
@Data
public class SysUser {
private Integer id;
private String number;
private String pushToken;
private String wsChannelId ;
}
MAPPER
List<StrategyInternetDataDTO> selectInternetDataDTOByInternetDataIdList(@Param("internetDataIdList") List<Integer> internetDataIdList);
映射泛型為包裝類(lèi)型
xml
<resultMap id="internetDataDTO" type="com.mdm.skr.mdm_common.dto.StrategyInternetDataDTO">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="internetData" column="internet_data" jdbcType="INTEGER"/>
<collection property="userIdList" ofType="java.lang.Integer" javaType="java.util.List">
<result column="userId"/>
</collection>
</resultMap>
<select id="selectInternetDataDTOByInternetDataIdList" resultMap="internetDataDTO">
SELECT sidu.id, sidu.internet_data, sidu.user_id userId
FROM strategy_internet_data_user sidu
WHERE sidu.id IN
<foreach collection="internetDataIdList" open="(" close=")"
separator="," item="internetDataId">
#{internetDataId}
</foreach>
</select>
DTO
@Data
public class StrategyInternetDataDTO {
private Integer id ;
private Integer internetData ;
private List<Integer> userIdList ;
}
MAPPER
List<StrategyInternetDataDTO> selectInternetDataDTOByInternetDataIdList(@Param("internetDataIdList") List<Integer> internetDataIdList);
mybatis的幾種傳值方式
1.單個(gè)參數(shù)傳參
User selectUserInfo(Integer userId);
<select id = "selectUserInfo" parameterType = "java.lang.Inte" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from user
where userId = #{userId , jdbcType=INTEGER}
</select>
2. 按照順序傳參
User selectUserInfo(Integer userId, String userName, String userPass);
<select id = "selectUserInfo" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from user
where userId = #{arg0} and userName = #{arg1} and userPass = #{arg2}
</select>
3. 使用@Param注解傳參
User selectUserInfo(@Param("userName")String userName, @Param("userPass")String userPass);
<select id = "selectUserInfo" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from user
where userName = #{userName} and userPass = #{userPass}
</select>
4. 使用Map傳參 注意傳參方式:parameterType="java.util.Map"
Map<String,Object> map = new HashMap();
map.put("userName","張三");
map.put("userPass","123");
User user = userMapper.selectUserInfo(map);
User selectUserInfo(Map<String,Object> map);
<select id="selectUserInfo" parameterType="java.util.Map" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from user
where userName = #{userName} and userPass = #{userPass}
</select>
5. 實(shí)體對(duì)象傳參
User user = new User();
user.setUserName("張三");
user.setUserPass("123");
User user = UserMapper.selectUserInfo(user);
User selectUserInfo(User record);
<select id="selectUserInfo" parameterType="com.LiuXu.bean.User" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from user
where userName = #{userName} and userPass = #{userPass}
</select>
6. List傳參
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
List<User> userList = userMapper.selectUserInfo(list);
List<User> selectUserInfo(List<User> record);
<select id="selectUserInfo" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from user
where userId in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot多數(shù)據(jù)源實(shí)現(xiàn)方式
本文介紹了多數(shù)據(jù)源配置的重要性以及在SpringBoot中如何配置單個(gè)默認(rèn)數(shù)據(jù)源和多個(gè)數(shù)據(jù)源,此外,還討論了如何整合MyBatis、實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源路由、事務(wù)管理以及使用dynamic-datasource-spring-boot-starter框架來(lái)簡(jiǎn)化多數(shù)據(jù)源管理2025-01-01
SpringBoot實(shí)現(xiàn)PDF轉(zhuǎn)圖片的代碼示例
在本文中,我們使用SpringBoot演示了如何將PDF文件轉(zhuǎn)換為一張或多張圖片,這些示例演示了如何使用Java編程語(yǔ)言與其他開(kāi)源技術(shù)集成,以實(shí)現(xiàn)各種文件格式之間的轉(zhuǎn)換,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-08-08
詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比
這篇文章主要介紹了詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
IDEA快速搭建spring?boot項(xiàng)目教程(Spring?initializr)
這篇文章主要介紹了IDEA快速搭建spring?boot項(xiàng)目教程(Spring?initializr),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java-lambda表達(dá)式入門(mén)看這一篇就夠了
lambda表達(dá)式最簡(jiǎn)單的作用就是用于簡(jiǎn)化創(chuàng)建匿名內(nèi)部類(lèi)對(duì)象,Lambda表達(dá)式是一個(gè)可傳遞的代碼塊,可以在以后執(zhí)行一次或多次,下面通過(guò)本文給大家介紹Java-lambda表達(dá)式入門(mén)教程,感興趣的朋友一起看看吧2021-05-05
javaweb設(shè)計(jì)中filter粗粒度權(quán)限控制代碼示例
這篇文章主要介紹了javaweb設(shè)計(jì)中filter粗粒度權(quán)限控制代碼示例,小編覺(jué)得還是挺不錯(cuò)的,需要的朋友可以參考。2017-10-10
Mybatis實(shí)現(xiàn)自動(dòng)生成增刪改查代碼
這篇文章主要為大家詳細(xì)介紹了Mybatis如何實(shí)現(xiàn)自動(dòng)生成增刪改查代碼的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-01-01
@WebFilter在SpringBoot無(wú)效的原因分析和解決方案
使用Ruoyi的demo部署成功后,發(fā)現(xiàn)js、css等靜態(tài)文件都進(jìn)入了過(guò)濾器,但是發(fā)現(xiàn)靜態(tài)文件沒(méi)有使用瀏覽器緩存,新建BrowserCacheFilter.java并增加@WebFilter處理,應(yīng)用自動(dòng)重啟后發(fā)現(xiàn)@WebFilter無(wú)效,所以本文給大家介紹了@WebFilter在SpringBoot無(wú)效的原因分析和解決方案2024-03-03

