sql-gen仓库地址:码云 Github
1. 概述
sql-gen是一个用于提高后端接口开发效率的小工具,主要有如下功能:
- 生成连表SQL语句
- 根据WHERE条件来生成封装查询条件的实体类(RO)
- 根据SELECT列来生成封装查询结果的实体类(VO)
sql-gen主要有如下特点:
- 自动生成表的别名(相关接口:
TableAliasGenerator
) - 自动推断主表和从表的连接条件,即ON语句(相关接口:
JoinColumnDeducer
) - 自动生成列的别名,解决SELECT和WHERE列中的名称重复问题(相关接口:
ColumnAliasGenerator
)
2. 演示
2.1. 数据库准备
数据库中总共有5张表,如下:
- sys_class:班级表
- sys_grade:年级表
- sys_user:用户表,用于存放学生和家长
- sys_user_class_rel:学生和班级的关联关系表
- sys_parent_child_rel:学生和家长的关联关系表
sys_user表和sys_parent_child_rel表的具体内容如下:
- 总共有4个用户
- 小明妈妈是小明的家长
另外3张表的具体内容如下:
- 一年级的id为
1
- 一年级下有一班和二班,其id分别为
11
和12
- 小明和小红在一班,小刚在二班
2.2. 连表查询(一)
查询id为
1
的用户(即小明)的学生信息,包括用户信息、班级信息和年级信息
- 此时需要连接sys_user、sys_user_class_rel、sys_class和sys_grade表
- 并且要以sys_user表的user_id列作为查询条件
可以看出,sql-gen默认会将主表和从表中名称相同的列作为连接的条件
2.3. 连表查询(二)
查询id为
1
的用户(即小明)及其家长的信息
- 此时需要连接sys_user、sys_parent_child_rel、sys_user表
- sys_user表出现了两次,第一次是作为学生表,第二次是作为家长表
- 然后以学生表的user_id列作为查询条件即可
可以看出,sql-gen还支持child.user_id=xxx.child_user_id
形式的连接条件
2.4. 聚合查询
查询出每个班级中,学生id的平均值、学生名字的最大值和学生人数
- 此时需要连接sys_user、sys_user_class_rel、sys_class表
- 并且,需要将sys_class表的class_id列作为GROUP BY列
- 然后对sys_user表的user_id列进行AVG查询、user_name列进行MAX查询、gender列进行COUNT查询即可
- CN、MA、MI、AV、SU分别代表COUNT、MAX、MIN、AVG、SUM