package com.example.utils.generator;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.compress.utils.Lists;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* mybatis代码生成器
*
* @date 2021-3-10
*/
public class MybatisCodeGenerator {
private static final DruidDataSource ds = new DruidDataSource();
private static final String schemaName = "x-admin"; // 数据库名称,必填
private static final String[] table = {"book", ""}; // 必填,第一个是表名,第二个是实体类的名字
private static final String modelName = "图书"; // 必填
//=========================================以上内容必填===================================================//
static {
// 必填
ds.setUrl("jdbc:mysql://localhost:3306/" + schemaName + "?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8");
ds.setUsername("root");
ds.setPassword("123456");
}
private static final String BaseFilePath = System.getProperty("user.dir") + "/src/main/java/com/example/";
private static final String space4 = " ";
private static final String space6 = space4 + " ";
private static final String space8 = space4 + space4;
private static final String space12 = space4 + space8;
public static void main(String[] args) throws Exception {
if (StrUtil.isBlank(table[0])) {
System.err.println("请完善配置");
return;
}
String entityName = getEntityName();
// 创建entity
createEntity(table[0], entityName);
createMapper(entityName);
createService(entityName);
createController(entityName, table[0]);
createXml(entityName);
// html
createVueHtml(entityName, table[0]);
}
/**
* 获取数据库对象
*
* @param tableName
* @return
* @throws SQLException
*/
static List<TableColumn> getTableColumns(String tableName) throws SQLException {
String sql = "SELECT table_name,column_name,data_type, column_comment FROM information_schema.COLUMNS WHERE table_schema = ? and table_name = ?";
List<Entity> user = Db.use(ds).query(sql, schemaName, tableName);
List<TableColumn> columnList = Lists.newArrayList();
for (Entity entity : user) {
TableColumn tableColumn = new TableColumn();
tableColumn.setTableName(entity.getStr("table_name"));
tableColumn.setColumnName(entity.getStr("column_name"));
tableColumn.setDataType(convertDataType(entity.getStr("data_type")));
tableColumn.setColumnComment(entity.getStr("column_comment"));
columnList.add(tableColumn);
}
return columnList;
}
/**
* 生成entity
*
* @throws SQLException
*/
static void createEntity(String tableName, String entityName) throws SQLException {
List<TableColumn> columnList = getTableColumns(tableName);
StringBuilder entityHeadBuild = StrUtil.builder()
.append("package com.example.entity;\n\n")
.append("import lombok.Data;\n")
.append("import com.baomidou.mybatisplus.annotation.TableName;\n")
.append("import com.baomidou.mybatisplus.annotation.IdType;\n")
.append("import com.baomidou.mybatisplus.extension.activerecord.Model;\n")
.append("import com.baomidou.mybatisplus.annotation.TableId;\n\n");
StringBuilder entityBodyBuild = StrUtil.builder()
.append("@Data\n")
.append("@TableName(\"").append(tableName).append("\")\n")
.append("public class ").append(entityName).append(" extends Model<").append(entityName).append("> {\n")
.append(space4).append("/**\n")
.append(space6).append("*").append(" 主键\n")
.append(space6).append("*/\n")
.append(space4).append("@TableId(value = \"id\", type = IdType.AUTO)\n")
.append(space4).append("private Long id;\n\n");
for (TableColumn tableColumn : columnList) {
String columnName = tableColumn.getColumnName();
if (!"id".equals(columnName)) {
// 注释
if (StrUtil.isNotBlank(tableColumn.getColumnComment())) {
entityBodyBuild
.append(space4).append("/**\n")
.append(space6).append("* ").append(tableColumn.getColumnComment()).append(" \n")
.append(space6).append("*/\n");
}
entityBodyBuild.append(space4).append("private ").append(tableColumn.getDataType()).append(" ").append(StrUtil.toCamelCase(columnName)).append(";\n\n");
}
}
// 查看是否需要额外导入包
boolean dateExists = columnList.stream().anyMatch(tableColumn -> tableColumn.getDataType().equals("Date"));
if (dateExists) {
entityHeadBuild.append("import java.util.Date;\n");
}
boolean decimalExists = columnList.stream().anyMatch(tableColumn -> tableColumn.getDataType().equals("BigDecimal"));
if (decimalExists) {
entityHeadBuild.append("import java.math.BigDecimal;\n");
}
entityHeadBuild.append("\n");
entityBodyBuild.append("}");
FileUtil.writeString(entityHeadBuild.append(entityBodyBuild).toString(), BaseFilePath + "/entity/" + entityName + ".java", "UTF-8");
System.out.println(entityName + "Entity生成成功!");
}
/**
* 生成mapper
*/
static void createMapper(String entityName) {
Map<String, Object> map = new HashMap<>();
map.put("entityName", entityName);
String format = StrUtil.format(FileUtil.readUtf8String(BaseFilePath + "/utils/generator/template/mapper.template"), map);
FileUtil.writeString(format, BaseFilePath + "/mapper/" + entityName + "Mapper" + ".java", "UTF-8");
System.out.println(entityName + "Mapper生成成功!");
}
/**
* 生成service
*/
static void createService(String entityName) {
String lowerName = entityName.substring(0, 1).toLowerCase() + entityName.substring(1);
Map<String, Object> map = new HashMap<>();
map.put("entityName", entityName);
map.put("lowerName", lowerName);
String format = StrUtil.format(FileUtil.readUtf8String(BaseFilePath + "/utils/generator/template/service.template"), map);
FileUtil.writeString(format, BaseFilePath + "/service/" + entityName + "Service" + ".java", "UTF-8");
System.out.println(entityName + "Service生成成功!");
}
/**
* 生成controller
*
* @param entityName
*/
static void createController(String entityName, String tableName) throws SQLException {
String lowerEntityName = entityName.substring(0, 1).toLowerCase() + entityName.substring(1);
StringBuilder exportCode = new StringBuilder();
StringBuilder importCode = new StringBuilder();
List<TableColumn> tableColumns = getTableColumns(tableName);
int count = 1;
for (TableColumn tableColumn : tableColumns) {
exportCode.append(space12 + "row.put(\"" + tableColumn.getColumnComment() + "\", obj.get" + toFirstUpper(tableColumn.getColumnName()) + "());\n");
if (tableColumn.getColumnName().equals("id")) {
continue;
}
String value;
if("Integer".equals(tableColumn.getDataType())) {
value = "Integer.valueOf((String) row.get(" + count++ + "))";
} else if("Double".equals(tableColumn.getDataType()))
没有合适的资源?快使用搜索试试~ 我知道了~
基于Spring Boot+Vue框架的学生综合素质测评系统设计源码
共565个文件
js:222个
xml:98个
css:72个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 199 浏览量
2024-10-03
12:50:23
上传
评论
收藏 22.74MB ZIP 举报
温馨提示
本项目是一款基于Spring Boot和Vue框架的学生综合素质测评系统设计源码,包含567个文件,涵盖222个JavaScript脚本文件、98个XML配置文件、72个CSS样式文件、33个Java源代码文件、33个.class字节码文件、32个.map映射文件、30个HTML文件、12个PNG图片文件和8个JPG图片文件。该项目作为Java课程项目(毕业设计)成果,体现了创作者的辛勤付出,值得点赞。
资源推荐
资源详情
资源评论
收起资源包目录
基于Spring Boot+Vue框架的学生综合素质测评系统设计源码 (565个子文件)
MybatisCodeGenerator.class 15KB
UserController.class 14KB
User.class 7KB
UserService.class 7KB
PermissionController.class 6KB
LogController.class 6KB
NoticeController.class 6KB
RoleController.class 6KB
FileController.class 5KB
PermissionService.class 4KB
Permission.class 4KB
Role.class 4KB
Log.class 4KB
GlobalExceptionHandler.class 3KB
Notice.class 3KB
ListHandler.class 2KB
LogService.class 2KB
Result.class 2KB
SwaggerConfig.class 2KB
WebMvcConfig.class 2KB
CorsConfig.class 2KB
AuthInterceptor.class 1KB
TableColumn.class 1KB
Application.class 1KB
CustomException.class 893B
MybatisPlusConfig.class 705B
NoticeService.class 677B
RoleService.class 663B
PermissionMapper.class 310B
NoticeMapper.class 298B
RoleMapper.class 292B
UserMapper.class 292B
LogMapper.class 289B
element.css 227KB
element.css 227KB
skin.css 71KB
skin.css 71KB
skin.css 71KB
skin.css 71KB
skin.min.css 60KB
skin.min.css 60KB
skin.min.css 59KB
skin.min.css 59KB
skin.mobile.css 24KB
skin.mobile.css 24KB
skin.mobile.css 24KB
skin.mobile.css 24KB
content.css 24KB
content.css 24KB
content.inline.css 24KB
content.inline.css 24KB
content.inline.css 24KB
content.inline.css 24KB
content.css 23KB
content.css 23KB
content.min.css 21KB
content.min.css 21KB
content.inline.min.css 21KB
content.inline.min.css 21KB
content.inline.min.css 21KB
content.inline.min.css 21KB
content.min.css 21KB
content.min.css 21KB
skin.mobile.min.css 21KB
skin.mobile.min.css 21KB
skin.mobile.min.css 21KB
skin.mobile.min.css 21KB
music.css 10KB
music.css 10KB
audio.css 6KB
audio.css 6KB
content.css 2KB
content.css 2KB
content.css 2KB
content.css 2KB
content.css 2KB
content.css 2KB
content.css 2KB
content.css 2KB
base.css 2KB
base.css 2KB
content.min.css 2KB
content.min.css 2KB
content.min.css 1KB
content.min.css 1KB
content.min.css 1KB
content.min.css 1KB
content.min.css 1KB
content.min.css 1KB
skin.shadowdom.css 866B
skin.shadowdom.css 866B
skin.shadowdom.css 866B
skin.shadowdom.css 866B
skin.shadowdom.min.css 815B
skin.shadowdom.min.css 815B
skin.shadowdom.min.css 815B
skin.shadowdom.min.css 815B
content.mobile.css 727B
content.mobile.css 727B
content.mobile.css 727B
共 565 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
lly202406
- 粉丝: 2926
- 资源: 5471
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 推荐一款JTools的call-this-method插件
- html+css网页设计马林旅行社移动端4个页面.zip
- Coda Hale Metrics 库的 Go 移植.zip
- java学籍管理系统源码带本地搭建教程数据库 MySQL源码类型 WebForm
- php+mysql学生成绩查询(系统)
- Bazel 的 Go 规则.zip
- Android ListView下拉刷新 Demo.zip
- Python实现基于一维卷积神经网络(1D-CNN)的多元时间序列分类源码+文档说明
- java基于springBoot课程评价系统源码数据库 MySQL源码类型 WebForm
- 5G工业无线路由器说明书
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功