执行下面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的报错,麻烦问下你是怎么解决的了楼主?