关于秒杀设计的探索与思考(一)
springboot+redis+mybatisPlus+mysql
1.分享一个mybatisPlus关于自动创建包结构和类名的好办法
(1) 引入相关依赖
<!--mybatisPlus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.2</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--页面模板引擎依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
(2)创建自动生成工具类
public static final String[] tableNames = {"stock","stock_order"};//此处可加多张表
public static final String packageName = "com.just.sxmiaosha";
public void generator(){
AutoGenerator autoGenerator = new AutoGenerator();
GlobalConfig globalConfig = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
globalConfig.setOutputDir(projectPath + "/src/main/java");
globalConfig.setAuthor("just");
globalConfig.setOpen(false);
globalConfig.setDateType(DateType.ONLY_DATE);
globalConfig.setFileOverride(true);
globalConfig.setBaseColumnList(true);
globalConfig.setBaseResultMap(true);
globalConfig.setServiceName("%sService");
autoGenerator.setGlobalConfig(globalConfig);
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT");
dataSourceConfig.setUsername("");//数据库账号
dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
dataSourceConfig.setPassword("");//数据库账号
dataSourceConfig.setDbType(DbType.MYSQL);
autoGenerator.setDataSource(dataSourceConfig);
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent(packageName);
packageConfig.setController("controller");
packageConfig.setEntity("entity");
autoGenerator.setPackageInfo(packageConfig);
InjectionConfig injectionConfig = new InjectionConfig() {
@Override
public void initMap() {
}
};
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输入文件名称
return projectPath + "/src/main/resources/dao/" + packageConfig.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
autoGenerator.setCfg(injectionConfig);
autoGenerator.setGlobalConfig(globalConfig);
autoGenerator.setTemplate(new TemplateConfig().setXml(null));
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
strategyConfig.setEntityLombokModel(true);
strategyConfig.setCapitalMode(true);
strategyConfig.setEntitySerialVersionUID(true);
// strategyConfig.setSuperEntityColumns("id", "create_by", "create_time", "update_by", "update_time");//基类实体的字段
strategyConfig.setControllerMappingHyphenStyle(true);
strategyConfig.setTablePrefix(packageConfig.getModuleName() + "_");
strategyConfig.setInclude(tableNames);
autoGenerator.setStrategy(strategyConfig);
autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
autoGenerator.execute();
}
(3)执行单元测试,查看效果
@Autowired
private MysqlGenerator mysqlGenerator;
@Test
void mysqlGenerator() {
mysqlGenerator.generator();
}
(4)查看效果如下
该结构可能不满足实际项目开发的需要,可自行做增改,出于好奇和好玩,也解决了部分命名书写错误或困难的烦恼。