绝对详细的MyBatis代码生成器讲解

0.简介

在springboot工程中如果使用mybatis作为持久层框架,那必须知道如何自动生成 java 实体类、dao 层接口(mapper 接口)及mapper.xml文件,这样可以减少不必要的开发。

生成代码的方式有很多种,比如说利用idea的插件、maven插件,使用代码执行方法去生成

下面分享一下利用代码去生成我们需要的实体类、dao、mapper.xml

1.快速开始

打开官网:http://mybatis.org/generator/quickstart.html,官网里面描述的已经很清楚了,下面我们重新解释一下它的配置,这是重点,整个代码的核心就是这个配置

<!DOCTYPE generatorConfiguration PUBLIC"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration><context id="simple" targetRuntime="MyBatis3"><jdbcConnection driverClass="org.hsqldb.jdbcDriver"connectionURL="jdbc:hsqldb:mem:aname" /><javaModelGenerator targetPackage="example.model" targetProject="src/main/java"/><sqlMapGenerator targetPackage="example.mapper" targetProject="src/main/resources"/><javaClientGenerator type="XMLMAPPER" targetPackage="example.mapper" targetProject="src/main/java"/><table tableName="FooTable" /></context>
</generatorConfiguration>

这是官网给出的一段简单的配置,我们一般会在resources目录下新建一个mybatisGeneratorConfig.xml这样的配置文件。这个配置里面有几个重要的标签,下面我们就解读一下这份配置

2.根节点 generatorConfiguration

它主要是包含三个子元素

属性描述
properties引入配置资源,例如数据库配置信息
classPathEntry引入类路径,例如引入JDBC的驱动程序
context用于指定生成一组对象的环境

这些子元素的顺序最好按照表格的顺序来配置,properties放在最前面,context放在最后面

3.引入配置properties

这个元素不是必须的,它有两个属性

属性描述
resource相对资源
url全路径

一般情况下我们的mybatisGeneratorConfig.xml配置文件和application.properties项目配置文件都是在resources目录下,因此使用resource属性,可以以下方式:

<properties resource="application.properties"/>

如果使用url,则

<properties url="file:///F:\javaStudy\mybatis-generator\mybatisGenerator\src\main\resources\application.properties"/>

一般情况下我们都是使用resource这个属性,如果使用url,不同开发人员项目所在的目录一般都是不一样的,比如我的项目是放在本机上的F盘,而有些人是E盘

4.JDBC驱动classPathEntry

这个元素用于引入某些类的路径,例如JDBC驱动类

属性描述
location相对路径或绝对路径

配置如下

<classPathEntry location="E:/apache-maven-3.8.5/repository/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar"/>

classPathEntry只在下面这两种情况下才有效

  1. 当加载 JDBC 驱动内省数据库时
  2. 当加载根类中的 JavaModelGenerator 检查重写的方法时

5.context

元素用于指定生成一组对象的环境 ,有以下四个属性

属性描述
idcontext唯一标识,用于追踪错误信息
defaultModelType如果目标运行时为“MyBatis3Simple”、“MyBatis 3DynamicSql”或“MyBatist3Kotlin”,则忽略此属性,它有下面三个值conditional(默认),flat(推荐),hierarchical
targetRuntime此属性用于指定生成的代码的运行时环境,有四个可选值:MyBatis3DynamicSql 、 MyBatis3Kotlin 、 MyBatis3(默认) 、 MyBatis3Simple
introspectedColumnImpl该参数可以指定扩展org.mybatis.generator.api.IntrospectedColumn该类的实现类

它有以下几个子元素

  1. property
  2. plugin
  3. commentGenerator
  4. connectionFactory
  5. jdbcConnection
  6. javaTypeResolver
  7. javaModelGenerator
  8. sqlMapGenerator
  9. javaClientGenerator
  10. table

这些元素需要按照严格的顺序来,后面会对属性逐一讲解

context配置例子

<context id="mysql_tables" targetRuntime="MyBatis3" defaultModelType="flat">//子元素配置项
</context>  

使用MyBatis3 生成的mapper内容

