跳到主要内容

用户模块设计

数据库设计

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