善忘技术夹 Logo
善忘技术夹
技术文章 · 6638 阅读

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

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文件

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

关注「善忘技术夹」全媒体矩阵

扫描上方宣传海报二维码,第一时间获取最新技术文章、开源项目与免安装小程序体验。

善忘技术夹 微信公众号宣传图
微信公众号 (扫码关注)
善忘技术夹 微信小程序宣传图
微信小程序 (扫码即用)