long countByExample(StudentExample example);int insert(Student row);int insertSelective(Student row);List<Student> selectByExample(StudentExample example);Student selectByPrimaryKey(Long id);int updateByExampleSelective(@Param("row") Student row, @Param("example") StudentExample example);int updateByExample(@Param("row") Student row, @Param("example") StudentExample example);int updateByPrimaryKeySelective(Student row);int updateByPrimaryKey(Student row);

而使用MyBatis3Simple生成的mapper如下

int insert(Student row);Student selectByPrimaryKey(Long id);List<Student> selectAll();int updateByPrimaryKey(Student row);

很显然MyBatis3要比MyBatis3Simple生成的方法要多,正常情况下我们使用MyBatis3会比较多

5.1property

它有以下几个属性

属性描述
autoDelimitKeywords如果为true,则如果SQL关键字用作表中的列名,则MBG将对其进行分隔,默认值是false
beginningDelimiter要用作需要分隔符的SQL标识符的起始标识符分隔符的值,默认值为双引号(“)
endingDelimiter要用作需要分隔符的SQL标识符的结束标识符分隔符的值,默认值为双引号(“)
javaFileEncodingjava文件的编码
javaFormatter使用此属性可以为生成的Java文件指定用户提供的格式化程序的完整类名
kotlinFileEncodingKotlin文件的编码
kotlinFormatter使用此属性可以为生成的Kotlin文件指定用户提供的格式化程序的完整类名
xmlFormatter使用此属性可以为生成的XML文件指定用户提供的格式化程序的完整类名

配置例子:

<context id="mysql_tables" targetRuntime="MyBatis3" defaultModelType="flat"><property name="beginningDelimiter" value=""/><property name="endingDelimiter" value=""/><property name="javaFileEncode" value="UTF-8"/>
</context>  

5.2plugin

元素用于定义插件,它有一个属性

属性描述
type完整的类名

配置例子

<!-- 生成序列化方法 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!-- 生成序列化toString -->
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"><property name="useEqualsHashCodeFromRoot" value="true"/>
</plugin>
<!-- 生成序列化equals和hashcode -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"><property name="useToStringFromRoot" value="true"/>
</plugin>
<!-- 直接覆盖生成的mapper.xml -->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />

生成的实体类会包含下面的几个方法

@Override
public boolean equals(Object that) {// 代码省略
}@Override
public int hashCode() {// 代码省略
}@Override
public String toString() {// 代码省略
}

5.3注释commentGenerator

该元素主要用于配置注释,它有一个属性

属性描述
type完整的类名

它有一个子元素property,主要包含以下几个属性

属性描述
suppressAllComments不让生成注释,默认值是false,表示生成注释,如果为true,表示不让生成注释
suppressDate不让生成的注释包含时间戳,默认值是false
addRemarkComments添加 db 表中字段的注释
dateFormat将日期写入生成的注释时使用的日期格式字符串
useLegacyGeneratedAnnotation指定是否使用不推荐使用的“javax”命名空间中的注释

比较常用的是suppressAllCommentssuppressDateaddRemarkComments

配置例子

 <!-- 注释 -->
<commentGenerator type="com.example.mybatisgenerator.CommentGenerator"><!-- 添加 db 表中字段的注释 --><property name="addRemarkComments" value="true"/><!-- 不让生成注释 --><property name="suppressAllComments" value="true"/><!-- 不希望生成的注释中包含时间戳 --><property name="suppressDate" value="true"/>
</commentGenerator>

不知道大家有没有注意到com.example.mybatisgenerator.CommentGenerator是我自定义的注释实现类,这里为什么要自定义呢?

	/*** Database Column Remarks:*   自增ID** This field was generated by MyBatis Generator.* This field corresponds to the database column student.id** @mbg.generated*/private Long id;/*** Database Column Remarks:*   名称** This field was generated by MyBatis Generator.* This field corresponds to the database column student.name** @mbg.generated*/private String name;

这是mybatis自带的注释格式,为了简洁一些,一般都会自定义一个注释的实现类

