sql-gen:点击生成SQL、RO、VO的工具

sql-gen仓库地址:码云 Github

1. 概述

sql-gen是一个用于提高后端接口开发效率的小工具,主要有如下功能:

  1. 生成连表SQL语句
  2. 根据WHERE条件来生成封装查询条件的实体类(RO)
  3. 根据SELECT列来生成封装查询结果的实体类(VO)

sql-gen主要有如下特点:

  1. 自动生成表的别名(相关接口:TableAliasGenerator
  2. 自动推断主表和从表的连接条件,即ON语句(相关接口:JoinColumnDeducer
  3. 自动生成列的别名,解决SELECT和WHERE列中的名称重复问题(相关接口:ColumnAliasGenerator

2. 演示

2.1. 数据库准备

数据库中总共有5张表,如下:

  1. sys_class:班级表
  2. sys_grade:年级表
  3. sys_user:用户表,用于存放学生和家长
  4. sys_user_class_rel:学生和班级的关联关系表
  5. sys_parent_child_rel:学生和家长的关联关系表

sql-gen:点击生成SQL、RO、VO的工具_第1张图片


sys_user表和sys_parent_child_rel表的具体内容如下:

  1. 总共有4个用户
  2. 小明妈妈是小明的家长

sql-gen:点击生成SQL、RO、VO的工具_第2张图片


另外3张表的具体内容如下:

  1. 一年级的id为1
  2. 一年级下有一班和二班,其id分别为1112
  3. 小明和小红在一班,小刚在二班

sql-gen:点击生成SQL、RO、VO的工具_第3张图片

2.2. 连表查询(一)

查询id为1的用户(即小明)的学生信息,包括用户信息、班级信息和年级信息

  1. 此时需要连接sys_user、sys_user_class_rel、sys_class和sys_grade表
  2. 并且要以sys_user表的user_id列作为查询条件

可以看出,sql-gen默认会将主表和从表中名称相同的列作为连接的条件

2.3. 连表查询(二)

查询id为1的用户(即小明)及其家长的信息

  1. 此时需要连接sys_user、sys_parent_child_rel、sys_user表
  2. sys_user表出现了两次,第一次是作为学生表,第二次是作为家长表
  3. 然后以学生表的user_id列作为查询条件即可

可以看出,sql-gen还支持child.user_id=xxx.child_user_id形式的连接条件

2.4. 聚合查询

查询出每个班级中,学生id的平均值、学生名字的最大值和学生人数

  1. 此时需要连接sys_user、sys_user_class_rel、sys_class表
  2. 并且,需要将sys_class表的class_id列作为GROUP BY列
  3. 然后对sys_user表的user_id列进行AVG查询、user_name列进行MAX查询、gender列进行COUNT查询即可
  4. CN、MA、MI、AV、SU分别代表COUNT、MAX、MIN、AVG、SUM

你可能感兴趣的:(SQL,后端)