当前位置: 首页 > news >正文

网站优化与seo的区别ktv网站模板

网站优化与seo的区别,ktv网站模板,凡客诚品官网的关闭原因,搜索引擎排行榜#x1f4e2; 大家好#xff0c;我是 【战神刘玉栋】#xff0c;有10多年的研发经验#xff0c;致力于前后端技术栈的知识沉淀和传播。 #x1f497; #x1f33b; 希望大家多多支持#xff0c;后续会继续提升文章质量#xff0c;绝不滥竽充数#xff0c;欢迎多多交流… 大家好我是 【战神刘玉栋】有10多年的研发经验致力于前后端技术栈的知识沉淀和传播。 希望大家多多支持后续会继续提升文章质量绝不滥竽充数欢迎多多交流。 文章目录 写在前面的话技术简介基础间接特色说明核心功能竞品分析 技术扩展基础入门主要模块解析SQL能力构建SQL能力 企业实战运用场景企业实战 - SQL 解析企业实战 - SQL 生成 总结陈词 写在前面的话 博主公司在近期新产品的技术选型当中涉及到SQL解析与生成等场景这部分选择了JSqlParser这里进行简单的介绍说明大家可以按需选择。 参考JSqlParser 官网 技术简介 基础间接 JSqlParser 是一个功能强大的 Java 库专为解析、修改和生成 SQL 语句而设计。它不仅能够处理复杂的 SQL 语法还提供了丰富的 API使得开发者可以轻松地对 SQL 语句进行各种操作。JSqlParser 的主要目标是为开发人员提供一个可靠的工具以便在应用程序中高效地管理和优化 SQL 语句。 JSqlParser 的设计理念是简单易用同时具备高度的灵活性和扩展性。无论是初学者还是经验丰富的开发人员都可以通过 JSqlParser 快速上手并解决实际问题。该库支持多种 SQL 方言包括 MySQL、PostgreSQL、Oracle 和 SQL Server 等这使得它在多数据库环境中具有广泛的应用前景。 特色说明 1、功能丰富 JSqlParser 提供了全面的 SQL 解析功能可以解析几乎所有的 SQL 语句类型包括但不限于 SELECT、INSERT、UPDATE、DELETE、CREATE TABLE 和 ALTER TABLE 等。此外它还支持复杂的子查询、联合查询和嵌套查询等高级语法。通过 JSqlParser开发人员可以轻松地将 SQL 语句转换为抽象语法树AST从而方便地进行进一步的操作和分析。 2、易于使用与扩展 JSqlParser 的 API 设计简洁明了使得开发人员可以快速上手并集成到现有的项目中解析或生成一个简单的 SQL 语句只需要几行代码。 3、高度可扩展 JSqlParser 不仅提供了丰富的内置功能还允许开发人员根据需要进行扩展。例如可以通过实现自定义的 Visitor 接口来遍历和修改抽象语法树。这种灵活性使得 JSqlParser 可以适应各种复杂的应用场景如 SQL 语句的动态生成、查询优化和安全性检查等。 4、支持多种 SQL 方言 JSqlParser 支持多种主流的 SQL 方言包括 MySQL、PostgreSQL、Oracle 和 SQL Server 等。这意味着开发人员可以在不同的数据库环境中使用同一个库而无需担心兼容性问题。这种跨平台的支持使得 JSqlParser 成为了一个多数据库应用的理想选择。 核心功能 前面已经写了太多文字了核心功能不展开了。 无非就是SQL解析、SQL调整、SQL生成。 再简化一下SQL解析和生成 竞品分析 JSqlParser 同类型的工具用于解析 SQL 语句主要有以下几种 **SQLparser: **一个轻量级的 Java 库专注于 SQL 解析支持多种 SQL 方言功能相对 JSqlParser 较为精简。**Apache Calcite: **一个用于 SQL 查询优化的框架也包含 SQL 解析器 更侧重于查询优化和执行解析功能作为其一部分。**ANTLR: ** 一个强大的语法分析工具可以用于构建自定义的 SQL 解析器灵活性高但需要用户定义语法规则。**SQL-Java: **一个用于解析和操作 SQL 语句的 Java 库功能与 JSqlParser 类似但可能在特定方面有不同侧重。 温馨提示个人认为这种工具类的不用花费大量时间去纠结技术选型能满足开发需求用的顺手即可。 技术扩展 基础入门 Tips截止编写日期最新版本是5.0需要使用JDK11以上版本。 Tips针对后端框架没有限制可以当作 Hutools 那样的工具类使用。 Step1、引入Maven依赖 dependencygroupIdcom.github.jsqlparser/groupIdartifactIdjsqlparser/artifactIdversion5.0/version /dependencyStep2、编写SQL解析的测试方法 Test public void parseSqlTemp() throws JSQLParserException {String sql SELECT id,name FROM staff_member WHERE nickname 刘;Statement statement CCJSqlParserUtil.parse(sql);if (statement instanceof Select selectStatement) {PlainSelect plainSelect selectStatement.getPlainSelect();log.info( JsqlParser SQL: {}, selectStatement);log.info( FromItem: {}, plainSelect.getFromItem());log.info( SelectItem: {}, plainSelect.getSelectItems());log.info( Where: {}, plainSelect.getWhere());log.info( Joins: {}, plainSelect.getJoins());} }// 输出信息JsqlParser SQL: SELECT id, name FROM staff_member WHERE nickname 刘FromItem: staff_memberSelectItem: [id, name]Where: nickname 刘Step3、编写SQL生成的测试方法 Test public void testSql1() {Table t1 new Table(tab1).withAlias(new Alias(t1).withUseAs(true)); // 表1Table t2 new Table(tab2).withAlias(new Alias(t2, false)); // 表2PlainSelect plainSelect new PlainSelect().addSelectItems(new AllColumns()).withFromItem(t1); // SELECT * FROM tab1 AS t1Join join new Join(); // 创建Join对象join.withRightItem(t2); // 添加Join的表 JOIN t2 JOIN tab2 t2EqualsTo equalsTo new EqualsTo(); // 添加 条件表达式 t1.user_id t2.user_idequalsTo.setLeftExpression(new Column(t1, user_id ));equalsTo.setRightExpression(new Column(t2, user_id ));join.withOnExpression(equalsTo);// 添加ONplainSelect.addJoins(join);System.err.println(plainSelect); // SELECT * FROM tab1 AS t1 JOIN tab2 t2 ON t1.user_id t2.user_id }主要模块 1. Expression expression 包含了 SQL 中的各种表达式类这些类用于构建和表示 SQL 语句中的条件和表达式。常见的表达式类包括 EqualsTo表示等于操作符。 InExpression表示 IN 操作符用于检查某个值是否在一组值中。 BinaryExpression表示二元操作符如加法、减法等。 Function表示 SQL 函数调用。 Column表示 SQL 中的列。 这些表达式类使得用户可以方便地构建复杂的 SQL 查询条件。 2. Schema schema 模块主要用于表示数据库的结构包括表、列、约束等。常见的类包括 Table表示数据库中的表。 Column表示表中的列通常包含列名、数据类型等信息。 Index表示表上的索引。 ForeignKey表示表之间的外键关系。 这些类帮助用户理解和操作数据库的结构便于进行元数据的管理和查询。 3. Parser parser 模块包含了 SQL 解析的相关类主要负责将 SQL 字符串解析为 Java 对象。常见的类包括 CCJSqlParserUtil提供了静态方法来解析 SQL 语句返回相应的语法树。 SQLParser核心解析器负责将 SQL 语句分解为不同的部分。 ExpressionParser用于解析 SQL 中的表达式部分。 通过这些类用户可以轻松地将 SQL 语句转换为可操作的 Java 对象。 4. Statement statement 模块封装了各种数据库操作的对象表示不同类型的 SQL 语句。常见的类包括 Select表示 SELECT 查询语句。 Insert表示 INSERT 操作。 Update表示 UPDATE 操作。 Delete表示 DELETE 操作。 CreateTable表示创建表的语句。 这些类使得用户可以方便地构建、修改和执行 SQL 语句。 解析SQL能力 JSqlParser可以解析SQL为Java对象以便于获取SQL中的相关信息或可进行修改。 一般通过 CCJSqlParserUtil 和 CCJSqlParserManager 解析SQL。 CCJSqlParserUtil 适合于简单的情况CCJSqlParserManager 则拥有更强大的功能。 【示例代码】 这边来一段示例代码其实自己准备一个SQL尝试一下很容易理解。 基本步骤使用CCJSqlParserUtil解析sql获得Statement如果是查询就转换PlainSelect类型然后调其相关方法获取更详细的内容。 Test public void testSelectAll() throws JSQLParserException {// 准备一段基础SQLString sql SELECT t.pres_no,t.patient_id,t.exec_dept_code,t1.patient_id,t1.patient_name,t1.patient_sex,(SELECT a.DEPT_NAMEFROM ZOEDICT.DIC_DEPT_DICT aWHERE a.DEPT_CODE t.exec_dept_code) AS EXEC_DEPT_NAMEFROM ZOEPRES.PRES_OUTP_PRES_MASTER tJOIN zoepatient.pat_basic_info t1 ON t.patient_id t1.patient_idWHERE t.patient_id 5000022933AND t.event_no D3389411;// 利用 CCJSqlParserUtil 解析SQLStatement statementTemp CCJSqlParserUtil.parse(sql);if (statementTemp instanceof Select selectStatement) {PlainSelect plainSelect selectStatement.getPlainSelect();log.info( JsqlParser SQL: {}, selectStatement);log.info( FromItem: {}, plainSelect.getFromItem());log.info( SelectItem: {}, plainSelect.getSelectItems());log.info( Where: {}, plainSelect.getWhere());log.info( Join: {}, plainSelect.getJoins());}// 创建 TablesNamesFinder 实例提取表名// 这里会连JOIN和子查询的表一起输出总共三张TablesNamesFinder tablesNamesFinder new TablesNamesFinder();ListString tableList tablesNamesFinder.getTableList(statementTemp);System.out.println(tableList); }【PlainSelect 方法列举】 获取和设置表From子句: FromItem getFromItem(): 获取FROM子句中的表或子查询。 void setFromItem(FromItem fromItem): 设置FROM子句中的表或子查询。获取和设置选择项SelectItems: ListSelectItem getSelectItems(): 获取SELECT子句中的选择项列表。 void setSelectItems(ListSelectItem selectItems): 设置SELECT子句中的选择项列表。获取和设置WHERE子句: Expression getWhere(): 获取WHERE子句的条件表达式。 void setWhere(Expression where): 设置WHERE子句的条件表达式。获取和设置GROUP BY子句: ListExpression getGroupByColumnReferences(): 获取GROUP BY子句中的列引用列表。 void setGroupByColumnReferences(ListExpression groupByColumnReferences): 设置GROUP BY子句中的列引用列表。获取和设置ORDER BY子句: ListOrderByElement getOrderByElements(): 获取ORDER BY子句中的排序元素列表。 void setOrderByElements(ListOrderByElement orderByElements): 设置ORDER BY子句中的排序元素列表。获取和设置LIMIT子句: Limit getLimit(): 获取LIMIT子句。 void setLimit(Limit limit): 设置LIMIT子句。获取和设置DISTINCT关键字: boolean isDistinct(): 检查SELECT语句是否使用了DISTINCT关键字。 void setDistinct(boolean distinct): 设置SELECT语句是否使用DISTINCT关键字。获取和设置INTO子句用于SELECT INTO语句: SubSelect getIntoTables(): 获取INTO子句中的表。 void setIntoTables(SubSelect intoTables): 设置INTO子句中的表。获取和设置HAVING子句: Expression getHaving(): 获取HAVING子句的条件表达式。 void setHaving(Expression having): 设置HAVING子句的条件表达式。获取和设置别名: String getAlias(): 获取SELECT语句的别名。 void setAlias(String alias): 设置SELECT语句的别名。获取和设置子查询SubSelect: SubSelect getSubSelect(): 获取子查询。 void setSubSelect(SubSelect subSelect): 设置子查询。获取和设置联合查询Union: ListPlainSelect getUnion(): 获取联合查询的SELECT语句列表。 void setUnion(ListPlainSelect union): 设置联合查询的SELECT语句列表。构建SQL能力 构建SQL其实相当于解析SQL的逆过程是构造组装一个PlainSelect的过程进而得到SQL语句。 可以从无到有构造SQL也可以基于原有SQL解析出PlainSelect对象后再进行修改。 操作方法很简单直接看下方示例企业实战中通常会搭配自定义语义解析模板使用。 【示例代码】 Test public void buildSqlTemp() throws JSQLParserException {// 定义表Table table new Table().withName(zoepres.pres_outp_pres_master).withAlias(new Alias(t, false));// 定义查询列Column columnA new Column().withColumnName(patient_id);Column columnB new Column().withColumnName(pres_no);Column columnC new Column().withColumnName(event_no);// 定义查询列的条件Expression whereExpression new EqualsTo().withLeftExpression(columnA).withRightExpression(new StringValue(5000022928));// 定义查询PlainSelect select new PlainSelect().addSelectItem(new LongValue(123)).withFromItem(table).withWhere(whereExpression);// 增加函数表达式select.addSelectItem(columnB, new Alias(presNo));// 增加子查询Expression expr2 CCJSqlParserUtil.parseExpression((select count(1) from dual));select.addSelectItem(expr2, new Alias(id124));// 增加函数处理逻辑Function function new Function();function.setName(REPLACE);ListExpression parameters new ArrayList();parameters.add(columnC);parameters.add(new StringValue(a));parameters.add(new StringValue(b));function.setParameters(new ExpressionList(parameters));select.addSelectItem(function);System.out.println(select); }//输出信息如下 SELECT 123,pres_no AS presNo,(SELECT count(1) FROM dual) AS id124,REPLACE(event_no, a, b)FROM zoepres.pres_outp_pres_master tWHERE patient_id 5000022928企业实战 运用场景 Java SQL 解析器如 JSQLParser在多个场景中发挥着重要作用以下是一些具体的应用场景 1、构建数据库管理工具在开发数据库客户端或管理界面时Java SQL 解析器可以解析用户输入的 SQL 查询。这使得工具能够执行相应的操作例如执行查询、更新数据库结构或管理数据从而提升用户体验和操作效率。 2、实现自定义的 SQL 分析工具当需要对大量 SQL 查询进行深入分析时Java SQL 解析器可以帮助解析这些查询以识别查询模式、性能瓶颈等。通过编写自定义分析逻辑开发者可以获得更深入的洞察优化数据库性能。 3、定制 SQL 解析和执行逻辑在某些情况下标准的数据库接口可能无法满足特定需求。此时Java SQL 解析器可以解析 SQL 查询并允许开发者编写自定义的执行逻辑以实现更复杂的功能或满足特定的业务需求。 4、实现查询优化器如果希望深入了解查询优化器的工作原理Java SQL 解析器可以解析 SQL 查询并基于解析结果实现自己的查询优化器。这为开发者提供了一个实验和学习的机会以优化查询性能。 5、实现 SQL 注入检测工具SQL 注入是常见的安全漏洞之一。为了防止 SQL 注入攻击开发者可使用Java 的SQL解析器解析用户输入的 SQL 查询并检测其中是否包含潜在的注入漏洞。这种检测机制有助于增强应用程序的安全性保护数据库免受攻击。 通过这些应用场景可以看出 Java SQL 解析器在数据库管理、性能优化、安全检测等方面的重要性帮助开发者更高效地处理 SQL 查询和相关操作。企业实战 - SQL 解析 【场景说明】 博主所在公司开发了数据中心产品线涉及较多与数据打交道的数据中心工具和产品诸如票据设计器、报表系统、床位导航等这些产品都涉及可视化配置界面需要通过工程人员编写的SQL语句作为页面的数据来源同时需要具备从SQL中解析出各项元素进行后续操作。例如提取出SELECT后面的元素生成返回值表格列允许设置表名、宽度、类型等内容。 【场景使用】 针对上述场景使用JSQLParser来实现就相当简单了很轻易的将SQL语法进行剖析分解出各个组成部分一览无余按需使用。 只能说使用JSQLParser来解析SQL真是庖丁解牛、游刃有余。 企业实战 - SQL 生成 【场景说明】 无独有偶博主所在公司继续开发低代码平台部分产品线决定不通过写SQL完成配置而是完全采用通俗易懂的拖拉拽和可视化表单编辑等方式生成页面逻辑。为此我们需要将前端元素转换为一个可执行的SQL语法。 【场景使用】 针对上述场景使用JSQLParser来实现也是相当简单了。 当然我们没有直接解析前端传参然后进行JSQLParser处理而是在中间增加了一层JSON模板前端根据该模板约定组装入参后端增加将JSON模板使用JSQLParser解析成相应SQL。通常这种方式使查询语义可以在各个产品线更好的共享增强了扩展性。 总结陈词 本篇文章大体介绍了JSqlParser实现SQL的解析和生成由于篇幅所限仅展示简单示例分析。 后续也会逐步分享企业实际开发中的实战经验有需要交流的可以联系博主。
http://www.hkea.cn/news/14280452/

