Mybatis: 返回不同实体(对象数组)

探讨了在MyBatis中动态选择不同表进行查询的实现方法,避免了为每个表创建实体类的繁琐,使用Map<String, Object>作为返回类型,解决了返回数据字段不固定的问题。

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

       现在有这样一个需求:我这里有20个表名,然后随便选一个,你给我到这个所选的表里面把所有数据给我拿回来。之前的话我们都是有一个确定的表名,根据这个表创建一个实体类,当返回数据时,把resultTyoe设成这个实体类就可以了。但是现在要查哪一个表不确定了,也就是说你的resulttype不能写成一个实体类,有些人说为啥不行,行行行你写吧,20个表对应20个实体类,累死你。

       最开始想的是直接写成

 public List<Object> fetData (Map<String,Object> params);
 
<select id="getXXXBeanList" parameterType="map" resultType="Object">
 
  select * from ${tableName} 
 
</select>  

想法没啥问题,但是方式不太对,这样最后拿到的数据只有第一列,为啥,我的sql语句没啥毛病啊。

       其实这就是实体和Object的区别了,一个实体类,里面定义好了一些属性字段,当你的resultType写成一个实体类时,拿到数据后,它会去找你实体类里面的属性字段去对应,但是Object里面毛都没有。要想返回像实体类那样的东西,还是得靠Map<String,Object>。怎么理解呢,其实你看啊,Map里面的String是不是就对应实体类里面的属性字段,Object就对应具体的值,我认为这个Map<String,Object>就是一个只有属性字段没有方法的实体类。

 public List<Map<String,Object>> fetData (Map<String,Object> params);
 
<select id="getXXXBeanList" parameterType="map" resultType="map">
 
  select * from ${tableName} 
 
</select>  

       当你这么写之后,就发现,最后拿到的就是一个对象数组,你传一个不同的表,他就返回一个不同的对象数组,就不用定义那么多的实体类了。

       有一点要注意,在Mybatis里面,resultType为map时,会把含null值得字段给过滤掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值