jDaoMySQL

jDaoMySQL 用于生成 dao 层和 Vo,即 Entity、Repository、Manager 和 Vo

Q&A

  1. 为什么要将 Vo 也一同生成?

在实际项目实施中发现,一般 Controller 的 Qo 是一个接口对应一个,但是 Vo 还是要整合一下,以便于未来新增字段时,我们可以通过设置通用的 Vo,确保全部的接口都添加上字段,例如 SysUserBaseVo 增加了 gender 字段,那么全部引用该 Vo 的接口就都会增加上该字段

Entity 里面的枚举值应该通过 enums 统一管理,然后生成的 Vo 的字段也应该保持住枚举值,而不是 String,但是现在由于 Entity 和 Vo 一起生成,所以没办法处理掉该问题,所以请小伙伴手动再处理下 Vo,主要是枚举值的处理

  1. 为什么生成三个 Vo?

目前系统自动生成了三个 Vo,分别为:

  • BaseVo:基础的 Vo,例如只有用户名、头像、手机号,属于基础 Vo,可以放在订单中
  • ListVo:列表型的 Vo,根据业务需求,一般范围比 BaseVo 大
  • Vo:常规 Vo,一般与 Entity 的属性对应

在实际项目中,可能还需要 DetailVo 等,那么就需要自己封装了

jDaoMySQL-v3.groovy 的使用

前置条件

idea 结合 Groovy 脚本来快速生成代码,那么要求首先要安装 Groovy,Groovy 的安装请自行百度

C:\Users\Lenovo>groovy -version
Groovy Version: 3.0.9 JVM: 1.8.0_291 Vendor: Oracle Corporation OS: Windows 10

C:\Users\Lenovo>

配置脚本

脚本配置文件在项目根目录下的jCoder.json中,主要定义如下:

{
  "workModuleFolder": "developer-user", //工作目录
  "workModulePackage": "com.qrqy.developer.user", //应用包名
  "sdkModuleFolder": "developer-user", //Module的目录
  "sdkModulePackage": "com.qrqy.developer.user" //module的包名
}

使用 jDaoMySQL.groovy

第一步,idea 连接数据库

idea 要连上开发数据库

连接数据库

第二步,放置 groovy 脚本

将 groovy 脚本 copy 到数据库扩展脚本目录下

jDaoMySQL-v3.groovy

连接数据库

连接数据库

第三步,点击库表,生成代码

右键表,执行 groovy 脚本,生成代码

连接数据库

注意哪些事情

一般情况,枚举值需要手动创建一下,枚举值统一放在 enums 包下,Entity 的引用为

    /**
     * 员工类别,USER:用户;ADMIN:管理员
     */
    @Column(name = "type")
    @Enumerated(EnumType.STRING)
    private UserTypeEnum type;

自己家里一下相应的包,摆摆目录

都生成了哪些文件

├─main
│  ├─java
│  │  └─com
│  │      └─qrqy
│  │          └─developer
│  │              └─user
│  │                  ├─config
│  │                  ├─controller
│  │                  │  └─user
│  │                  ├─dao         //生成了dao
│  │                  │  ├─entity
│  │                  │  └─repository
│  │                  ├─data
│  │                  │  ├─role
│  │                  │  └─user
│  │                  ├─enums
│  │                  │  ├─role
│  │                  │  └─user
│  │                  ├─manager     //生成了Manager
│  │                  ├─model       //生成了Vo
│  │                  │  └─vo
│  │                  ├─service
│  │                  └─utils

如何跨表关联

JPA 适合处理业务逻辑,通过 ORM 的方式,我们不再编写 Mapper,只关注业务,但是JPA 的查询不友好,JPA 通过该@OneToMany 和@OneToOne 等方式查询,本质上是通过 sql 在数据库中单次查询再补入数据...效率比较低

那么,目前一个基本的方案是:对于部分通用的跨表关联业务,形成视图,通过视图查询,补充数据

该方案适合于紧密关联的数据,例如碧桂园小程序用户表中有个 community_id(社区 id),100%的场景都需要在查询用户的时候把其所属的社区关联出来,那么就可以建设一个 user_community_view 的视图,未来通过视图进行关联

如何获取随机数

orderby 中,输入rand()即可完成搜索条件的随机获取

        orderBy("rand()", null)
        Specification query = new BaseSqlQuery(qo)
                .append("questionIdNotIn", questionIdNotIn)
                .orderBy("rand()", null);

建立视图

/**
  社区管理员表进行关联
 */
CREATE VIEW community_user_view AS
(
SELECT community_user.*,
       USER.real_name     AS real_name,
       USER.avatar        AS avatar,
       USER.phone_number  AS phone_number,
       community.community_name,
       community.community_address,
       community.province AS community_province,
       community.city     AS communtiy_city,
       community.area     AS community_area
FROM biz_community_user AS community_user
         LEFT JOIN biz_community AS community ON community_user.community_id = community.community_id
         LEFT JOIN sys_user AS USER
ON community_user.user_id = USER.user_id
    )

建立 Entity、Repository、Manager

package com.isart.bgy.dao.entity.view;

import com.isart.bgy.enums.community.user.CommunityUserTypeEnum;
import com.isart.bgy.enums.user.AuditStatusTypeEnum;
import com.qrqy.developer.common.entity.CommonEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.io.Serializable;

/**
 * @author TerryQi
 * @since 2022/7/24 12:23
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "community_user_view")
@EntityListeners(AuditingEntityListener.class)
public class CommunityUserView extends CommonEntity implements Serializable {

    private static final long serialVersionUID = 4831922156324491124L;

    /**
     * PK
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "community_user_id")
    private Integer communityUserId;

    /**
     * 物业人员id
     */
    @Column(name = "user_id")
    private Integer userId;

    /**
     * 园区id
     */
    @Column(name = "community_id")
    private Integer communityId;

    /**
     * 工号
     */
    @Column(name = "employee_no")
    private String employeeNo;

    /**
     * 人员类型,ADMIN:社区管理员;MANAGER:物业人员
     */
    @Column(name = "type")
    @Enumerated(EnumType.STRING)
    private CommunityUserTypeEnum type;

    /**
     * 审核状态,WAITING:待审核;APPROVED:审核通过;REJECTED:审核驳回
     */
    @Column(name = "audit_status")
    @Enumerated(EnumType.STRING)
    private AuditStatusTypeEnum auditStatus;

    /**
     * 手机号
     */
    @Column(name = "phone_number")
    private String phoneNumber;
    /**
     * 真实名称
     */
    @Column(name = "real_name")
    private String realName;
    /**
     * 头像图片
     */
    @Column(name = "avatar")
    private String avatar;

    /**
     * 园区名称
     */
    @Column(name = "community_name")
    private String communityName;

    /**
     * 园区地址
     */
    @Column(name = "community_address")
    private String communityAddress;

    /**
     * 园区省份
     */
    @Column(name = "community_province")
    private String communityProvince;

    /**
     * 园区城市
     */
    @Column(name = "community_city")
    private String communityCity;

    /**
     * 园区行政区
     */
    @Column(name = "community_area")
    private String communityArea;
}

基本要求

下载 jDaoMySQL

框架下面的 jDaoMySQL 是准确的,建议下载框架,copy 里面的 jDaoMySQL,这里可以下载学习

JDaoMySQL 脚本

Last Updated:
Contributors: TerryQi