mybatis使用使用一个sql查询不同表

本文介绍了在MyBatis中如何处理一个SQL查询不同表的情况,重点解决了当返回对象类型不同时的问题。通过使用`<select>`标签配合`resultType=java.util.HashMap`来接收Map对象,并在`application.yml`中配置`mybatis.configuration.call-setters-on-nulls`为`true`以处理空字段。此外,还讨论了#和`之间的区别,以及如何防止SQL注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis使用使用一个sql查询不同表

这个问题关键在于不同表返回对象不同。
1.首先来看mapper怎么写
项目中一直用的是tk.mybatis.mapper,在定义mapper接口声明了mapper对应的对象,如果要返回不同类型的对象,肯定是会出错的。

public interface EsMapper extends Mapper<User> 

解决方式是使用apache.ibatis.mapper

public interface EsMapper extends Mapper 

2.sql语句如何写
表名使用param注解可以传入,接受对象肯定是不能使用特定的model,第一个想法是使用object,然后会报错object没有属性,后来网上搜索发现可以使用map接收

<select id="selectData" resultType="java.util.HashMap">
    select * from ${table}
    where id in
    <foreach item='item' collection='ids' open="(" separator="," close=")">#{item}</foreach>
</select>

mysql返回数据会以键制对的形式返回,不过如果字段为空是不会返回的,解决方式是在application.yml配置文件加上mybatis配置

mybatis:
  configuration:
    call-setters-on-nulls: true

需要注意的是这里传入表名table使用的是 , , 和#的主要区别是后者会给传入的数据加上双引号,从而防止sql注入如果使用#会让sql变成这样,mysql会报错。

 select * from "user" ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值