mycat1.6.0版本查询语句字段名等于别名问题

  |   0 评论   |   5,858 浏览

mycat1.6.0版本查询语句字段名等于别名问题

环境介绍
  1. java程序使用mybatisplus来做CRUD操作
  2. 程序通过mycat中间件来做分库分表的版本号1.6.0
问题现象

执行语句的时候, 发现在mysql客户端执行,能查出所有数据,程序查询结果少了一个数据库分库节点数据最后通过查看mycat日志,发现客户端执行的语句和程序执行语句不一致, 程序执行语句是列举了所有的字段,把程序中的sql语句拿出来,使用explain查看执行计划, 发现客户端执行的结果和程序一致

解决方法
  1. 升级mycat 1.6.5 或以上吧, 反正我用1.6.5版本是ok的

  2. 修改mybatis中定义的字段别名,所有字段名等于别名的sql语句,都不要指定,否则会出现分库数据查不到,只能返会一个库中的数据

举例如下

`

SELECT
id AS id,
uid,
available_sa AS availableSa,
freeze_sa AS freezeSa,
total_capital AS totalCapital,
total_income AS totalIncome,
status,
old_available_sa AS oldAvailableSa,
trans_status AS transStatus,
create_time AS createTime,
update_time AS updateTime,
general_freeze_sa AS generalFreezeSa FROM fd_user_capital WHERE
uid IN (
    'SYS_GENERATE_000',
    'SYS_GENERATE_002',
    'SYS_GENERATE_004',
    'SYS_GENERATE_005'
)
ORDER BY uid

`

就这么个语句 ,总是查出来数据少了,执行计划中显示只能查到一个分库节点。 去掉*AS id*就能看到所有的分库节点了。

注意事项

注解

如上图, 如果属性名字,和注解中的value名字一致, 就应该去掉,否则就会出现 id AS id这种查询语句了。导致低版本的mycat执行出错。

xml文件

这个配置也不能使用字段名和别人一致。

评论

发表评论

validate