Skip to main content

用户模块设计


用户模块设计

数据库设计

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`
(
    `id`            bigint(20) unsigned                 NOT NULL AUTO_INCREMENT COMMENT '用户id',
    `name`          varchar(20) COLLATE utf8mb4_unicode_ci       DEFAULT NULL COMMENT '用户昵称',
    `avatar`        varchar(255) COLLATE utf8mb4_unicode_ci      DEFAULT NULL COMMENT '用户头像',
    `sex`           int(11)                                      DEFAULT NULL COMMENT '性别 1为男性,2为女性',
    `open_id`       char(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '微信openid用户标识',
    `active_status` int(11)                                      DEFAULT '2' COMMENT '在线状态 1在线 2离线',
    `last_opt_time` datetime(3)                         NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '最后上下线时间',
    `ip_info`       json                                         DEFAULT NULL COMMENT 'ip信息',
    `item_id`       bigint(20)                                   DEFAULT NULL COMMENT '佩戴的徽章id',
    `status`        int(11)                                      DEFAULT '0' COMMENT '使用状态 0.正常 1拉黑',
    `create_time`   datetime(3)                         NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    `update_time`   datetime(3)                         NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
    `is_delete`     tinyint(1)                                   DEFAULT '0' COMMENT '是否删除 0.未删除 1.已删除',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uniq_open_id` (`open_id`) USING BTREE,
    UNIQUE KEY `uniq_name` (`name`) USING BTREE,
    KEY `idx_create_time` (`create_time`) USING BTREE,
    KEY `idx_update_time` (`update_time`) USING BTREE,
    KEY `idx_active_status_last_opt_time` (`active_status`, `last_opt_time`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 20000
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci
  ROW_FORMAT = DYNAMIC COMMENT ='用户表';

MybatisPlus生成器

代码生成

public class MPGenerator {
    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator autoGenerator = new AutoGenerator();

        // 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL);// 指定数据库类型
        //---------------------------数据源-----------------------------------
        assembleDev(dataSourceConfig);// 配置数据源
        autoGenerator.setDataSource(dataSourceConfig);

        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOpen(false);
        // todo 要改输出路径
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/yunfei-chat-server/src/main/java/generator");
        // 设置作者名字
        globalConfig.setAuthor("yunfei");
        // 去掉service的I前缀,一般只需要设置service就行
        globalConfig.setServiceName("%sService");
        // 去掉Mapper的I前缀
        globalConfig.setMapperName("%sMapper");
        // globalConfig.setServiceImplName("%sMapper");
        autoGenerator.setGlobalConfig(globalConfig);

        // 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.yunfei.chat.user");// 自定义包的路径
        packageConfig.setEntity("domain.entity");
        packageConfig.setMapper("mapper");
        packageConfig.setController("controller");
        packageConfig.setServiceImpl("mapper");
        autoGenerator.setPackageInfo(packageConfig);

        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        // 是否使用Lombok
        strategyConfig.setEntityLombokModel(true);
        // 包,列的命名规则,使用驼峰规则
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
//        strategyConfig.setTablePrefix("t_");
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        // 字段和表注解
        strategyConfig.setEntityTableFieldAnnotationEnable(true);
        // todo 这里修改需要自动生成的表结构
        strategyConfig.setInclude(
                "user"
        );
        // 自动填充字段,在项目开发过程中,例如创建时间,修改时间,每次,都需要我们来指定,太麻烦了,设置为自动填充规则,就不需要我们赋值咯
        List<TableFill> list = new ArrayList<TableFill>();
        TableFill tableFill1 = new TableFill("create_time", FieldFill.INSERT);
        TableFill tableFill2 = new TableFill("update_time", FieldFill.INSERT_UPDATE);
        list.add(tableFill1);
        list.add(tableFill2);

        // 逻辑删除
        strategyConfig.setLogicDeleteFieldName("is_delete");
//        strategyConfig.setTableFillList(list);
        autoGenerator.setStrategy(strategyConfig);

        // 执行
        autoGenerator.execute();

    }

    // todo 这里修改你的数据源
    public static void assembleDev(DataSourceConfig dataSourceConfig) {
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("12345678");
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/yunfei_chat?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC");
    }

}

插件生成

个人比较喜欢使用插件来生成代码:

image-20240517114227139

再去生成对应的代码:

image-20240517114242751