package com.example.mybatisgenerator;import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;
import java.util.Properties;public class CommentGenerator extends DefaultCommentGenerator {private boolean addRemarkComments = false;@Overridepublic void addConfigurationProperties(Properties props){super.addConfigurationProperties(props);this.addRemarkComments = StringUtility.isTrue(props.getProperty("addRemarkComments"));}@Overridepublic void addFieldComment(Field field, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn) {String remarks = introspectedColumn.getRemarks();if (addRemarkComments && StringUtility.stringHasValue(remarks)){field.addJavaDocLine("/**");String[] remarkLines = remarks.split(System.getProperty("line.separator"));for (String remarkLine : remarkLines) {field.addJavaDocLine(" * " + remarkLine);}field.addJavaDocLine(" */");}}
}

最后生成这样的注释

	/*** 自增ID*/private Long id;/*** 名称*/private String name;/*** 年龄*/private Integer age;

5.4数据库jdbcConnection

元素用于指定内省表所需的数据库连接的属性

属性描述
driverClass用于访问数据库的JDBC驱动程序的完全限定类名
connectionURL用于访问数据库的JDBC连接URL
userId数据库账号
password数据库密码

配置例子:

<!--jdbc的数据库连接 -->
<jdbcConnectiondriverClass="${spring.datasource.driver-class-name}"connectionURL="${spring.datasource.url}"userId="${spring.datasource.username}"password="${spring.datasource.password}">
</jdbcConnection>

前面介绍了properties元素,主要是引入一些外部配置,我们可以通过${}的方式去访问变量

5.5解析类型javaTypeResolver

元素用于定义Java类型解析程序的属性,它有一个属性

属性描述
typeJava类型解析程序

它有一个子元素property,主要包含以下几个属性

属性描述
forceBigDecimals强制转换DECIMAL和NUMERIC字段为java.math.BigDecimal
useJSR310Types强制使用DATE、TIME和TIMESTAMP字段的JSR-310数据类型,而不是使用java.util.DATE

配置例子

 <!-- 类型解析器 -->
<javaTypeResolver><property name="forceBigDecimals" value="true"/>
</javaTypeResolver>

5.6实体类javaModelGenerator

这个是生成实体类配置标签,它有两个必选属性

属性描述
targetPackage生成实体类存放的包路径
targetProject指定目标项目路径,可以是绝对路径或相对路径

它还包含了下面几个 property 子元素属性

属性描述
constructorBased:该属性只对MyBatis3有效,如果true就会使用构造方法入参,如果false就会使用setter方式。默认为false
enableSubPackages如果true,MBG会根据catalogschema来生成子包,默认是false
immutable用来配置实体类属性是否可变,默认是false
rootClass设置所有实体类的基类
trimStrings是否去掉返回数据的空白符

加粗的属性enableSubPackagestrimStrings是比较常用的配置

配置示例如下:

 <!-- 实体类 -->
<javaModelGenerator  targetPackage="com.example.mybatisgenerator.entity"targetProject="src\main\java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true"/>
</javaModelGenerator>

在这里插入图片描述

5.7SQL映射sqlMapGenerator

元素用于定义SQL映射生成器的属性,它有两个必选属性

属性描述
targetPackagexml存放的包路径
targetProject指定目标项目路径,可以是绝对路径或相对路径

property 子元素属性

属性描述
enableSubPackages如果true,MBG会根据catalogschema来生成子包,默认是false

配置例子

<!-- xml -->
<sqlMapGeneratortargetPackage="mapper"targetProject="src\main\resources"><property name="enableSubPackages" value="true" />
</sqlMapGenerator>

在这里插入图片描述

5.8持久层javaClientGenerator

元素用于定义Java客户端生成器的属性,其实就说持久层(DAO)接口,它包含三个属性

属性描述
type此属性用于选择预定义的Java客户端生成器之一,或指定用户提供的Java客户端生成程序
targetPackage生成实体类存放的包路径
targetProject指定目标项目路径,可以是绝对路径或相对路径

property 子元素属性

属性描述
enableSubPackages如果true,MBG会根据catalogschema来生成子包,默认是false
dynamicSqlSupportPackage此属性仅适用于目标运行时MyBatis3DynamicSql或MyBatis3Kotlin

