MyBatis-plus 代码生成器配置
数据库配置(DataSourceConfig)
基础配置
| 属性 | 说明 | 示例 |
|---|---|---|
| url | jdbc 路径 | 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 | 实体策略配置 | |
| controllerBuilder | controller 策略配置 | |
| mapperBuilder | mapper 策略配置 | |
| serviceBuilder | service 策略配置 |
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<IFill>) | 添加表字段填充 | |
| 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);});
相关文章:
MyBatis-plus 代码生成器配置
数据库配置(DataSourceConfig) 基础配置 属性说明示例urljdbc 路径jdbc:mysql://127.0.0.1:3306/mybatis-plususername数据库账号rootpassword数据库密码123456 new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","…...
框架设计的核心要素
我们的框架应该给用户提供哪些构建产物?产物的模块格式如何?当用户没有以预期的方式使用框架时,是否应该打印合适的警告信息从而提供更好的开发体验,让用户快速定位问题?开发版本的构建和生产版本的构建有何区别&#…...
LeetCode - 26. 删除有序数组中的重复项 (C语言,快慢指针,配图)
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路一:快慢指针 在数组中,快慢指针就是两个整数下标,定义 fast 和 slow 这里我们从下标1开始(下标0的数据就1个,没有重复项)&…...
C#不安全代码
在C#中,“不安全代码”(unsafe code)通常指的是那些直接操作内存地址的代码。它允许开发者使用指针等低级别的数据结构,这些在通常的安全代码(safe code)中是不允许的。C# 的不安全代码提供了一种方式&…...
《C++避坑神器·二十二》VS能正常运行程序,但运行exe程序无响应解决办法
原因是某个文件只是放在了项目路径下,没有放在exe路径下,比如Json文件原来只放在了mlx项目下,导致VS可以运行,但运行exe无响应或报错如下: 两种方式修改: 1、把Json文件拷贝一份放到exe路径下 2、利用生成…...
lua调用C/C++的函数,十分钟快速掌握
系列文章目录 lua调用C\C动态库函数 系列文章目录摘要环境使用步骤你需要有个lua环境引入库码代码lua代码 摘要 在现代软件开发中,Lua作为一种轻量级脚本语言,在游戏开发、嵌入式系统等领域广泛应用。Lua与C/C的高度集成使得开发者能够借助其灵活性和高…...
自定义GPT已经出现,并将影响人工智能的一切,做好被挑战的准备了吗?
原创 | 文 BFT机器人 OpenAI凭借最新突破:定制GPT站在创新的最前沿。预示着个性化数字协助的新时代到来,ChatGPT以前所未有的精度来满足个人需求和专业需求。 从本质上讲,自定义GPT是之前的ChatGPT的高度专业化版本或代理,但自定…...
vue中一个页面引入多个相同组件重复请求的问题?
⚠️!!!此内容需要了解一下内容!!! 1、会使用promise??? 2、 promise跟 async 的区别??? async 会终止后面的执行,后续…...
Uniapp连接iBeacon设备——实现无线定位与互动体验(实现篇)
export default { data() { return { iBeaconDevices: [], // 存储搜索到的iBeacon设备 deviceId: [], data: [], url: getApp().globalData.url, innerAudioContext: n…...
【ceph】ceph集群删除pool报错: “EPERM: pool deletion is disabled“
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
【微信小程序】使用npm包
1、小程序对npm的支持与限制2、Vant Weapp通过 npm 安装修改 app.json修改 project.config.json构建 npm 包 3、使用4、定制全局主题样式5、API Promise化 1、小程序对npm的支持与限制 目前,小程序中已经支持使用npm安装第三方包, 从而来提高小程序的开发…...
【开发记录篇】第二篇:SQL创建分区表
实现分区表注意事项 分区字段必须在主键中存在 使用时间分区时,字段类型不支持 timestamp,需改为 datetime 年分区示例 下表中使用 insert_time 时间进行分区 CREATE TABLE t_log (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 日志ID,inse…...
vue 使用 this.$router.push 传参数,接参数的 query或params 两种方法示例
背景:vue项目 使用this.$router.push进行路由跳转时,可以通过query或params参数传递和接收参数。 通过query参数传递参数: // 传递参数 this.$router.push({path: /target,query: {id: 1,name: John} }); // 接收参数 this.$route.query.id …...
rk3588 usb网络共享连接
出门在外总会遇到傻 X 地方 没有能连接公网的 网口给香橙派连网 而我的香橙派5plus 没有wifi模块。。。话不多说 在手机上看一眼手机的mac地址, 在rk3588 上执行以下命令: sudo ifconfig usb0 down sudo ifconfig usb0 hw ether 58:F2:FC:5D:D4:7A //该m…...
shell 拒绝恶意连接脚本 centos7.x拒绝恶意连接脚本
1. crontab -l 脚本频率: */2 * * * * /bin/bash /home/shell/deny.sh 2. 脚本: rm -rf /home/shell/ip_list cat /var/log/secure | grep "Failed password for" | awk {print$(NF-3)} | sort | uniq -c > /home/shell/ip_list #cat /va…...
【系统架构设计】计算机公共基础知识: 2 计算机系统基础知识
目录 一 计算机系统组成 二 操作系统 三 文件系统 四 系统性能 一 计算机系统组成...
什么是代理模式,用 Python 如何实现 Proxy(代理 或 Surrogate)对象结构型模式?
什么是代理模式? 代理(Proxy)是一种结构型设计模式,其目的是通过引入一个代理对象来控制对另一个对象的访问。代理对象充当目标对象的接口,这样客户端就可以通过代理对象间接地访问目标对象,从而在访问过程…...
国内领先的五大API接口供应商
API(Application Programming Interface)接口,现在很多应用系统中常用的开放接口,对接相应的系统、软件功能,简化专业化的程序开发。作者用过的国内比较稳定的API接口供应商有如下几家,大家可以参考选择&am…...
第十九章 Java绘图
一,Java绘图类 19.1.1Graphics类 Graphics类是所有图形上下文的抽象基类,它允许应用程序在组件以及闭屏图像上进行绘制。 可实现直线,矩形,多边形,椭圆,圆弧等形状和文本,图片的绘制制作。 …...
【C++面向对象】13. 接口 / 抽象类*
文章目录 【 1. 抽象类 】1.1 抽象类的定义1.2 抽象类的应用条件1.3 实例 【 2. 设计策略 】 接口描述了类的行为和功能,而不需要完成类的特定实现。C 接口是使用 抽象类(abstract base class,也称为ABC) 来实现的。 【 1. 抽象类…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
