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

       现在有这样一个需求:我这里有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值得字段给过滤掉。

猜你喜欢

转载自blog.csdn.net/wml00000/article/details/83242760