MyBatis plus自动生成代码

image-20240316213036489

1.pom文件配置

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3</version>
</dependency>
<dependency>

温馨提示:

从上面的pom.xml配置可以看出,使用的mybatis版本为:3.5.3。不同的版本其实现自动生成代码的方式不同,特别是3.5.1及其以上的版本和之前的版本有很大区别。

这是官网中的说明:

image-20240316211558889

2.工具类具体代码实现

package com.mycompany.common.utils;import com.au.sa.common.services.CommonAbstractService;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Collections;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author xiaohuihui* @creteTime 2024-03-16 10:11* @description*/
@Slf4j
public class MyBatisAutoGeneratorUtil {/*** 数据库连接串*/public static final String DB_URL = "jdbc:mysql://{ip}:{port}/{dbName}?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=true&autoReconnect=true";/*** 数据库连接用户名*/public static final String DB_USER_NAME = "username";/*** 数据库连接密码*/public static final String DB_PASSWORD = "*****";/*** 注释的作者*/public static final String AUTHOR = "xiaohuihui";/*** 公共父类实体类中含有的字段*/private static final String[] SUPPER_ENTITY_CONTAINS_FIELD = {"delete_flag", "version_num", "creation_date", "created_by", "last_update_date", "last_updated_by"};/*** 生成的代码默认输出文件目录*/private static final String DEFAULT_OUT_PUT_DIR = "D://MyBatisPlusAutoGeneratorDir";private static final String RESP_OUT_PUT_DIR = "D://MyBatisPlusAutoGeneratorDir";/*** 默认包名称*/private static final String DEFAULT_PARENT_PACK = "com.au.sa.storeRebate";/*** 默认父级实体类全路径类 实体类继承的父类*/private static final String BASE_SUPER_ENTITY_CLASS_NAME = "com.au.sa.storeRebate.common.entity.BaseDbEntity";/*** 要生成代码的表名*/private static final String[] TABLE_NAMES = new String[]{"table_name"};public static void main(String[] args) {FastAutoGenerator.create(DB_URL, DB_USER_NAME, DB_PASSWORD).globalConfig(builder -> {builder.author(AUTHOR) // 设置作者.enableSwagger() // 开启 swagger 模式.outputDir(DEFAULT_OUT_PUT_DIR); // 指定输出目录}).packageConfig(builder -> {builder.parent("com.au.sa") // 设置父包名.moduleName("storeRebate") // 设置父包模块名.pathInfo(Collections.singletonMap(OutputFile.xml, DEFAULT_OUT_PUT_DIR)); // 设置mapperXml生成路径}).strategyConfig(builder -> {builder.addInclude(TABLE_NAMES) // 设置需要生成的表名.entityBuilder().enableTableFieldAnnotation().enableLombok().enableFileOverride().superClass(BASE_SUPER_ENTITY_CLASS_NAME).controllerBuilder().superClass(CommonAbstractService.class)//Controller想要继承的父类.enableHyphenStyle().enableRestStyle().enableFileOverride().formatFileName("%sController").serviceBuilder().enableFileOverride().formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImpl").mapperBuilder().enableFileOverride().enableBaseResultMap().enableBaseColumnList().formatMapperFileName("%sDao");}).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板.execute();// 生成Vo对象。如果不需要生成前端返回resp对象,可以不加,这段是自己加的,不是MyBatis-Plus提供produceViewObject(false, TABLE_NAMES);}/*** 根据表名生成VO对象,用于mybatis-plus代码生成以后再生成** @param isTablePrefix* @param tableNames*/private static void produceViewObject(boolean isTablePrefix, String... tableNames) {for (int i = 0; i < tableNames.length; i++) {String tableName = tableNames[i];tableName = isTablePrefix ? tableName.substring(tableName.indexOf("_") + 1) : tableName;String outPutDir = RESP_OUT_PUT_DIR + "/" + (DEFAULT_PARENT_PACK.replace(".", "/")) + "/resp/";String baseFileName = underline2Camel(tableName, false);try {File outFile = new File(outPutDir);if (!outFile.exists()) {outFile.mkdirs();}File voFile = new File(outFile, baseFileName + "Resp.java");if (!voFile.exists()) {voFile.createNewFile();}BufferedReader reader = new BufferedReader(new FileReader(DEFAULT_OUT_PUT_DIR + "/" + (DEFAULT_PARENT_PACK.replace(".", "/")) + "/entity/"+ baseFileName + ".java"));FileWriter fw = new FileWriter(voFile);String line = null;String description = null;String regex = "([\u4e00-\u9fa5]+)";while ((line = reader.readLine()) != null) {Matcher matcher = Pattern.compile(regex).matcher(line); //匹配字段描述if (matcher.find()) {description = matcher.group(1);}// 将实体类中的entity变为Voint index = line.indexOf(baseFileName);if (line.contains("package")) {line = StringUtils.substringBeforeLast(line, ".") + ".resp;";} else if (index > -1 && !line.contains("@ApiModel")) {if (line.contains("+")) {line = StringUtils.substring(line, 0, index + baseFileName.length()) + "{\" +"; //解决toString()} else {line = StringUtils.substring(line, 0, index + baseFileName.length()) + "{";}line = line.replace(baseFileName, baseFileName + "Resp");} else if (line.contains("@TableName")) {description = "";continue;} else if (line.contains("@TableField") || line.contains("@TableId")) {boolean required = true;for (String col : SUPPER_ENTITY_CONTAINS_FIELD) {if (line.contains(col) && !StringUtils.equals("version_num", col)) {required = false;break;}}description = "";continue;} else if (line.contains("@Accessors") || line.contains("@Override") || line.contains("@TableLogic") || line.contains("@Version")) {continue;}line += "\r\n";fw.write(line);}fw.close();reader.close();} catch (Exception e) {log.error(e.getMessage(), e);}}}/*** 下划线转驼峰法(默认小驼峰)** @param line       源字符串* @param smallCamel 大小驼峰,是否为小驼峰(驼峰,第一个字符是大写还是小写)* @return 转换后的字符串*/public static String underline2Camel(String line, boolean... smallCamel) {if (StringUtils.isBlank(line)) {return "";}StringBuffer sb = new StringBuffer();Pattern pattern = Pattern.compile("([A-Za-z\\d]+)(_)?");Matcher matcher = pattern.matcher(line);// 匹配正则表达式while (matcher.find()) {String word = matcher.group();// 当是true 或则是空的情况if ((smallCamel.length == 0 || smallCamel[0]) && matcher.start() == 0) {sb.append(Character.toLowerCase(word.charAt(0)));} else {sb.append(Character.toUpperCase(word.charAt(0)));}int index = word.lastIndexOf('_');if (index > 0) {sb.append(word.substring(1, index).toLowerCase());} else {sb.append(word.substring(1).toLowerCase());}}return sb.toString();}
}

3.相关配置说明

参考官网:MyBatis-Plus代码生成器配置

#数据库配置(DataSourceConfig)

#基础配置

属性说明示例
urljdbc 路径jdbc:mysql://127.0.0.1:3306/mybatis-plus
username数据库账号root
password数据库密码123456
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456").build();

#可选配置

方法说明示例
dbQuery(IDbQuery)数据库查询new MySqlQuery(),只在SQLQuery下生效
schema(String)数据库 schema(部分数据库适用)mybatis-plus
typeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert(),只在SQLQuery下生效
keyWordsHandler(IKeyWordsHandler)数据库关键字处理器new MySqlKeyWordsHandler()
typeConvertHandler(ITypeConvertHandler)类型转换器(默认)自定义实现ITypeConvertHandler,只在DefaultQuery下生效
databaseQueryClass(AbstractDatabaseQuery)数据库查询方式默认DefaultQuery.class(通用元数据), SQLQuery.class(SQL查询)
// 使用SQL查询的方式生成代码,属于旧的代码生成方式,通用性不是好,老的代码可以继续使用,适配数据库需要完成dbQuery和typeConvert的扩展,后期不再维护这种方式
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456").dbQuery(new MySqlQuery()).schema("mybatis-plus").typeConvert(new MySqlTypeConvert()).keyWordsHandler(new MySqlKeyWordsHandler()).databaseQueryClass(SQLQuery.class).build();// 使用元数据查询的方式生成代码,默认已经根据jdbcType来适配java类型,支持使用typeConvertHandler来转换需要映射的类型映射
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456").schema("mybatis-plus").keyWordsHandler(new MySqlKeyWordsHandler()).build();

#全局配置(GlobalConfig)

方法说明示例
disableOpenDir禁止打开输出目录默认值:true
outputDir(String)指定输出目录/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
author(String)作者名baomidou 默认值:作者
enableKotlin开启 kotlin 模式默认值:false
enableSwagger开启 swagger 模式默认值:false
dateType(DateType)时间策略DateType.ONLY_DATE 默认值: DateType.TIME_PACK
commentDate(String)注释日期默认值: yyyy-MM-dd
new GlobalConfig.Builder().fileOverride().outputDir("/opt/baomidou").author("baomidou").enableKotlin().enableSwagger().dateType(DateType.TIME_PACK).commentDate("yyyy-MM-dd").build();

#包配置(PackageConfig)

方法说明示例
parent(String)父包名默认值:com.baomidou
moduleName(String)父包模块名默认值:无
entity(String)Entity 包名默认值:entity
service(String)Service 包名默认值:service
serviceImpl(String)Service Impl 包名默认值:service.impl
mapper(String)Mapper 包名默认值:mapper
xml(String)Mapper XML 包名默认值:mapper.xml
controller(String)Controller 包名默认值:controller
other(String)自定义文件包名输出自定义文件时所用到的包名
pathInfo(Map<OutputFile, String>)路径配置信息Collections.singletonMap(OutputFile.mapperXml, “D://”)
new PackageConfig.Builder().parent("com.baomidou.mybatisplus.samples.generator").moduleName("sys").entity("po").service("service").serviceImpl("service.impl").mapper("mapper").xml("mapper.xml").controller("controller").other("other").pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")).build();

#模板配置(TemplateConfig)

方法说明示例
disable禁用所有模板
disable(TemplateType…)禁用模板TemplateType.ENTITY
entity(String)设置实体模板路径(JAVA)/templates/entity.java
entityKt(String)设置实体模板路径(kotlin)/templates/entity.java
service(String)设置 service 模板路径/templates/service.java
serviceImpl(String)设置 serviceImpl 模板路径/templates/serviceImpl.java
mapper(String)设置 mapper 模板路径/templates/mapper.java
mapperXml(String)设置 mapperXml 模板路径/templates/mapper.xml
controller(String)设置 controller 模板路径/templates/controller.java
new TemplateConfig.Builder().disable(TemplateType.ENTITY).entity("/templates/entity.java").service("/templates/service.java").serviceImpl("/templates/serviceImpl.java").mapper("/templates/mapper.java").mapperXml("/templates/mapper.xml").controller("/templates/controller.java").build();

#注入配置(InjectionConfig)

方法说明示例
beforeOutputFile(BiConsumer<TableInfo, Map<String, Object>>)输出文件之前消费者
customMap(Map<String, Object>)自定义配置 Map 对象Collections.singletonMap(“test”, “baomidou”)
customFile(Map<String, String>)自定义配置模板文件Collections.singletonMap(“test.txt”, “/templates/test.vm”) 方法 formatNameFunction 可以格式化文件,参考测试用例 H2CodeGeneratorTest.testCustomFileByList
new InjectionConfig.Builder().beforeOutputFile((tableInfo, objectMap) -> {System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());}).customMap(Collections.singletonMap("test", "baomidou")).customFile(Collections.singletonMap("test.txt", "/templates/test.vm")).build();

#策略配置(StrategyConfig)

方法说明示例
enableCapitalMode开启大写命名默认值:false
enableSkipView开启跳过视图默认值:false
disableSqlFilter禁用 sql 过滤默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
enableSchema启用 schema默认值:false,多 schema 场景的时候打开
likeTable(LikeTable)模糊表匹配(sql 过滤)likeTable 与 notLikeTable 只能配置一项
notLikeTable(LikeTable)模糊表排除(sql 过滤)likeTable 与 notLikeTable 只能配置一项
addInclude(String…)增加表匹配(内存过滤)include 与 exclude 只能配置一项 ,支持正则匹配、例如 ^t_.* 所有 t_ 开头的表名
addExclude(String…)增加表排除匹配(内存过滤)include 与 exclude 只能配置一项 ,支持正则匹配、例如 .*st$ 所有 st 结尾的表名
addTablePrefix(String…)增加过滤表前缀
addTableSuffix(String…)增加过滤表后缀
addFieldPrefix(String…)增加过滤字段前缀
addFieldSuffix(String…)增加过滤字段后缀
outputFile内置模板输出文件处理参考测试用例 H2CodeGeneratorTest.testOutputFile
entityBuilder实体策略配置
controllerBuildercontroller 策略配置
mapperBuildermapper 策略配置
serviceBuilderservice 策略配置
new StrategyConfig.Builder().enableCapitalMode().enableSkipView().disableSqlFilter().likeTable(new LikeTable("USER")).addInclude("t_simple").addTablePrefix("t_", "c_").addFieldSuffix("_flag").build();

#Entity 策略配置

方法说明示例
nameConvert(INameConvert)名称转换实现
superClass(Class<?>)设置父类BaseEntity.class
superClass(String)设置父类com.baomidou.global.BaseEntity
disableSerialVersionUID禁用生成 serialVersionUID默认值:true
enableFileOverride覆盖已生成文件默认值:false
enableColumnConstant开启生成字段常量默认值:false
enableChainModel开启链式模型默认值:false
enableLombok开启 lombok 模型默认值:false
enableRemoveIsPrefix开启 Boolean 类型字段移除 is 前缀默认值:false
enableTableFieldAnnotation开启生成实体时生成字段注解默认值:false
enableActiveRecord开启 ActiveRecord 模型默认值:false
versionColumnName(String)乐观锁字段名(数据库字段)versionColumnName与versionPropertyName二选一即可
versionPropertyName(String)乐观锁属性名(实体)versionColumnName与versionPropertyName二选一即可
logicDeleteColumnName(String)逻辑删除字段名(数据库字段)logicDeleteColumnName与logicDeletePropertyName二选一即可
logicDeletePropertyName(String)逻辑删除属性名(实体)logicDeleteColumnName与logicDeletePropertyName二选一即可
naming数据库表映射到实体的命名策略默认下划线转驼峰命名:NamingStrategy.underline_to_camel
columnNaming数据库表字段映射到实体的命名策略默认为 null,未指定按照 naming 执行
addSuperEntityColumns(String…)添加父类公共字段
addIgnoreColumns(String…)添加忽略字段
addTableFills(IFill…)添加表字段填充
addTableFills(List)添加表字段填充
idType(IdType)全局主键类型
convertFileName(ConverterFileName)转换文件名称
formatFileName(String)格式化文件名称
new StrategyConfig.Builder().entityBuilder().superClass(BaseEntity.class).disableSerialVersionUID().enableChainModel().enableLombok().enableRemoveIsPrefix().enableTableFieldAnnotation().enableActiveRecord().versionColumnName("version")//.versionPropertyName("version") .logicDeleteColumnName("deleted")//.logicDeletePropertyName("deleteFlag").naming(NamingStrategy.no_change).columnNaming(NamingStrategy.underline_to_camel).addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time").addIgnoreColumns("age").addTableFills(new Column("create_time", FieldFill.INSERT)).addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE)).idType(IdType.AUTO).formatFileName("%sEntity").build();

#Controller 策略配置

方法说明示例
superClass(Class<?>)设置父类BaseController.class
superClass(String)设置父类com.baomidou.global.BaseController
enableFileOverride覆盖已生成文件默认值:false
enableHyphenStyle开启驼峰转连字符默认值:false
enableRestStyle开启生成@RestController 控制器默认值:false
convertFileName(ConverterFileName)转换文件名称
formatFileName(String)格式化文件名称
new StrategyConfig.Builder().controllerBuilder().superClass(BaseController.class).enableHyphenStyle().enableRestStyle().formatFileName("%sAction").build();

#Service 策略配置

方法说明示例
superServiceClass(Class<?>)设置 service 接口父类BaseService.class
superServiceClass(String)设置 service 接口父类com.baomidou.global.BaseService
superServiceImplClass(Class<?>)设置 service 实现类父类BaseServiceImpl.class
superServiceImplClass(String)设置 service 实现类父类com.baomidou.global.BaseServiceImpl
enableFileOverride覆盖已生成文件默认值:false
convertServiceFileName(ConverterFileName)转换 service 接口文件名称
convertServiceImplFileName(ConverterFileName)转换 service 实现类文件名称
formatServiceFileName(String)格式化 service 接口文件名称
formatServiceImplFileName(String)格式化 service 实现类文件名称
new StrategyConfig.Builder().serviceBuilder().superServiceClass(BaseService.class).superServiceImplClass(BaseServiceImpl.class).formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImp").build();

#Mapper 策略配置

方法说明示例
superClass(Class<?>)设置父类BaseMapper.class
superClass(String)设置父类com.baomidou.global.BaseMapper
enableFileOverride覆盖已生成文件默认值:false
enableMapperAnnotation开启 @Mapper 注解默认值:false
enableBaseResultMap启用 BaseResultMap 生成默认值:false
enableBaseColumnList启用 BaseColumnList默认值:false
cache(Class<? extends Cache>)设置缓存实现类MyMapperCache.class
convertMapperFileName(ConverterFileName)转换 mapper 类文件名称
convertXmlFileName(ConverterFileName)转换 xml 文件名称
formatMapperFileName(String)格式化 mapper 文件名称
formatXmlFileName(String)格式化 xml 实现类文件名称
new StrategyConfig.Builder().mapperBuilder().superClass(BaseMapper.class).enableMapperAnnotation().enableBaseResultMap().enableBaseColumnList().cache(MyMapperCache.class).formatMapperFileName("%sDao").formatXmlFileName("%sXml").build();

#自定义模版支持(DTO\VO等)配置

#Freemarker模版支持(DTO\VO等)配置

/*** 代码生成器支持自定义[DTO\VO等]模版*/
public final class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {@Overrideprotected void outputCustomFile(@NotNull Map<String, String> customFile, @NotNull TableInfo tableInfo, @NotNull Map<String, Object> objectMap) {String entityName = tableInfo.getEntityName();String otherPath = this.getPathInfo(OutputFile.other);customFile.forEach((key, value) -> {String fileName = String.format(otherPath + File.separator + entityName + "%s", key);this.outputFile(new File(fileName), objectMap, value);});}
}

使用方式样例(其他细节参数请查看文档)

entityDTO.java.ftl 可参考源码内entity.java.ftl文件

FastAutoGenerator.create(url, username, password).globalConfig(builder -> {builder.author("abc") // 设置作者.enableSwagger() // 开启 swagger 模式.fileOverride() // 覆盖已生成文件.disableOpenDir() //禁止打开输出目录.outputDir(finalProjectPath + "/src/main/java"); // 指定输出目录}).packageConfig(builder -> {builder.parent("com.baomidou.mybatisplus.samples") // 设置父包名.moduleName("test") // 设置父包模块名.entity("model.entity") //设置entity包名.other("model.dto") // 设置dto包名.pathInfo(Collections.singletonMap(OutputFile.xml, finalProjectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径}).injectionConfig(consumer -> {Map<String, String> customFile = new HashMap<>();// DTOcustomFile.put("DTO.java", "/templates/entityDTO.java.ftl");consumer.customFile(customFile);});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/544408.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS NEXT应用开发—组件堆叠

介绍 本示例介绍运用Stack组件以构建多层次堆叠的视觉效果。通过绑定Scroll组件的onScroll滚动事件回调函数&#xff0c;精准捕获滚动动作的发生。当滚动时&#xff0c;实时地调节组件的透明度、高度等属性&#xff0c;从而成功实现了嵌套滚动效果、透明度动态变化以及平滑的组…

layui table列表重载后保持进度条位置不变

使用layui的table表格组件时&#xff0c;当我们操作了某行的修改后&#xff0c;刷新了页面&#xff0c;进度条则跳回到最上面。 除了layui高版本应该内置有方法解决了此问题&#xff0c;但是低版本需要另外想办法解决。 具体解决方式如下&#xff1a; 1.在编辑操作成功前&am…

Artemis Finance引领Metis流动性质押,并启动积分空投活动

在以太坊可扩展性解决方案中&#xff0c; Optimism、Arbitrum等Layer2链主要面临两个问题&#xff1a;欺诈/有效性证明以及去中心化排序器Sequencers。在实际的发展过程中&#xff0c;Optimism或Arbitrum等Layer2链仍然侧重于在欺诈证明和有效性证明方面进行努力&#xff0c;在…

springboot爱看漫画小程序的设计与实现

摘 要 相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低爱看漫画的运营人员成本&#xff0c;实现了爱看漫画的标准化、制度化、程序化的管理&#xff0c;有效地防止了爱看漫画的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、…

C# 面试题及答案整理,最新面试题

解释C#中的垃圾回收机制是如何工作的。 C#中的垃圾回收&#xff08;GC&#xff09;机制是CLR&#xff08;公共语言运行时&#xff09;的一部分&#xff0c;负责自动管理内存&#xff0c;具体工作原理如下&#xff1a; 1、分代回收&#xff1a; GC将对象分为0代、1代和2代三代…

十四、自回归(AutoRegressive)和自编码(AutoEncoding)语言模型

参考自回归语言模型&#xff08;AR&#xff09;和自编码语言模型&#xff08;AE&#xff09; 1 自回归语言模型&#xff08; AR&#xff09; 自回归语言模型&#xff08;AR&#xff09;就是根据上文内容&#xff08;或下文内容&#xff09;预测下一个&#xff08;或前一个&…

wsl2+docker-desktop环境,个别命令卡住问题

*在win11本地搭建了一套开发环境&#xff0c;之前一直用得很舒服&#xff0c;最近发现些问题&#xff0c;查了几天&#xff0c;记录下解决方案。*环境信息&#xff1a; 问题&#xff1a;在wsl2的ubuntu虚拟机中&#xff0c;有时会出现个别命令运行卡住不返回 像上图&#xff0…

springboot基于spring boot的在线答题微信小程序

摘 要 在线答题微信小程序是考试中重要的一环&#xff0c;在线答题是学生获取任务信息的主要渠道。为了方便学生能够在网站上查看任务信息、考试&#xff0c;于是开发了基于 springboot框架设计与实现了一款简洁、轻便的在线答题微信小程序。本微信小程序解决了在线答题事务中的…

基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真。太阳黑子是人们最早发现也是人们最熟悉的一种太阳表面活动。因为太阳内部磁场发生变化&#xff0c;…

sqllab第二十五A关通关笔记

知识点&#xff1a; 数值型注入双写绕过 oorranand这里不能用错误注入&#xff08;固定错误回显信息&#xff09;联合注入 测试发现跟25关好像一样&#xff0c;就是过滤了and or # 等东西 构造payload:id1/0 发现成功运算了&#xff0c;这是一个数值型的注入 构造payload:id…

滑块验证码

1.这里针对滑块验证给了一个封装的组件verifition&#xff0c;使用直接可以调用 2.组件目录 3.每个文件的内容 3.1 Api文件中只有一个index.js文件&#xff0c;用来存放获取滑块和校验滑块结果的api import request from /router/axios//获取验证图片 export function reqGe…

Spark-Transformation以及Action开发实战

文章目录 创建RDDTransformation以及ActionTransformation开发Action开发RDD持久化共享变量创建RDD RDD是Spark的编程核心,在进行Spark编程是,首要任务就是创建一个初始的RDDSpark提供三种创建RDD方式:集合、本地文件、HDFS文件 集合:主要用于本地测试,在实际部署到集群运…