MyBatis-Plus——代码生成器(3.5.1+版本)

news2024/7/6 20:07:51

文章目录

    • 配置
      • 数据源配置(DataSource)
      • 全局配置(GlobalConfig)
      • 包配置(PackageConfig)
      • 策略配置(StrategyConfig)
      • 模板引擎配置(TemplateEngine)
    • 代码生成器测试样例
      • 步骤:
        • 1、创建测试数据库 mp
        • 2、创建一个 Spring-Boot 项目
        • 3、在 pom.xml 中导入相关依赖
        • 4、编写一个mian方法,加上框架
        • 5、进行数据源配置
        • 6、进行全局配置
        • 7、进行 包配置
        • 8、策略配置
        • 9、模板引擎配置
        • 10、执行
      • 执行效果演示:
    • 附1:快速生成样例代码
    • 附2:交互式生成样例代码

QQ截图20211121165840

MyBatis-Plus 官方文档:https://mp.baomidou.com/guide/generator-new.html

image-20211121150529787

这是官网上的文档,从官方文档中给快速生成代码中,可以看出代码生成器的配置结构为:


    //1、配置数据源
    FastAutoGenerator.create("url", "username", "password")
        //2、全局配置
        .globalConfig(...)
        //3、包配置
        .packageConfig(...)
        //4、策略配置
        .strategyConfig(...)
        //5、模板引擎配置
        .templateEngine(...)
        //6、执行
        .execute();

我们只需要通过填空的方式去配置数据源(DataSource),全局配置(GlobalConfig),包配置(PackageConfig),策略配置(StrategyConfig)和模板引擎配置(TemplateEngine)即可。

官方文档上也给出了对于每一个配置我们可以进行什么操作。

配置

数据源配置(DataSource)

属性说明示例
urljdbc路径jdbc:mysql://127.0.0.1:3306/mybatis-plus
username数据库账号root
password数据库密码123456
dbQuery(IDbQuery)数据库查询new MySqlQuery()
schema(String)数据库schema(部分数据库适用)mybatis-plus
typeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler)数据库关键字处理器new MySqlKeyWordsHandler()

全局配置(GlobalConfig)

方法说明示例
fileOverride覆盖已生成文件默认值:false
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=Date 默认值: DateType.TIME_PACK=LocalDateTime
commentDate(String)注释日期默认值: yyyy-MM-dd

