若依代码生成器-Domain代码生成篇(一)
  TEZNKK3IfmPf 2023年11月12日 26 0

若依代码生成器的前一段代码的阅读,我们了解了若依代码生成器的一些逻辑,包括通过数据库的information_schema. TABLES查询表信息,以及information_schema. COLUMNS查询指定表的列信息,将其转换到表gen_tablegen_table_column中的数据行,以便后续查询与代码转换。

今天我们继续来看若依系统中是如何自动生成domain代码的。

在系统菜单“系统工具”->"代码生成"中以及可以看到我们导入的表my_user,如下图所示:

若依代码生成器-Domain代码生成篇(一)

 这一行右侧有5个按钮,分别是预览、编辑、删除、同步、生成代码。

预览

我们点击“预览”,在弹出窗口中可以看到可以预览生成的代码包括:domain.java, mapper.java, service.java, serviceImpl.java,controller.java, mapper.xml, sql, api.js, index.vue。

其中domain.java, mapper.java, mapper.xml, sql都是与数据库紧密相关的,domain即生成对应数据库表的类,mapper与sql中则包含数据库基本的增删改查。

我们来研究一下domain的生成逻辑。

通过F12调试,发现点击预览的接口为:/tool/gen/preview/?id, 如下图所示:

若依代码生成器-Domain代码生成篇(一)

接口代码经过查找,controller中如下:

/**
     * 预览代码
     */
    @PreAuthorize("@ss.hasPermi('tool:gen:preview')")
    @GetMapping("/preview/{tableId}")
    public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException
    {
        Map<String, String> dataMap = genTableService.previewCode(tableId);
        return AjaxResult.success(dataMap);
    }

 通过逐层分解,我们找到其中的一些关键代码:

mybatis的collections一对多查询

看过前两篇文章的小伙伴们知道,gen_table中的一行数据对应gen_table_column中的多行数据,那么mybatis是如何查询这种结果的呢?

这里有一个很好的示例。

其关键代码如下所图所示(源代码位于项目ruoyi-generator/resources/GenTableMapper.xml中)

若依代码生成器-Domain代码生成篇(一)

具体的查询语句如下图所示:

若依代码生成器-Domain代码生成篇(一)

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   22天前   48   0   0 java
  TEZNKK3IfmPf   2024年05月31日   31   0   0 数据库mysql
TEZNKK3IfmPf