配置例子

<!-- Mapper接口 -->
<javaClientGenerator type="XMLMAPPER"targetPackage="com.example.mybatisgenerator.mapper"targetProject="src\main\java"><property name="enableSubPackages" value="true" />
</javaClientGenerator>

在这里插入图片描述

5.9数据表table

元素用于为每个表生成实体类、sql映射文件(xml),持久层接口(DAO),这是非常重要的配置

属性描述
tableName必填属性,数据库表,如果需要,指定的值可以包含SQL通配符
schema数据库模式-如果数据库不使用模式,或者有默认模式,则不需要数据库模式。如果需要,指定的值可以包含SQL通配符。
catalog数据库目录-如果数据库不使用目录,或者有默认目录,则不需要该目录
alias别名,例如 select * from news as n,会为表加上别名。 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
domainObjectName实体类名称。比如表名是news,会生成News、NewsMapper等文件,如果设置该属性为NewsPO,那么会生成NewsPO、NewsPOMapper
mapperNameMapper的名称 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
sqlProviderNamesql映射文件(xml)的名称 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
enableInsert插入方法,默认值为true 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
enableSelectByPrimaryKey根据主键查询方法 ,默认值为true 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
enableSelectByExample根据条件查询方法 ,默认值为true 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
enableUpdateByPrimaryKey根据主键更新方法,默认值为true 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
enableDeleteByPrimaryKey根据主键删除方法,一般情况下都是软删除,因此一般不生成该方法 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
enableDeleteByExample根据条件删除方法,默认值为true 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
enableCountByExample根据条件查询总数方法,默认值为true 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
enableUpdateByExample根据条件更新方法,默认值为true 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
selectByPrimaryKeyQueryId此值将以以下形式添加到select by主键语句的select列表中:“''as QUERYID”。这对于在运行时识别DBA跟踪工具中的查询非常有用。如果您使用这样的值,您应该为MBG生成的每个不同的查询指定一个唯一的id。 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
selectByExampleQueryId此值将以以下形式添加到select by example语句的select列表中:“''as QUERYID”。这对于在运行时识别DBA跟踪工具中的查询非常有用。如果您使用这样的值,您应该为MBG生成的每个不同的查询指定一个唯一的id 注意目标运行时为“MyBatis3DynamicSql”或“MyBatis 3Kotlin”,则忽略此属性
modelType如果希望为此表覆盖默认模型类型,则使用此属性
escapeWildcards指示在搜索列时是否应转义架构和tableName中的SQL通配符(“_”和“%”)。如果架构或表名包含SQL通配符,则某些驱动程序需要这样做(例如,如果表名为MY_table,则某些驱动器要求转义下划线).默认值为false。
delimitIdentifiers指示MBG在搜索表时是否应使用指定的大小写,然后在生成的SQL中对标识符进行定界。默认值为false
delimitAllColumns指示MBG是否应向生成的SQL中的所有列名添加分隔符。默认值为false

它有下面几个属性

  1. property
  2. generatedKey
  3. domainObjectRenamingRule
  4. columnRenamingRule
  5. columnOverride
  6. ignoreColumn

下面对generatedKey和columnOverride进行讲解

generatedKey

主键生成属性,默认情况下都是都是这样配置

<generatedKey column="id" sqlStatement="Mysql" identity="false" />

columnOverride

重新某些字段的值,这个比较有用,比如说数据表的TINYINT型字段默认对应的javaType是Byte,有时候我们需要转成Integer

<columnOverride column="deleted" javaType="Integer" jdbcType="TINYINT"/>

下面是一个table的配置示例

<!-- 指定数据库表 --><table tableName="student"enableCountByExample="true"enableUpdateByExample="true"enableDeleteByExample="false"enableSelectByExample="true"selectByExampleQueryId="true"enableSelectByPrimaryKey="true"enableUpdateByPrimaryKey="true"enableDeleteByPrimaryKey="false"><generatedKey column="id" sqlStatement="Mysql" identity="false" /><columnOverride column="deleted" javaType="Integer" jdbcType="TINYINT"/><columnOverride column="create_time" javaType="java.time.LocalDateTime" jdbcType="TIMESTAMP"/><columnOverride column="update_time" javaType="java.time.LocalDateTime" jdbcType="TIMESTAMP"/></table>

