我在使用jsqlparser解析sql,然后通过解析进行命名转换,做一些orm映射、分表分库功能
http://jsqlparser.sourceforge.net/
之前写了一部分,现在想重写。但是对于jsqlparser使用的访问者模式再加上sql自身语句的特点无从下手。
例如:String statement = "select * from Hero h where h.id in (select userId from User where h.id in (select id from Hero))";
先不看sql的问题,如果把这个sql解析掉应该变为
"select * from t_hero h where h.id in (select user_id from t_user where h.id in (select id from t_hero))";
关键问题来了:1、jsqlparser转换得到的javabean是一个Statement 通过访问者模式访问其属性
访问者模式没办法向内部传递参数,这样一来想把userId 转换成user_id 可以说是没有办法的,
这个是访问column的方法
public void visit(Column tableColumn) {
String tableName = tableColumn.getTable().getWholeTableName();
}
tableColumn的属性table 为空
当然,作为一个Column 自然在sql中有一个所属的table,例如上面的User(t_user)现在,通过jsqlparser转换的bean是不存在这一层关系的。
而我要做的就是通过改造加上这一层关系。
但是我被访问者模式给搞糊涂了,貌似访问者模式只能通过内部访问外部对象,外部无法窥探内部属性。我的理解是,他只能改变自己,而且只能利用方法的参数来处理
而且参数被限定了就如上面的 public void visit(Column tableColumn)
而Column的信息有太少了,导致无法处理Column与Table之间的关系,也就无法修改命名规则
实际上之前的bolg已经陆陆续续的实现了这种切分功能,但是感觉还是不好,主要原因是对于jsqlparser转换的bean处理不当,希望同样研究过的朋友交流下
分享到:
相关推荐
"Python+MySQL分表分库实战"的主题,正是探讨如何结合这两者,以解决大数据存储和查询中的挑战。 分表分库,也称为数据库水平扩展,是应对海量数据的常用策略。当单个数据库表的数据量过大时,会导致查询效率降低,...
#### 二、MySQL分库分表方案概述 分库分表是针对大型应用中的海量数据进行管理和优化的一种常见策略。其核心目的是通过将大量数据分布在不同的数据库或不同的表中,来降低单一数据库的压力,提高数据处理效率。具体...
【mycat分表分库方案】是针对大数据处理和高并发场景下的一种数据库优化策略,旨在提高系统的可扩展性和性能。mycat是一个开源的分布式数据库系统,它作为数据库中间件,实现了数据的自动分片、读写分离以及分布式...
**分表分库技术概述** 在大数据量的业务场景中,单个数据库往往无法承受高并发、大数据量的处理压力,这时就需要引入分表分库技术。分表是指将一张大表按照一定的规则拆分成多个小表,分散到不同的数据库服务器上,...
本文将深入探讨"Ibatis之分表分库解决方案",这是一个针对高并发、大数据处理的有效策略。Ibatis,作为一个轻量级的Java持久层框架,允许开发者将SQL语句直接写在配置文件或映射接口中,提供了灵活的数据访问接口。...
通过这个项目,你可以深入理解Spring全家桶和Mybatis如何协同工作,以及如何在实际项目中实现数据库的分库分表策略。同时,博文链接提供的详细教程会进一步帮助你理解和实践这些概念。在学习过程中,务必动手实践,...
本示例“springmvc分库分表实际例子”提供了一个基于SpringMVC实现的实战项目,旨在帮助开发者了解如何在实际应用中进行数据库的分库分表操作。下面我们将详细探讨相关知识点。 1. **SpringMVC**:SpringMVC是...
- **简单分库分表**:通过两张表实现分库分表,如用户ID表与用户详情表。 这些方法适用于小型应用,但在大规模场景下会遇到诸多问题。 ##### 3.2 直接映射 - **按区间分表**:将数据按照预设区间划分到不同表中。...
本文将深入探讨基于Node.js实现的MySQL分表分库中间件,它在分布式集群环境中起到至关重要的作用。 首先,Node.js是一种流行的JavaScript运行环境,它允许开发人员使用JavaScript进行服务器端编程。Node.js的异步非...
"spring动态数据源+mybatis分库分表"是一个针对大型数据库场景的解决方案,它利用Spring框架的动态数据源功能和MyBatis的SQL映射能力,实现数据库的透明化分片。以下是这个主题的详细知识点: 1. **Spring动态数据...
本项目基于Java、SpringBoot、MyBatis以及ShardingJDBC实现了一个分库分表的解决方案,旨在帮助开发者理解并掌握这一技术。以下是关于这些技术的详细介绍: **Java**: Java是一种广泛使用的面向对象的编程语言,...
"Sharding + Mybatis-Plus 分库分表"的主题就是针对这个问题提出的解决方案。Sharding-JDBC是一个轻量级的Java框架,它可以在不改变任何数据库语义和业务代码的情况下,实现数据库的水平拆分,从而提高系统的并行...
分库分表,顾名思义,就是将一个大型的数据库拆分为多个较小的数据库或表,以实现数据的水平扩展。这种方法通常用于处理高并发、大数据量的应用场景,如电商平台、社交网络等。分库主要是解决单个数据库的读写压力...
6. **中间件选择**:除了手动实现外,还可以借助ShardingSphere、MyCat等分库分表中间件,它们提供了更完善的解决方案,简化了开发工作。 在实际操作中,我们将创建10个库,每个库包含10个表。可以先编写一个PHP...
在"MySQL 分库分表的实现原理及演示案例.pdf"这个文档中,你可能会看到如何在实际环境中应用这些概念和工具的详细步骤,包括设置分片规则、配置分库分表中间件、处理分布式事务等。通过学习和实践这些案例,你将能够...
开发者在选择和实施分库分表方案时,需要充分评估业务需求、系统架构和现有技术栈,确保方案的可行性和扩展性。此外,持续关注和学习相关工具的发展,可以帮助我们更好地应对大数据时代的挑战。
**四、分库分表的挑战与解决方案** 1. **数据一致性**:分库分表后,事务处理变得复杂,需要考虑分布式事务的实现,如两阶段提交、补偿事务等。 2. **跨库查询**:分库后,部分原先的单表查询变为跨库查询,需要...
1、shardingsphere 并不直接支持达梦数据库,需要实现部分接口逻辑。 2、本demo并不完全支持达梦sql 3、包里面含有test demo可以直接测试 4、感谢shardingsphere 团队。 5、具体如何实现的 请查看我的博文 ...
**mycat 分库分表详解** mycat 是一个开源的分布式...总之,mycat 作为一个强大的分布式数据库中间件,为应对大数据时代的挑战提供了有效解决方案,通过合理的分库分表策略,帮助企业构建高可用、高性能的数据库架构。
在本教程中,我们将深入探讨如何使用SpringBoot与Sharding-JDBC进行集成,以实现自定义的数据库分库分表策略。Sharding-JDBC是Apache软件基金会下的一个轻量级Java框架,它允许开发者在不改变原有业务代码和数据库...