Skip to content
Sim Wang edited this page Oct 3, 2020 · 21 revisions

SQLI 简单的SQL拼接

拼接要求

不支持原生的SQL拼接, 仅仅支持以类名和属性名的形式拼接,首字母小写

应用场景

对性能没极致要求, 不需要强大的复杂的方案来解决性能,却需要复杂的查询。支持clickhouse风格的JOIN SUB(...)拼接。整合了基于redis.multiGet的二级缓存,缓存支持用户过滤。适合快速开发。默认过滤掉值为null的条件(如果需要null, 可以{builder.x("name is null")})。 对于多个表的连表查询,如果只查出主表ID(其他结果分阶段in查询,支持二级缓存), SQLI将优化连表语句,满足绝大部分需求: 连表仅仅因为条件来自于多个表。 很少情况下,如果必须用LEFT JOIN ON AND (mroe condition) 查询,可以关闭默认的优化{builder.withoutOptimization()},当然还有其他场景需要关闭。

Mapper设计

映射前, 没SQL Parser

  1. 如果某个属性名和某个类名(首字母小写后)相同, 它们的mapping值必须相同, 建议java实体类里不出现某个属性名=某个类名(首字母小写后), 启动时检查, 遇到则抛出NotSupportedException
  2. 表名的别名不能是某个类名(首字母小写后),运行时遇到则抛出NotSupportedException

应用于当前的框架

  1. 如果正在使用Spring框架, 可以直接使用io.xream.x7项目, 或按照x7项目的结构整合进当前的框架
  2. 如果只使用SQLI的SQL拼接构建接口, 只需要引入sqli/sqli-builder即可
  3. 如果不使用Spring或不使用Spring-JdbcTemplate, 需要实现{io.xream.sqli.spi.JdbcHelper}接口, 参照x7/x7-repo/spring-jdbc-template-plus