6.实践

1.引入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--数据库连接池--><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!--mybatis generator生成器--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.4.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

2.配置

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3.mybatis生成器xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration><properties resource="application.properties"/><classPathEntry location="E:/apache-maven-3.8.5/repository/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar"/><!-- context 一般是一个数据源一个context --><context id="mysql_tables" targetRuntime="MyBatis3" defaultModelType="flat"><property name="beginningDelimiter" value=""/><property name="endingDelimiter" value=""/><property name="javaFileEncode" value="UTF-8"/><!-- 生成序列化方法 --><plugin type="org.mybatis.generator.plugins.SerializablePlugin" /><!-- 生成序列化toString --><plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"><property name="useEqualsHashCodeFromRoot" value="true"/></plugin><!-- 生成序列化equals和hashcode --><plugin type="org.mybatis.generator.plugins.ToStringPlugin"><property name="useToStringFromRoot" value="true"/></plugin><!-- 直接覆盖生成的mapper.xml --><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" /><!-- 注释 --><commentGenerator type="com.example.mybatisgenerator.CommentGenerator"><!-- 添加 db 表中字段的注释 --><property name="addRemarkComments" value="true"/><!-- 是否不生成注释 --><property name="suppressAllComments" value="true"/><!-- 不希望生成的注释中包含时间戳 --><property name="suppressDate" value="true"/></commentGenerator><!--jdbc的数据库连接 --><jdbcConnectiondriverClass="${spring.datasource.driver-class-name}"connectionURL="${spring.datasource.url}"userId="${spring.datasource.username}"password="${spring.datasource.password}"></jdbcConnection><!-- 类型解析器 --><javaTypeResolver><property name="forceBigDecimals" value="true"/></javaTypeResolver><!-- 实体类 --><javaModelGenerator  targetPackage="com.example.mybatisgenerator.entity"targetProject="src\main\java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true"/></javaModelGenerator><!-- xml --><sqlMapGeneratortargetPackage="mapper"targetProject="src\main\resources"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!-- Mapper接口 --><javaClientGenerator type="XMLMAPPER"targetPackage="com.example.mybatisgenerator.mapper"targetProject="src\main\java"><property name="enableSubPackages" value="true" /></javaClientGenerator><!-- 指定数据库表 --><table tableName="student"enableCountByExample="true"enableUpdateByExample="true"enableDeleteByExample="false"enableSelectByExample="true"selectByExampleQueryId="true"enableSelectByPrimaryKey="true"enableUpdateByPrimaryKey="true"enableDeleteByPrimaryKey="false"><generatedKey column="id" sqlStatement="Mysql" identity="false" /><columnOverride column="deleted" javaType="Integer" jdbcType="TINYINT"/><columnOverride column="create_time" javaType="java.time.LocalDateTime" jdbcType="TIMESTAMP"/><columnOverride column="update_time" javaType="java.time.LocalDateTime" jdbcType="TIMESTAMP"/></table></context>
</generatorConfiguration>

com.example.mybatisgenerator.CommentGenerator自定义注释的实现类代码上面有

4.启动

在测试类里面写一个方法

@Test
void generate() throws XMLParserException, IOException, InvalidConfigurationException, SQLException, InterruptedException {List<String> warnings = new ArrayList<>();InputStream in = MyBatisGenerator.class.getClassLoader().getResourceAsStream("mybatisGeneratorConfig.xml");ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(in);assert in != null;in.close();// 覆盖 Java 文件boolean overwrite = true;DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);// 生成文件myBatisGenerator.generate(null);// 打印信息warnings.forEach(System.err::println);
}

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

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

相关文章

线性回归全解析: 从基础理论到 Python 实现

