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" ...