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值得字段给过滤掉。
总结
以上是生活随笔为你收集整理的Mybatis: 返回不同实体(对象数组)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Mybatis:传输多个参数
- 下一篇: Ionic 标签中添加单击事件 、双击事