2026山东大学软件学院项目实训个人blog(二)

张开发
2026/4/13 14:45:29 15 分钟阅读

分享文章

2026山东大学软件学院项目实训个人blog(二)
目录一、本期个人核心任务二、核心开发与技术落地一功能分析二库表设计1.核心设计思路2.SQL3.设计注意事项三MyBatis Flex框架适配1.MyBatis Flex 核心优势与选型原因2.构造代码生成器3.查看生成的结果四数据模型开发1.实体类2.枚举类三、开发过程中的问题与解决方案问题 1MyBatis Flex 代码生成器无法读取 application.yml 数据源配置问题 2用户表主键雪花算法生成策略与数据库自增冲突四、实训收获与技术成长五、后续开发计划一、本期个人核心任务完成用户模块的需求分析与方案设计涵盖需求拆解、库表结构化设计、MyBatis Flex 框架适配及数据模型开发的全链路工作明确用户模块核心交互逻辑与技术实现路径。二、核心开发与技术落地一功能分析围绕 AI 零代码平台的使用流程、账号安全、后台管理三大场景我把用户模块拆成一套完整的 “从注册到注销” 功能覆盖普通用户和管理员两类角色1.用户注册支持用账号 密码 确认密码注册后台自动校验账号是否重复、密码格式是否合法保证平台账号唯一、安全。2.用户登录通过账号密码完成身份验证登录后保持会话状态让用户在使用 AI 生成、模板管理等功能时不用反复登录。3.获取当前登录用户信息前端随时能拿到当前登录人的信息用于页面展示、权限判断和个人中心。4.用户注销一键退出登录清空登录状态保护账号安全切换账号更方便。5.用户权限控制按角色做权限隔离普通用户用 AI 生成功能、管理自己的项目、修改个人信息管理员拥有平台最高权限能进后台、管理所有用户。6.用户管理仅管理员管理员可以在后台搜索用户、查看用户列表、删除违规账号实现对整个平台用户的统一管控适配 AI 零代码平台的运营需求。二库表设计库名ai_code_mother表名user1.核心设计思路我通过围绕“身份验证、信息存储、权限管控、数据安全” 四大核心目标设计用户表结构身份验证层通过userAccount唯一userPassword作为核心登录凭证保障账号唯一性与登录安全性信息存储层覆盖userName昵称、userAvatar头像、userProfile简介等个性化信息满足用户画像基础需求权限管控层通过userRole字段区分角色类型为后续权限拦截提供核心依据数据安全与可维护层引入createTime创建时间、updateTime更新时间、editTime编辑时间、isDelete逻辑删除字段实现数据全生命周期追溯与软删除避免物理删除导致的数据丢失。2.SQL-- 用户表 create table if not exists user ( id bigint auto_increment comment id primary key, userAccount varchar(256) not null comment 账号, userPassword varchar(512) not null comment 密码, userName varchar(256) null comment 用户昵称, userAvatar varchar(1024) null comment 用户头像, userProfile varchar(512) null comment 用户简介, userRole varchar(256) default user not null comment 用户角色user/admin, editTime datetime default CURRENT_TIMESTAMP not null comment 编辑时间, createTime datetime default CURRENT_TIMESTAMP not null comment 创建时间, updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment 更新时间, isDelete tinyint default 0 not null comment 是否删除, UNIQUE KEY uk_userAccount (userAccount), INDEX idx_userName (userName) ) comment 用户 collate utf8mb4_unicode_ci;3.设计注意事项1.时间字段差异化设计editTime仅在用户主动修改昵称、头像、简介等个人信息时通过业务代码更新用于统计用户信息维护行为updateTime由数据库自动触发更新覆盖所有字段如密码修改、角色变更用于数据审计与追溯。二者分工明确满足不同维度的时间统计需求。2.索引优化策略对userAccount添加唯一索引既利用数据库层面杜绝重复账号又提升登录时的账号查询效率对userName添加普通索引优化管理员按昵称搜索用户的场景性能平衡索引开销与查询效率。3.数据安全设计userPassword字段预留足够长度用于存储加密后的密码避免明文存储isDelete字段实现逻辑删除既满足 “删除” 业务需求又保留数据追溯能力符合系统数据安全规范。三MyBatis Flex框架适配1.MyBatis Flex 核心优势与选型原因传统项目中常用 MyBatis Plus 作为数据访问层增强框架这次项目我们尝试了更轻量的MyBatis Flex它同样是传统操作数据库的 MyBatis 框架的增强框架但优势很明显三大优势更轻量MyBatis Flex除了MyBatis本身再无任何第三方依赖因此会带来更高的自主性、把控性和稳定性尤其适配 AI 平台轻量化部署的需求更灵活提供灵活的 QueryWrapper 查询封装支持多表关联、复杂条件查询、逻辑删除、乐观锁等场景可快速适配用户模块 “角色筛选、模糊搜索、软删除查询” 等核心需求更高的性能MyBatis Flex通过独特的架构没有任何MyBatis拦截器、在SQL执行的过程中没有任何的SQL Parse因此相比传统增强框架性能指数级提升。另一大优势在Mybatis Flex中内置了一个名称为mybatis-flex-codegen的模块提供了可以通过数据库表生成代码的功能。当我们把数据库表设计完成后就可以使用其快速生成Entity、Mapper、Service、Controller代码能大幅提高我们的开发效率。2.构造代码生成器基于项目配置文件自动解析数据源自定义生成规则实现用户表代码的自动化生成// MyBatis Flex 代码生成器 (实际开发代码) ​ public class MyBatisCodeGenerator { ​ // 要生成的表名 private static final String[] TABLE_NAMES {...表名...}; ​ public static void main(String[] args) { // 获取数据元信息 Dict dict YamlUtil.loadByPath(application.yml); MapString, Object dataSourceConfig dict.getByPath(spring.datasource); String url String.valueOf(dataSourceConfig.get(url)); String username String.valueOf(dataSourceConfig.get(username)); String password String.valueOf(dataSourceConfig.get(password)); // 配置数据源 HikariDataSource dataSource new HikariDataSource(); dataSource.setJdbcUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); ​ // 创建配置内容 GlobalConfig globalConfig createGlobalConfig(); ​ // 通过 datasource 和 globalConfig 创建代码生成器 Generator generator new Generator(dataSource, globalConfig); ​ // 生成代码 generator.generate(); } ​ ​ // 详细配置见https://mybatis-flex.com/zh/others/codegen.html public static GlobalConfig createGlobalConfig() { // 创建配置内容 GlobalConfig globalConfig new GlobalConfig(); ​ // 设置根包建议先生成到一个临时目录下生成代码之后再移动到对应的项目目录 globalConfig.getPackageConfig() .setBasePackage(...根包...); ​ // 设置表前缀和只生成哪些表setGenerateTable 未配置时生成所有表 globalConfig.getStrategyConfig() .setGenerateTable(TABLE_NAMES) // 设置逻辑删除的默认字段名称 .setLogicDeleteColumn(isDelete); ​ // 设置生成 entity 并启用 Lombok globalConfig.enableEntity() .setWithLombok(true) .setJdkVersion(21); ​ // 设置生成 mapper globalConfig.enableMapper(); globalConfig.enableMapperXml(); ​ // 设置生成 Service globalConfig.enableService(); globalConfig.enableServiceImpl(); ​ // 设置生成 Controller globalConfig.enableController(); ​ // 设置生成注释比如生成的时间和作者避免后续多余的代码改动 globalConfig.getJavadocConfig() .setAuthor() .setSince(); return globalConfig; } }3.查看生成的结果生成的代码覆盖用户模块基础开发骨架Entity 层自动映射数据库字段包含 Lombok 注解、字段注释、逻辑删除注解等Mapper 层自动生成基础 CRUD 方法支持自定义 SQL 扩展Service 层封装通用增删改查逻辑可快速扩展业务方法Controller 层生成 RESTful 风格接口雏形包含登录、注册、用户信息查询等基础接口定义。四数据模型开发1.实体类生成的代码也许不能完全满足我们的要求比如数据库实体类可以手动更改其字段配置指定主键生成策略。比如id默认是连续生成的容易被爬虫抓取同时为了适配分布式部署场景下的 ID 唯一性需求我更换策略为ASSIGN_ID雪花算法生成。修改User类的代码如下Table(user) public class User implements Serializable { /** * 主键ID * 替换默认自增策略为雪花算法避免ID连续泄露数据量提升分布式场景下的ID唯一性 */ Id(keyType KeyType.Generator, value KeyGenerators.snowFlakeId) private Long id; }2.枚举类对于用户角色这样值的数量有限的、可枚举的字段我定义一个枚举类便于在项目中获取值、减少枚举值输入错误的情况。设计说明核心方法getEnumByValue支持从存储值反向获取枚举实例便于业务层判断角色isValidRole校验角色值合法性避免非法角色值入库Getter public enum UserRoleEnum { USER(用户, user), ADMIN(管理员, admin); private final String text; private final String value; UserRoleEnum(String text, String value) { this.text text; this.value value; } /** * 根据 value 获取枚举 * * param value 枚举值的value * return 枚举值 */ public static UserRoleEnum getEnumByValue(String value) { if (ObjUtil.isEmpty(value)) { return null; } for (UserRoleEnum anEnum : UserRoleEnum.values()) { if (anEnum.value.equals(value)) { return anEnum; } } return null; } }三、开发过程中的问题与解决方案问题 1MyBatis Flex 代码生成器无法读取 application.yml 数据源配置现象运行代码生成器时抛出 “数据源配置为空” 异常无法解析 application.yml 中的数据库连接信息。原因配置文件编码格式非 UTF-8导致解析乱码。解决方案统一编码格式将 application.yml 编码格式改为 UTF-8避免解析乱码增加异常处理在代码生成器中添加配置解析异常捕获打印详细日志便于定位问题。// 使用 UTF-8 读取 yml InputStream inputStream ResourceUtil.getStream(application.yml); Yaml yaml new Yaml(); MapString, Object yamlMap yaml.load(inputStream);问题 2用户表主键雪花算法生成策略与数据库自增冲突现象实体类配置雪花算法生成 ID 后插入数据时数据库报 “主键重复” 或 “ID 字段不能为空” 异常。原因数据库表中 id 字段仍配置为auto_increment与雪花算法生成 ID 冲突MyBatis Flex 未正确加载主键生成策略导致插入时未自动生成 ID。解决方案修改数据库表结构移除 id 字段的auto_increment属性保留主键约束增强实体类注解确认Id注解的keyType与value配置正确补充雪花算法生成器的依赖MyBatis Flex 内置雪花算法无需额外依赖四、实训收获与技术成长这周把用户模块从需求到设计再到代码骨架完整走了一遍收获还是很多的学会结合业务场景做表结构设计不是随便建表而是考虑安全、性能、可扩展第一次上手MyBatis Flex感受到轻量框架的优势也掌握了代码生成器的实际使用理解了主键策略、索引、逻辑删除、枚举这些工程化细节代码更规范、更健壮五、后续开发计划核心业务逻辑落地推进 AI 零代码生成平台的核心业务开发基于现有框架实现应用生成、模板管理等功能。持续优化对登录、查询等高频接口做简单压测优化 SQL 和查询速度提升平台体验。

更多文章