RuoYi-Vue 前后端分离版代码浅析-代码生成模块(二)

585 阅读2分钟

这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

前言

本节介绍RuoYi-Vue的代码生成模块是如何进行配置生成代码的,它的可视化代码编辑模式对于开发者而言可以很好的解决重复代码编写问题,只需一键就可以将大部分的重复代码都生成出来,开发者可以将自己的注意力完全放在业务逻辑的编写上,解决掉无聊的增删改查。

修改代码时展示表信息

/**
 * 修改代码生成业务
 */
@PreAuthorize("@ss.hasPermi('tool:gen:query')")
@GetMapping(value = "/{talbleId}")
public AjaxResult getInfo(@PathVariable Long talbleId)
{
    GenTable table = genTableService.selectGenTableById(talbleId);
    List<GenTable> tables = genTableService.selectGenTableAll();
    List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId);
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("info", table);
    map.put("rows", list);
    map.put("tables", tables);
    return AjaxResult.success(map);
}

本接口是用来在页面上展示我们的对应的表格式的,这里其实可以使用对tables里面的数据利用tableId进行遍历来得到这个info字段,而不是多进行一次数据库查询。

image.png

genTableColumnService.selectGenTableColumnListByTableId 是对应将生成代码的gen_table_column子表的数据信息拿到的

image.png

对应的页面是

image.png

这里的数据是从数据库中查询出来的,那么它们是如何放入数据库中的呢

查询数据库列表

selectDbTableList是用来帮我们查询数据库中的所有要用来代码生成的表的语句,其sql语句如下

   select table_name, table_comment, create_time, update_time from information_schema.tables
   where table_schema = (select database())
   AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%'
   AND table_name NOT IN (select table_name from gen_table)  

从数据库的information_schema表中我们是可以得到很多数据库的有效地信息的,比如表数据,字段数据 select database()是用来查询当前我们数据库的名称的,然后通过限制table_schema为当前数据库名称,便可以将所有的数据表拿到,之后我们将qrtz(系统定时任务类)和gen(代码生成类)开头的这两种表去掉,最后再将已经放入代码生成数据表中的表排除掉,如此,我们就可以得到所有还没有生成代码的表,可以从中选出你想进行代码生成的表了。

导入表结构

importGenTable这个方法将对应的表结构和字段结构都导入了数据库中,这里的查询列信息的sql很有用,通过 information_schema库中的columns表来拿到对应的字段数据

   select column_name, 
   (case when (is_nullable = 'no'  &&  column_key != 'PRI') then '1' else null end) as is_required, 
   (case when column_key = 'PRI' then '1' else '0' end) as is_pk, 
   ordinal_position as sort, 
   column_comment, 
   (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type
   from information_schema.columns where table_schema = (select database()) and table_name = (#{tableName})

image.png

通过对columns表中的字段进行判断,如果不为空且不是主键,这时候是必须的,如果是主键,那就是is_pk设置为1,如此就可以将对应的需要生成代码的表的数据表结构和字段结构都放入数据库中了。在下一节中我们将讲解对应的生成代码的方法。