包配置(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
mapperXml(String)Mapper XML 包名默认值:mapper.xml
controller(String)Controller 包名默认值:controller
other(String)自定义文件包名输出自定义文件时所用到的包名
pathInfo(Map<OutputFile, String>)路径配置信息Collections.singletonMap(OutputFile.mapperXml, “D://”)

策略配置(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 只能配置一项
addExclude(String…)增加表排除匹配(内存过滤)include 与 exclude 只能配置一项
addTablePrefix(String…)增加过滤表前缀
addTableSuffix(String…)增加过滤表后缀
addFieldPrefix(String…)增加过滤字段前缀
addFieldSuffix(String…)增加过滤字段后缀
entityBuilder实体策略配置
controllerBuildercontroller 策略配置
mapperBuildermapper 策略配置
serviceBuilderservice 策略配置

模板引擎配置(TemplateEngine)

默认 Velocity ;可选模板引擎 Beetl 或 Freemarker。

模板引擎代码
Velocity默认.templateEngine(new VelocityTemplateEngine())
Freemarker可选.templateEngine(new FreemarkerTemplateEngine())
Beetl可选.templateEngine(new BeetlTemplateEngine())

代码生成器测试样例

那么知道配置之后我们可以自己写一个操作一下。

步骤:

1、创建测试数据库 mp

CREATE DATABASE mp;

USE `mp`;

/*Table structure for table `student` */

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` varchar(50) DEFAULT NULL COMMENT '姓名',
  `score` double DEFAULT NULL COMMENT '成绩',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Table structure for table `user` */

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(50) DEFAULT NULL COMMENT '密码',
  `create_time` date DEFAULT NULL COMMENT '创建时间',
  `modify_time` date DEFAULT NULL COMMENT '最后一次修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
FieldTypeComment
idint用户id
usernamevarchar(50)用户名
passwordvarchar(50)密码
create_timedate创建时间
modify_timedate最后一次修改时间
FieldTypeComment
idint学号
namevarchar(50)名字
scoredouble成绩

2、创建一个 Spring-Boot 项目

image-20211121144541404

3、在 pom.xml 中导入相关依赖

<!--spring-boot-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBootTest-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<!--swagger-->
<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>1.6.3</version>
</dependency>
<!--lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
<!--mysql 驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>
<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.4</version>
</dependency>
<!--mybatis-plus-generator 生成器-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>
<!--velocity-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>
<!--freemarker-->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>
<!--beetl 模板-->
<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>3.8.1.RELEASE</version>
</dependency>

注:模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker,实际使用中只导入使用模板对应的依赖即可,不用全部导入。

4、编写一个mian方法,加上框架

public static void main(String[] args) {
    //1、配置数据源
    FastAutoGenerator.create("url", "username", "password")
        //2、全局配置
        .globalConfig(...)
        //3、包配置
        .packageConfig(...)
        //4、策略配置
        .strategyConfig(...)
        //5、模板引擎配置
        .templateEngine(...)
        //6、执行
        .execute();
}

5、进行数据源配置

public static void main(String[] args) {
    //1、配置数据源
    FastAutoGenerator.create("jdbc:mysql://localhost:3306/mp", "root", "123456")
        //2、全局配置
        .globalConfig(...)
        //3、包配置
        .packageConfig(...)
        //4、策略配置
        .strategyConfig(...)
        //5、模板引擎配置
        .templateEngine(...)
        //6、执行
        .execute();
}

6、进行全局配置

注:3.5.1+版本开始支持 lambda 表达式

	//2、全局配置
	.globalConfig(builder -> {
    	builder.author("Jie") // 设置作者名
        	.outputDir(System.getProperty("user.dir") + "/src/main/java")   //设置输出路径
        	.commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
        	.dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
        	.fileOverride()   //覆盖之前的文件
        	.enableSwagger()   //开启 swagger 模式
        	.disableOpenDir();   //禁止打开输出目录,默认打开
	});

7、进行 包配置

	//3、包配置
	.packageConfig(builder -> {
    	builder.parent("com") // 设置父包名
        	.moduleName("mp")   //设置模块包名
        	.entity("entity")   //pojo 实体类包名
        	.service("service") //Service 包名
        	.serviceImpl("serviceImpl") // ***ServiceImpl 包名
        	.mapper("mapper")   //Mapper 包名
        	.xml("mapper")  //Mapper XML 包名
        	.controller("controller") //Controller 包名
        	.other("utils") //自定义文件包名
        	.pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper"))    //配置 **Mapper.xml 路径信息:项目的 resources 目录的 Mapper 目录下
	});

8、策略配置

策略配置中需要对 Mapper,Service,Entity,Controller 类的生成策略进行单独的配置。

	//4、策略配置
	.strategyConfig(builder -> {
    	builder.addInclude("user", "student") // 设置需要生成的数据表名
        	.addTablePrefix("t_", "c_") // 设置过滤表前缀

            //4.1、Mapper策略配置
        	.mapperBuilder()
        	.superClass(BaseMapper.class)   //设置父类
        	.formatMapperFileName("%sMapper")   //格式化 mapper 文件名称
        	.enableMapperAnnotation()       //开启 @Mapper 注解
        	.formatXmlFileName("%sXml"); //格式化 Xml 文件名称
        
        	//4.2、service 策略配置
        	.serviceBuilder()
        	.formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
        	.formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl

        	//4.3、实体类策略配置
        	.entityBuilder()
        	.enableLombok() //开启 Lombok
        	.disableSerialVersionUID()  //不实现 Serializable 接口,不生产 SerialVersionUID
        	.logicDeleteColumnName("deleted")   //逻辑删除字段名
        	.naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命
        	.columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命
        	.addTableFills(
        		new Column("create_time", FieldFill.INSERT),
        		new Column("modify_time", FieldFill.INSERT_UPDATE)
    		)   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间
        	.enableTableFieldAnnotation()       // 开启生成实体时生成字段注解

        	//4.4、Controller策略配置
        	.controllerBuilder()
        	.formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController
        	.enableRestStyle()  //开启生成 @RestController 控制器
        	
})

9、模板引擎配置

	//5、模板引擎
	.templateEngine(new VelocityTemplateEngine())	//默认
    /*
    .templateEngine(new FreemarkerTemplateEngine())
    .templateEngine(new BeetlTemplateEngine())
    */

10、执行

	//6、执行
	.execute();

执行效果演示:

注:这里使用的是附2的交互式生成,两者源码几乎没有区别。

代码自动生成效果

image-20211121162318620

附1:快速生成样例代码


public class Generator {

    public static void main(String[] args) {
        //1、配置数据源
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/yeb", "root", "123456")
                //2、全局配置
                .globalConfig(builder -> {
                    builder.author("Jie") // 设置作者名
                            .outputDir(System.getProperty("user.dir") + "/src/main/java")   //设置输出路径:项目的 java 目录下
                            .commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
                            .dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
                            .fileOverride()   //覆盖之前的文件
                            .enableSwagger()   //开启 swagger 模式
                            .disableOpenDir();   //禁止打开输出目录,默认打开
                })
                //3、包配置
                .packageConfig(builder -> {
                    builder.parent("com") // 设置父包名
                            .moduleName("mp")   //设置模块包名
                            .entity("pojo")   //pojo 实体类包名
                            .service("service") //Service 包名
                            .serviceImpl("serviceImpl") // ***ServiceImpl 包名
                            .mapper("mapper")   //Mapper 包名
                            .xml("mapper")  //Mapper XML 包名
                            .controller("controller") //Controller 包名
                            .other("utils") //自定义文件包名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper"));    //配置 mapper.xml 路径信息:项目的 resources 目录下
                })
                //4、策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("user", "student") // 设置需要生成的数据表名
                            .addTablePrefix("t_", "c_") // 设置过滤表前缀

                            //4.1、Mapper策略配置
                            .mapperBuilder()
                            .superClass(BaseMapper.class)   //设置父类
                            .formatMapperFileName("%sMapper")   //格式化 mapper 文件名称
                            .enableMapperAnnotation()       //开启 @Mapper 注解
                            .formatXmlFileName("%sXml")//格式化 Xml 文件名称

                            //4.2、service 策略配置
                            .serviceBuilder()
                            .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
                            .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl

                            //4.3、实体类策略配置
                            .entityBuilder()
                            .enableLombok() //开启 Lombok
                            .disableSerialVersionUID()  //不实现 Serializable 接口,不生产 SerialVersionUID
                            .logicDeleteColumnName("deleted")   //逻辑删除字段名
                            .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命
                            .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命
                            .addTableFills(
                                    new Column("create_time", FieldFill.INSERT),
                                    new Column("modify_time", FieldFill.INSERT_UPDATE)
                            )   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间
                            .enableTableFieldAnnotation()       // 开启生成实体时生成字段注解

                            //4.4、Controller策略配置
                            .controllerBuilder()
                            .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController
                            .enableRestStyle();  //开启生成 @RestController 控制器
                })
                //5、模板
                .templateEngine(new VelocityTemplateEngine())
                /*
                    .templateEngine(new FreemarkerTemplateEngine())
                    .templateEngine(new BeetlTemplateEngine())
                */
                
                //6、执行
                .execute();
    }
}

附2:交互式生成样例代码

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("=====================数据库配置=======================");
    System.out.println("请输入 URL");
    String url = scan.next();
    System.out.println("请输入 username");
    String username = scan.next();
    System.out.println("请输入 password");
    String password = scan.next();

    FastAutoGenerator.create(url, username, password)
        // 全局配置
        .globalConfig((scanner, builder) -> builder.author(scanner.apply("=====================全局配置=======================\n请输入作者名称?"))
                      .outputDir(System.getProperty("user.dir") + "/src/main/java")
                      .commentDate("yyyy-MM-dd hh:mm:ss")
                      .dateType(DateType.TIME_PACK)
                      .enableSwagger()
                      .fileOverride()
                      .enableSwagger()
                      .disableOpenDir()
                     )
        // 包配置
        .packageConfig((scanner, builder) -> builder.parent(scanner.apply("=====================包配置=======================\n请输入包名?"))
                       .moduleName(scanner.apply("请输入父包模块名?"))
                       .entity("entity")
                       .service("service")
                       .serviceImpl("serviceImpl")
                       .mapper("mapper")
                       .xml("mapper")
                       .other("utils")
                       .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper"))
                      )
        // 策略配置
        .strategyConfig((scanner, builder) -> {
            builder.addInclude(getTables(scanner.apply("=====================策略配置=======================\n请输入表名,多个英文逗号分隔?所有输入 all")))
                .serviceBuilder()
                .formatServiceFileName("%sService")
                .formatServiceImplFileName("%sServiceImpl")
                .entityBuilder()        //实体类策略配置
                .enableLombok()         //开启 Lombok
                .disableSerialVersionUID()
                .logicDeleteColumnName("deleted")        //逻辑删除字段
                .naming(NamingStrategy.underline_to_camel)
                .columnNaming(NamingStrategy.underline_to_camel)
                .addTableFills(new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE))
                .enableTableFieldAnnotation()       // 开启生成实体时生成字段注解
                .controllerBuilder()
                .formatFileName("%sController")
                .enableRestStyle()
                .mapperBuilder()
                .superClass(BaseMapper.class)
                .formatMapperFileName("%sMapper")
                .enableMapperAnnotation()       //@mapper
                .formatXmlFileName("%sMapper");
        })
        /*
        模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker
        .templateEngine(new BeetlTemplateEngine())
        .templateEngine(new FreemarkerTemplateEngine())
                     */
        .execute();
}

// 处理 all 情况
protected static List<String> getTables(String tables) {
    return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动手学深度学习(第二版)学习笔记 第二章

官网&#xff1a;http://zh.d2l.ai/ 视频可以去b站找 记录的是个人觉得不太熟的知识 第二章 预备知识 代码地址&#xff1a;d2l-zh/pytorch/chapter_preliminaries 2.1 数据操作 2.1. 数据操作 — 动手学深度学习 2.0.0 documentation 如果只想知道张量中元素的总数&#…

jenkins下载与简单使用

1.jenkins下载 因为我仍然使用的是jdk1.8进行开发&#xff0c;所以我下载的是jenkins2.332.1版本&#xff08;jenkins2.346.1版本在2022年末不再支持java8&#xff0c;如果项目使用的是jdk11可以继续使用该jenkins版本&#xff09;&#xff0c;更多版本下载请点击jenkins下载 …

企业级信息系统开发学习笔记1.3 初探Spring——利用注解配置类取代Spring配置文件

文章目录零、本讲学习目标一、课程引入二、利用注解配置类取代Spring配置文件&#xff08;一&#xff09;打开项目&#xff08;二&#xff09;创建新包&#xff08;三&#xff09;拷贝类与接口&#xff08;四&#xff09;创建注解配置类&#xff08;五&#xff09;创建测试类&a…

kubeadmd的部署+Dashboard+私有仓库

目录 一、kubeadm部署 1.1、环境准备 ​编辑 1.2、修改主机名 1.3、所有节点修改hosts文件 ​编辑 1.4、调整内核参数 1.5、参数生效 二、所有节点安装docker 三、所有节点安装kubeadm、kubelet和kubectl 四、 部署K8S集群 4.1、查看初始化需要的镜像 4.2、在 mas…

高压放大器在HIFU换能器和声场测量研究中的应用

实验名称&#xff1a;高压放大器在HIFU换能器和声场测量研究中的应用研究方向&#xff1a;医学超声测试目的&#xff1a;HIFU声场具有特殊的声场特性&#xff0c;要求用于声场检测的方法能够避免对声场造成干扰&#xff0c;同时避免高温高压和空化响应带来的冲击。目前报道的一…

音视频基本概念之物理音频和数字音频

一&#xff1a;物理音频初中物理知识 这里列举一些重要的可能和编码相关的重要物理知识 声音的频率是周期的倒数&#xff0c;它表示的是声音在1秒钟内的周期数&#xff0c;单位是赫兹(Hz)。千赫(kHz),即1000Hz,表示每秒振动1000次。声音按频率可作如下划分: 次声 0&#xff5…

【系统服务实战】tomcat服务的安装实战

未来要更新的专栏&#xff08;此表格后面会继续完善&#xff09; 专栏系列学习路线完成情况云原生系列linux基本功系列-基础命令汇总已更新51个命令云原生系列linux基本功系列-系统服务实战正在更新文章目录前言一. tomcat的概述1.1 什么是tomcat1.2 tomcat的官网二. tomcat单…

论文阅读:InfoNeRF: Ray Entropy Minimization for Few-Shot Neural Volume Rendering

中文标题&#xff1a;基于射线熵最小化的少视角神经辐射场 创新点 通过对每条射线密度施加熵约束来最小化稀疏视角带来的潜在重建不一致性。此外&#xff0c;为了缓解所有训练图像都是从几乎冗余的视点获取时潜在的退化问题&#xff0c;我们进一步将空间平滑性约束纳入到估计…

Apollo Config原理浅析

文章目录1. 简介2. 基本功能3. Apollo关键功能实现原理3.1 框架整体原理3.1.1 Apollo角色3.1.2 框架执行原理3.1.3 整体组成3.2 细节实现3.2.1 Eureka和不同角色机器的关系3.2.2 Meta Server的作用3.2.3 ReleaseMessage消息实现原理3.2.4 Client的通信方式1. 简介 apollo是携程…

python 实现 图象扩增(对原始图象进行增强,再保存下来) 同时符合交叉验证要求

图象扩增1 思路2 交叉验证实现3 数据扩增并且保存4 读原始交叉验证文件&#xff0c;针对argu文件夹新写一个5 模型Dataset6 总结和建议本文是图象分割数据集进行数据扩增&#xff0c;和图象分类进行数据扩增有稍许不同需求&#xff1a; 已有的图象分割数据集已经进行了五折交叉…

哈希表的介绍

1.哈希表的介绍 在哈希表中插入、删除或查找一个元素都只需要O(1)的时间&#xff0c;因此经常被用来优化时间效率。 在Java中&#xff0c;哈希表有两个对应的类型&#xff0c;即HashSet和HashMap。 2.HashSet的应用 若每个元素都只有一个值&#xff0c;则用HashSet&#xf…

2019蓝桥杯真题旋转 C语言/C++

题目描述 图片旋转是对图片最简单的处理方式之一&#xff0c;在本题中&#xff0c;你需要对图片顺时针旋转 90 度。 我们用一个 nm 的二维数组来表示一个图片&#xff0c;例如下面给出一个 34 的 图片的例子&#xff1a; 1 3 5 7 9 8 7 6 3 5 9 7 这个图片顺时针旋转 90 度…

2.20jdbc

一.数据库编程的必备条件编程语言:java c c Python数据库 Oracle,MySQL,SQL Server数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包:MySQL提供了Java的驱动包mysqlconnector-java,需要就Java操作MySQL需要该驱动包二.Java的数据库编程JDBC&#xff0c;即…

UG NX二次开发(C#)-导出-导出Parasolid文件(.x_t文件)

文章目录 1、前言2、在UG NX中的操作2、采用NXOpen二次开发实现1、前言 UG NX提供了多种文件的导入与导出功能,本文采用NXOpen.net来实现Parasolid文件(.x_t文件)的导出功能。 2、在UG NX中的操作 打开UG NX的一个三维模型,如下图所示。 点击“文件”->“导出”->“…

约束优化:约束优化的三种序列无约束优化方法

文章目录约束优化&#xff1a;约束优化的三种序列无约束优化方法外点罚函数法L2-罚函数法&#xff1a;非精确算法对于等式约束对于不等式约束L1-罚函数法&#xff1a;精确算法内点罚函数法&#xff1a;障碍函数法等式约束优化问题的拉格朗日函数法&#xff1a;Uzawas Method fo…

Win10 环境 安卓ollvm编译与配置 ndk代码混淆加密

确定你正在使用的ndk版本 查看build.gradle ndkVersion 21.4.7075529 确定你使用的ndk的ollvm版本 C:\Users\Administrator\AppData\Local\Android\Sdk\ndk\21.4.7075529\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-config.exe --version 9.0.9svn 确定了ollvm版本后…

Java序列化机制

Java序列化机制 概述 java中的序列化可能都停留在实现Serializable接口上&#xff0c;对于它里面的一些核心机制没有深入了解过。直到最近在项目中踩了一个坑&#xff0c;就是序列化对象添加一个字段以后&#xff0c;使用方系统报了反序列化失败&#xff0c;原因是我们双方的…

【ArcGIS Pro二次开发】(6):工程(Project)的基本操作

在ArcGIS Pro中我们对工程的基本操作一般包括打开、新建、保存等。下面演示在二次开发中如何用代码进行以上操作。 新建一个项目&#xff0c;命名为【ProjectManager】&#xff0c;添加8个按钮&#xff0c;命名为【CreateEmptyProject、CreateProjectByDefault、OpenExProjest…

易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。2022年05月16日&#xff0c;《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文&#xff0c;该…

Python解题 - CSDN周赛第30期 - 天然气订单

本期比赛的在线测试系统好像出了点问题&#xff0c;导致很多选手最后提交的分数是0&#xff0c;而问哥也遇到好几次提交后一直显示“运行中”而没有结果的情况。鉴于之前遇到过类似情况&#xff0c;不停地刷新页面才得以继续。但是此问题已经存在并持续了好几期&#xff0c;极大…