package com.example.demo;
import com.example.demo.core.configurer.ProjectConstant;
import com.google.common.base.CaseFormat;
import freemarker.template.TemplateExceptionHandler;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.*;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author jjp
* @Description: 代码生成器,根据数据表名称生成对应的Model、Mapper、Service、Controller简化开发。
* @date 2018/4/23 20:28
*/
public class CodeGenerator {
// JDBC配置,请修改为你项目的实际配置
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/demo";
private static final String JDBC_USERNAME = "root";
private static final String JDBC_PASSWORD = "root";
private static final String JDBC_DIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
// 模板位置
private static final String TEMPLATE_FILE_PATH = "src/test/java/resources/template/generator";
private static final String JAVA_PATH = "src/main/java"; // java文件路径
private static final String RESOURCES_PATH = "src/main/resources";// 资源文件路径
// 生成的Service存放路径
private static final String PACKAGE_PATH_SERVICE = packageConvertPath(ProjectConstant.SERVICE_PACKAGE);
// 生成的Service实现存放路径
private static final String PACKAGE_PATH_SERVICE_IMPL = packageConvertPath(ProjectConstant.SERVICE_IMPL_PACKAGE);
// 生成的Controller存放路径
private static final String PACKAGE_PATH_CONTROLLER = packageConvertPath(ProjectConstant.CONTROLLER_PACKAGE);
// @author
private static final String AUTHOR = "jjp";
// @date
private static final String DATE = new SimpleDateFormat("yyyy/MM/dd HH:mm").format(new Date());
/**
* genCode("输入表名");
* @param args
*/
public static void main(String[] args) {
genCode("sys_permission_init");
}
/**
* 通过数据表名称生成代码,Model 名称通过解析数据表名称获得,下划线转大驼峰的形式。 如输入表名称 "t_user_detail" 将生成
* TUserDetail、TUserDetailMapper、TUserDetailService ...
*
* @param tableNames 数据表名称...
*/
public static void genCode(String... tableNames) {
for (String tableName : tableNames) {
genCode(tableName);
}
}
/**
* 通过数据表名称生成代码 如输入表名称 "user_info"
* 将生成 UserInfo、UserInfoMapper、UserInfoService ...
*
* @param tableName 数据表名称
*/
public static void genCode(String tableName) {
genModelAndMapper(tableName);
genService(tableName);
genController(tableName);
}
public static void genModelAndMapper(String tableName) {
Context context = getContext();
JDBCConnectionConfiguration jdbcConnectionConfiguration = getJDBCConnectionConfiguration();
context.setJdbcConnectionConfiguration(jdbcConnectionConfiguration);
PluginConfiguration pluginConfiguration = getPluginConfiguration();
context.addPluginConfiguration(pluginConfiguration);
JavaModelGeneratorConfiguration javaModelGeneratorConfiguration = getJavaModelGeneratorConfiguration();
context.setJavaModelGeneratorConfiguration(javaModelGeneratorConfiguration);
SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration = getSqlMapGeneratorConfiguration();
context.setSqlMapGeneratorConfiguration(sqlMapGeneratorConfiguration);
JavaClientGeneratorConfiguration javaClientGeneratorConfiguration = getJavaClientGeneratorConfiguration();
context.setJavaClientGeneratorConfiguration(javaClientGeneratorConfiguration);
TableConfiguration tableConfiguration = new TableConfiguration(context);
tableConfiguration.setTableName(tableName);
tableConfiguration.setDomainObjectName(null);
context.addTableConfiguration(tableConfiguration);
List<String> warnings;
MyBatisGenerator generator;
try {
Configuration config = new Configuration();
config.addContext(context);
config.validate();
boolean overwrite = true;
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
warnings = new ArrayList<>();
generator = new MyBatisGenerator(config, callback, warnings);
generator.generate(null);
} catch (Exception e) {
throw new RuntimeException("生成Model和Mapper失败", e);
}
if (generator.getGeneratedJavaFiles().isEmpty() || generator.getGeneratedXmlFiles().isEmpty()) {
throw new RuntimeException("生成Model和Mapper失败:" + warnings);
}
String modelName = tableNameConvertUpperCamel(tableName);
System.out.println(modelName + ".java 生成成功");
System.out.println(modelName + "Mapper.java 生成成功");
System.out.println(modelName + "Mapper.xml 生成成功");
}
public static void genService(String tableName) {
try {
freemarker.template.Configuration cfg = getConfiguration();
//模板所需要的参数
Map<String, Object> data = new HashMap<>();
data.put("date", DATE);
data.put("author", AUTHOR);
String modelNameUpperCamel = tableNameConvertUpperCamel(tableName);
data.put("modelNameUpperCamel", modelNameUpperCamel);
data.put("modelNameLowerCamel", CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, modelNameUpperCamel));
data.put("basePackage", ProjectConstant.BASE_PACKAGE);
data.put("basePackageService", ProjectConstant.SERVICE_PACKAGE);
data.put("basePackageServiceImpl", ProjectConstant.SERVICE_IMPL_PACKAGE);
data.put("basePackageModel", ProjectConstant.MODEL_PACKAGE);
data.put("basePackageDao", ProjectConstant.MAPPER_PACKAGE);
File file = new File(JAVA_PATH + PACKAGE_PATH_SERVICE + modelNameUpperCamel + "Service.java");
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
cfg.getTemplate("service.ftl").process(data, new FileWriter(file));
System.out.println(modelNameUpperCamel + "Service.java 生成成功");
File file1 = new File(JAVA_PATH + PACKAGE_PATH_SERVICE_IMPL + modelNameUpperCamel + "ServiceImpl.java");
if (!file1.getParentFile().exists()) {
file1.getParentFile().mkdirs();
}
cfg.getTemplate("service-impl.ftl").process(data, new FileWriter(file1));
System.out.println(modelNameUpperCamel + "ServiceImpl.java 生成成功");
} catch (Exception e) {
throw new RuntimeException("生成Service失败", e);
}
}
public static void genController(String tableName) {
try {
freemarker.template.Configuration cfg = getConfiguration();
Map<String, Object> data = new HashMap<>();
data.put("date", DATE);
data.put("author", AUTHOR);
String modelNameUpperCamel = tableNameConvertUpperCamel(tableName);
data.put("baseRequestMapping", CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, modelNameUpperCamel));
data.put("modelNameUpperCamel", modelNameUpperCamel);
data.put("modelNameLowerCamel", CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, modelNameUpperCamel));
data.put("basePackage", ProjectConstant.BASE_PACKAGE);
没有合适的资源?快使用搜索试试~ 我知道了~
springboot+shiro+mybatis+redis+通用mapper+aop+CodeGenerator
共351个文件
xml:164个
class:86个
java:78个
5星 · 超过95%的资源 需积分: 5 25 下载量 55 浏览量
2018-06-13
14:26:09
上传
评论 2
收藏 269KB RAR 举报
温馨提示
可以直接运行,springboot+shiro+mybatis+redis+通用mapper+aop+CodeGenerator,redis和通用mapper集合在一起,并且代码可以自动生成,
资源推荐
资源详情
资源评论
收起资源包目录
springboot+shiro+mybatis+redis+通用mapper+aop+CodeGenerator (351个子文件)
CodeGenerator.class 12KB
WebConfigurer.class 9KB
AspectLog.class 8KB
AbstractService.class 5KB
UserInfoController.class 4KB
CustomRealm.class 4KB
ShiroServiceImpl.class 4KB
UploadActionUtil.class 4KB
RedisServiceImpl.class 4KB
DruidDataSourceConfigurer.class 4KB
RedisCache.class 4KB
XssFilter.class 4KB
SysPermissionInitController.class 4KB
WebConfigurer$2.class 4KB
SystemLogController.class 3KB
RolePermController.class 3KB
UserRoleController.class 3KB
SysRoleController.class 3KB
SysPermController.class 3KB
SystemLog.class 3KB
SystemLogConsumer.class 3KB
SwaggerConfigurer.class 3KB
SysRole.class 2KB
SysPerm.class 2KB
SpringContextUtils.class 2KB
ShiroConfigurer.class 2KB
RedisServiceImpl$5.class 2KB
RedisServiceImpl$4.class 2KB
RedisServiceImpl$1.class 2KB
RedisServiceImpl$3.class 2KB
RedisServiceImpl$6.class 2KB
RedisServiceImpl$2.class 2KB
WebConfigurer$1.class 2KB
UserInfo.class 2KB
XssHttpServletRequestWrapper.class 2KB
RedisConfigurer.class 2KB
MybatisConfigurer.class 2KB
RetResponse.class 2KB
RetResult.class 2KB
DruidMonitorConfigurer.class 2KB
WebConfigurer$3.class 2KB
MyRolesAuthorizationFilter.class 2KB
ShiroUtilsController.class 2KB
Interceptor1.class 2KB
SysPermissionInit.class 2KB
UserInfoServiceImpl.class 2KB
RedisController.class 1KB
UserRole.class 1KB
RolePerm.class 1KB
RetCode.class 1KB
UploadFileController.class 1KB
Service.class 1KB
StartupRunner1.class 1KB
XssFilterUtil.class 1KB
DemoApplication.class 1KB
SystemLogQueue.class 1KB
test.class 1KB
SystemLogServiceImpl.class 1KB
SysPermissionInitServiceImpl.class 1KB
UserRoleServiceImpl.class 1KB
RolePermServiceImpl.class 1KB
MultipartConfigurer.class 945B
ProjectConstant.class 876B
SysRoleServiceImpl.class 861B
ServiceException.class 768B
SysPermServiceImpl.class 738B
RedisService.class 725B
DemoApplicationTests.class 622B
SystemLogMapper.class 582B
RolePermMapper.class 564B
UserRoleMapper.class 564B
Mapper.class 554B
AnnotationLog.class 528B
UserInfoService.class 499B
ApplicationUtils.class 480B
SysPermissionInitService.class 438B
SystemLogService.class 437B
UserInfoMapper.class 431B
SysRoleMapper.class 428B
SysPermMapper.class 428B
SysPermissionInitMapper.class 424B
RolePermService.class 419B
UserRoleService.class 419B
ShiroService.class 298B
SysRoleService.class 283B
SysPermService.class 283B
mvnw.cmd 5KB
controller.ftl 3KB
service-impl.ftl 760B
service.ftl 323B
.gitignore 268B
index.html 138B
index.html 138B
demo.iml 17KB
maven-wrapper.jar 46KB
CodeGenerator.java 12KB
WebConfigurer.java 11KB
AspectLog.java 7KB
SystemLog.java 5KB
RedisServiceImpl.java 5KB
共 351 条
- 1
- 2
- 3
- 4
资源评论
- amber_01232018-08-01idea编辑器的。我用的eclipse。不过还是感谢分享
继往开来jjp
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功