相关文章:

  • 做网站如何注意排版问题wordpress截图粘贴
  • 西宁哪里做网站驻马店高端网站建设
  • 佳木斯城乡建设局网站网站建设算加工承揽合同吗
  • js网站模板域名注册报备
  • 广州化妆品网站设计asp.net 建立网站吗
  • 网站运营目的有哪些教做蛋糕的网站
  • 实施网站推广的最终目的做外贸需要几个网站
  • 公众号网站开发用什么模板做冷库用什么网站发帖子好
  • 宁波网站建设哪里有广西新狐网络科技有限公司
  • 杭州西湖区做网站做视频网站带宽要
  • 做设计用哪个素材网站网站开发开票编码归属
  • 京东网站开发多少钱服装网站建设与规划
  • 做网站的为什么那么多骗子发不了软文的网站怎么做关键词优化
  • 网站建设商城网站wordpress商店主题
  • 服装网站设计方案北京牌楼设计制作
  • 有网站了怎么设计网页从源码安装wordpress
  • 国外做健康的网站wordpress首页导航
  • 什么网页游戏可以赚钱wordpress 中文 seo
  • 新手引导做的差的网站基于php的网站开发设计
  • 使用asp.net做购物网站wordpress备份整站
  • 公司网站建设改版国际公司定义
  • 网站建设的经验之谈个人网站 可以做淘宝客吗
  • 怎样进行网站建设步骤手机网站宽度自适应
  • 建设网站的网站叫什么举报网站建设公司
  • 企业网站建设遵循的原则wordpress切换成中文
  • 六安网站排名优化电话网站设计师的工作内容
  • 做外贸必须有网站吗本地工程招标网
  • 秦皇岛陵县网站建设滑动 手机网站 代码
  • 上海市建设安全协会网站王夑晟电脑怎么制作图片
  • 公司网站建设与管理的作用住建部和城乡建设官网