mybtis 中怎么使用union all 进行统计

执行下面sql报错
java.lang.NoSuchMethodError: net.sf.jsqlparser.statement.select.SetOperationList.getSelects()Ljava/util/List;

接口是这样的

  List<Map<String,Object>>  selectCardlog();

mybtis里面怎么使用union


 <select id="selectCardlog" resultType="java.util.Map" parameterType="java.util.Map">
  SELECT
        card_number,
        gender,
        name,
        member_name,
        telephone,
        identity
        FROM
        tb_card_long_sale

        UNION ALL

       SELECT
        card_number,
        '2' as gender,
        'IC卡' as name,
        member_name,
        telephone,
        identity
        FROM
        tb_card_ic 

                </select>

1.不需要parameterType="java.util.Map"这一句,这一句可以删掉.你这个里面没有传参数.
2.可能存在的问题:
a、在引包是引用了不匹配的包版本
b、开发环境和运行环境的不一致

resultType="java.util.Map"这个可以这样写吗?结果不是应该封装到一个包含这些属性的实体类吗?如果你的sql语句可以正常执行的话。。。那么我想就是这个错误

1、首先,你把不必要的resultType="java.util.Map" parameterType="java.util.Map" 先去掉,只加一个resultType="map"
2、写一个正确的简单查询进去,看看是否还报错
3、若还报错,说明不是sql的问题(因为我这样用union all 没报错过)
4、若不报错,去终端调试sql,复制进来。

resultType="java.util.Map"这样的话,你需要在mapper接口的方法上添加@MapKey(value="id"),这个id是你的唯一标识这个实体的标识;
至于union all,你只要在sql中执行没问题,在哪儿都可以使用的,和mybatis没关系。


(
SELECT
card_number,
gender,
name,
member_name,
telephone,
identity
FROM
tb_card_long_sale )

    UNION ALL

  ( SELECT
    card_number,
    '2' as gender,
    'IC卡' as name,
    member_name,
    telephone,
    identity
    FROM
    tb_card_ic 

)

id 替换为 getSelects

你的sql没有问题,也不是mybatis的问题,是你mapper的接口定义的返回类型问题,将你mapper的接口放回类型改为List>就可以了。原因是返回的结果是list集合,而你Mapper接口文件中没有定义返回类型为List>的这个方法。

List> 接收的话resultMap改成 =“HashMap”试试

要看你写的dao接口名、参数类型、还有返回类型,这3个有一个与mapper对不上都会抛这个错

问题解决了
因为写了个分页的方法,,union 出来的list 莫名其妙的不能支持这个方法,,所以报错..

确实报错是因为有个分页,分页不支持这个,但是我用同样的分页插件做oracle项目时可以,mysql的报错,麻烦问下你是怎么解决的了楼主?