机器学习 第四课 线性回归 概述什么是线性回归?关键概念因变量自变量线性关系 基本的线性方程表达式理解多变量回归 误差项和损失函数误差项均方误差 (MSE) 最小二乘法什么是最小二乘法最小二乘法思想详细推导 线性回归的模型假设线性关系独立性同方差性正态分布误差 梯度下降…

基于SVM+Webdriver的智能NBA常规赛与季后赛结果预测系统——机器学习算法应用(含python、ipynb工程源码)+所有数据集(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 特征提取1&#xff09;常规赛特征提取2&#xff09;季后赛特征提取&#xff08;1&#xff09;常规赛球队得分&#xff08;2&#xff09;球员、教练数据及数据整合 相关其它博客工程源代码下载其它资…

论文解析-moETM-多组学整合模型

论文解析-moETM 参考亮点动机发展现状现存问题 功能方法Encoder改进Decoder改进 评价指标生物保守性批次效应移除 实验设置结果多组学数据整合cell-topic mixture可解释性组学翻译性能评估RNA转录本、表面蛋白、染色质可及域调控关系研究1. 验证同一主题下&#xff0c;top gene…

mac电脑文献管理 EndNote 21最新 for Mac

EndNote 21 Mac版不仅能够快速有效的的帮助用户管理自己的文献&#xff0c;而且还可以用来创建个人参考文献库&#xff0c;添加各种文本&#xff0c;图像&#xff0c;连接&#xff0c;表格等等内容&#xff01; - 搜索数百个在线资源以获取参考和PDF - 只需点击一下即可查找参…

android系统签名 V1,V2,V3

android系统签名 V1&#xff0c;V2&#xff0c;V3 7.1 之前V1 签名 文件路径&#xff08;build\target\product\security&#xff09; apk添加系统权限 <manifest xmlns:android"http://schemas.android.com/apk/res/android" android:sharedUserId"…

详解使用sklearn实现一元线性回归和多元线性回归

[Open In Colab] 文章目录 1. 线性回归简介2. 使用sklearn进行一元线性回归3. 线性回归的coef_参数和intercept_参数4. 使用sklearn实现多元线性回归4.1 利用PolynomialFeatures构造输入4.2 进行多元线性回归 5. 总结 import numpy as np import matplotlib.pyplot as plt1. 线…

基于内存的分布式NoSQL数据库Redis(六)AOF设计

文章目录 知识点21&#xff1a;Redis持久化&#xff1a;AOF设计知识点22&#xff1a;Redis持久化&#xff1a;AOF实现附录一&#xff1a;Jedis Maven依赖 知识点21&#xff1a;Redis持久化&#xff1a;AOF设计 目标&#xff1a;掌握Redis的AOF持久化机制 路径 step1&#xff1…

竞赛选题 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

小程序的console中出现:。。。不在以下 request 合法域名列表中,请参考文档:。。。的报错解决

报错效果&#xff1a; 其实这个报错不代表自己的代码有问题 但是本强迫症研究了一下&#xff0c;按照以下方法关掉就不会显示这个报错了。 点微信开发者工具中的右上角的详情。点本地设置。勾选不校验。。。HTTPS证书。 即可关闭该报错&#xff1a;

企业c#语言源代码防泄密解决方案

在当今数字化时代&#xff0c;企业的核心业务往往依赖于软件应用程序。为了保护企业的知识产权和敏感信息&#xff0c;源代码的保密至关重要。对于制造类企业尤其是智能制造业来讲&#xff0c;最近几年是高速发展的时期&#xff0c;很多公司在做工厂流水线设备时&#xff0c;就…

使用Premiere、PhotoShop和Audition做视频特效

今天接到一个做视频的任务&#xff0c;给一个精忠报国的视频&#xff0c;要求&#xff1a;   ①去掉人声&#xff0c;就是将唱歌的人声去掉&#xff0c;只留下伴奏&#xff1b;   ②截图视频中的横幅&#xff0c;做一个展开的效果&#xff0c;类似卷纸慢慢展开&#xff1b;…

UE4 快速入门 1

安装 https://www.unrealengine.com/zh-CN/download Launcher ue4.23 editor visual studio 2019 社区版 文档学习