一、配置依赖

1.依赖信息 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>mybatis</groupId>
<artifactId>generator</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
</dependencies> <properties>
<configuration.path>${basedir}/src/main/resources/generatorConfig.xml</configuration.path>
</properties> <build>
<plugins>
<!-- 指定jdk -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!-- 允许移动生成的文件 -->
<verbose>true</verbose>
<!-- 允许覆盖生成的文件 -->
<overwrite>true</overwrite>
<!-- 配置文件中的 contexts -->
<contexts>DMySQLTables</contexts>
<!-- 配置文件路径 -->
<configurationFile>${configuration.path}</configurationFile>
<!-- MBG 生成文件的目录。只要配置文件中 targetProject 设置为 MAVEN(区分大小写),就会使用此目录,如果该目录不存在会创建该目录 -->
<outputDirectory>${project.build.directory}/generated-sources/mybatis-generator</outputDirectory>
<!-- 为 true,则“compile”,“provided”和“system”范围的依赖项将添加到生成器的类路径中 -->
<includeCompileDependencies>true</includeCompileDependencies>
<!-- 为true,则将任何范围的依赖项添加到生成器的类路径中 -->
<includeAllDependencies>true</includeAllDependencies>
</configuration>
</plugin>
</plugins>
<resources>
<!-- 把xml文件也打包到相应位置 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>

2.数据库信息 db.properties

jdbc.user=root
jdbc.password=root
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://192.168.8.136:3306/mybatis

3.generator 配置 generatorConfig.xml

context 标签中的配置顺序 (property*,plugin*,commentGenerator?,(connectionFactory|jdbcConnection),javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,javaClientGenerator?,table+)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration>
<!-- 指定DB2或JDBC驱动位置 -->
<!--<classPathEntry location="D:\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar"/>--> <!--加载配置文件-->
<properties resource="db.properties"/> <!-- context:一组环境
id:必选,唯一标识符,用于在生成错误时提示
defaultModelType:指定生成 JavaBean 的模式
conditional:默认,类似于层次模型,表只包含一个字段时不会生成单独的类,该字段将合并到基本记录类中。
flat:所有字段生成在一个 JavaBean 中
hierarchical:主键列会生成主键类,Blob 列也单独生成一个类,再其余字段一个类,类之间存在适当的继承关系。
targetRuntime:
MyBatis3:默认的值,生成基于 MyBatis3.x 以上版本的内容,包括XXXBySample
MyBatis3Simple:类似 MyBatis3,不生成 XXXBySample
MyBatis3DynamicSql、Ibatis2Java2、Ibatis2Java5
introspectedColumnImpl:值为类的全限定名,用于扩展 MBG -->
<context id="DMySQLTables" defaultModelType="conditional" targetRuntime="MyBatis3">
<!--默认false,为true将分隔SQL关键字(如果它们在表中用作列名)。 MBG维护了不同数据库的SQL关键字列表(SqlReservedWords),如特定关键字不在MBG的列表中,可使用<columnOverride>分隔-->
<property name="autoDelimitKeywords" value="false"/> <!-- 指明数据库的用于标记数据库对象名的符号,如ORACLE是双引号",MYSQL是反引号` -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/> <!-- 生成 Java 文件的编码格式,有关有效编码的信息参阅 java.nio.charset.Charset -->
<property name="javaFileEncoding" value="UTF-8"/> <!-- Java代码格式化程序的全类名,该类须实现org.mybatis.generator.api.JavaFormatter,并有无参数构造函数,MBG 默认 org.mybatis.generator.api.dom.DefaultJavaFormatter -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- XML代码格式化,须实现org.mybatis.generator.api.XmlFormatter,并有无参数构造函数,MBG 默认 org.mybatis.generator.api.dom.DefaultXmlFormatter -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/> <!-- 插件,让实体类实现序列化接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" /> <commentGenerator>
<!-- 指定 MBG 是否去除生成代码中的注释 -->
<property name="suppressAllComments" value="true" />
<!-- 指定 MBG 是否在生成的注释中包含生成时间戳 -->
<property name="suppressDate" value="true"/>
</commentGenerator> <!-- 指定数据库连接的属性,MBG 使用 JDBC 的 DatabaseMetaData 类来发现配置中指定表的属性, 每个 context 元素都需要一个 connectionFactory 或 jdbcConnection 元素 -->
<jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.jdbcUrl}" userId="${jdbc.user}" password="${jdbc.password}"/> <!-- javaTypeResolver:处理数据库中的类型到 Java 中的类型,默认使用 org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl
type:指定用户提供的 Java Type Resolver。该类必须实现 org.mybatis.generator.api.JavaTypeResolver 接口,并必须有公共默认构造函数。可写 DEFAULT-->
<javaTypeResolver type="DEFAULT">
<!-- forceBigDecimals:MBG 是否强制对 DECIMAL 和 NUMERIC 字段使用 java.math.BigDecimal,而不是在可能时替换整数类型
true:如果数据库列的类型为 DECIMAL 或 NUMERIC,则 Java 类型解析程序将始终使用 java.math.BigDecimal
false:默认,
scale > 0 或 length > 18 使用 BigDecimal
scale = 0 且 length [10,18] 使用 Long
scale = 0 且 length [5,9] 使用 Integer
scale = 0 且 length < 5 使用 Short -->
<property name="forceBigDecimals" value="false"/> <!-- useJSR310Types:指定 MyBatis Generator 是否应强制在 DATE,TIME 和 TIMESTAMP 字段中使用 JSR-310 数据类型,而不是使用 java.util.Date
true:则类型将按如下方式解析:
DATE java.time.LocalDate
TIME java.time.LocalTime
TIMESTAMP java.time.LocalDateTime
注意:类型解析器将始终解析以下JSR-310类型,无论此属性的值如何:
TIME_WITH_TIMEZONE java.time.OffsetTime
TIMESTAMP_WITH_TIMEZONE java.time.OffsetDateTime -->
<property name="useJSR310Types" value="true"/>
</javaTypeResolver> <!-- javaModelGenerator:Java模型生成器,此元素是 context 元素的必需子元素,负责:1,key类(见context的defaultModelType);2,java类;3,查询类
targetPackage:生成的类将被放置的包,真实的包受 enableSubPackages 属性控制
targetProject:目标项目,指定一个存在的本地文件系统目录,生成的内容会放到指定目录中,如果目录不存在,MBG 不会自动建目录 -->
<javaModelGenerator targetPackage="test.model" targetProject="src/main/java">
<!-- constructorBased:是否为每一个生成的类创建一个全参构造方法,且构建 SQL 结果映射以使用构造函数,而不是每个字段的“setter”,属性仅适用于MyBatis3。
如果“immutable”属性设置为 true,则忽略此属性(并强制为 true)。默认值为 false。<table>元素中的相应属性可覆盖此属性 -->
<property name="constructorBased" value="false"/> <!-- enableSubPackages:是否在 targetPackage 的基础上,根据数据库的 schema 再生成一层 package,最终生成的类放在这个 package 下,默认为false
假设 MYSCHMA 中的表为 MYTABLE,targetPackage 属性为“com.mycompany”。如果此属性为true,则类放在“com.mycompany.myschema”中。 false,则类放在“com.mycompany” -->
<property name="enableSubPackages" value="false"/> <!-- immutable:是否创建不可变类,默认 false,如果为true,MBG 会创建一个全参构造方法,类没有“setter”方法,忽略“constructorBased”属性
属性仅适用于MyBatis3,<table>元素中的相应属性可以覆盖此属性。-->
<property name="immutable" value="false"/> <!-- rootClass:设置一个根对象(全类名),生成的 keyClass 或者 recordClass 会继承这个类;在Table的rootClass属性中可以覆盖该选项
注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了 -->
<!--<property name="rootClass" value=""/>--> <!-- trimStrings:设置是否在getter方法中,对String类型字段调用trim()方法,默认false。可以使用<table>或<columnOverride>元素中的trimStrings属性覆盖。 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator> <!-- sqlMapGenerator:SQL Map的XML文件生成器,如果指定sqlMapGenerator,MBG 生成SQL映射XML文件和模型classess。如果未指定sqlMapGenerator,则仅生成模型类。
在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),或者使用 Mapper 接口加 Annotation,所以,如果 javaClientGenerator 配置中配置了需要生成 XML 的话,这个元素就必须配置
targetPackage/targetProject:同 javaModelGenerator -->
<sqlMapGenerator targetPackage="test.xml" targetProject="src/main/java">
<!-- 同 javaModelGenerator 中的 enableSubPackages-->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator> <!-- javaClientGenerator:即生成 Mapper 接口,如果没有配置该元素,那么默认不会生成 Mapper 接口
targetPackage/targetProject:同javaModelGenerator
type:Java客户端生成器,指定用户提供的Java客户端生成器。用户提供的 DAO 生成器必须扩展 org.mybatis.generator.codegen.AbstractJavaClientGenerator 类,并且必须具有公共默认构造函数。
如果 <context> targetRuntime 是 MyBatis3
1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML
2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中
3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML
如果 <context> targetRuntime 是 MyBatis3Simple
ANNOTATEDMAPPER/XMLMAPPER
如果 <context> targetRuntime 是 Ibatis2Java2 或 Ibatis2Java5
IBATIS/GENERIC-CI/GENERIC-SI/SPRING
implementationPackage:如果指定,实现类将放在此包中 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src/main/java" implementationPackage="test.dao">
<!-- enableSubPackages:控制实际包路径的计算方式
true,则计算的包将是表的目录和模式的 implementationPackage 加子包(如果存在)
false(默认值),则计算的包将与implementationPackage属性中指定的完全相同。 MBG 将根据生成的包创建文件夹 -->
<property name="enableSubPackages" value="false"/> <!-- exampleMethodVisibility:设置不同“ByExample”方法的可见性 - selectByExample,deleteByExample等。不指定,方法将是公共的,并在界面中声明
public 默认值:实现类中生成的方法将是public,并且将在接口中声明方法
private:实现类中生成的方法将是私有的,并且不会在接口中声明方法
protected:实现类中生成的方法将受到保护,并且不会在接口中声明方法
default:实现类中生成的方法将具有默认(包)可见性,并且不会在接口中声明方法
如果目标运行时为 MyBatis3,则忽略此属性 -->
<property name="exampleMethodVisibility" value="public"/> <!-- methodNameCalculator:选择方法名称计算器。方法名称计算器可用于为 DAO 方法提供不同的名称。可以选择预定义值,也可以指定实现 org.mybatis.generator.api.DAOMethodNameCalculator 接口类的全类名
default 默认值:生成的方法名称将非常简单(“insert”,“updateByPrimaryKey”等)
extended:生成的方法名称将包含与方法关联的域对象的名称(“insertWidget”,“updateWidgetByPrimaryKey”等)
如果目标运行时为MyBatis3,则忽略此属性。-->
<property name="methodNameCalculator" value="default"/> <!-- rootInterface:为所有生成的接口对象指定超级接口。 可以通过在Table配置上指定rootInterface属性来覆盖此值
MBG不验证接口是否存在,或者是否是有效的Java接口。属性的值为全类名 -->
<!--<property name="rootInterface" value=""/>--> <!--true,则带注释的客户端将使用 MyBatis 中的 SqlBuilder 生成动态SQL。使用 MyBatis 3.2 及更高版本时,不推荐使用该构建器以支持新的SQL类。
false,MBG 将生成使用新 SQL 构建器的客户端。默认 false -->
<property name="useLegacyBuilder" value="false"/>
</javaClientGenerator> <!-- 指定要逆向分析哪些表,根据表创建 javaBean, 可用 % 匹配所有表 -->
<table tableName="dept" domainObjectName="Dept"/>
</context>
</generatorConfiguration>

二、运行,生成代码

三、使用

1.mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- 外部 properties 配置文件 -->
<properties resource="db.properties"/> <!-- settings包含很多重要的设置项,setting:用来设置每一个设置项。name:设置项名,value:设置项取值 -->
<settings>
<!-- 开启全局二级缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 本地(一级)缓存作用域,默认 SESSION,会缓存一个会话(SqlSession)中执行的所有查询。 设置为 STATEMENT,会话仅作用在语句执行上,对 SqlSession 的调用将不会共享数据,可认为是禁用一级缓存 -->
<setting name="localCacheScope" value="SESSION"/>
<!-- 控制台打印SQL -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings> <!-- typeAliases:别名处理器:可以为我们的java类型起别名,别名不区分大小写 -->
<typeAliases>
<!-- typeAlias:为某个java类型起别名,type:指定要起别名的类型全类名;默认别名就是类名小写,alias:指定新的别名 -->
<!--<typeAlias type="com.bean.MyUser" alias="myUser"/>-->
<!-- package:为某个包下的所有类批量起别名,name:指定包名,为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写) -->
<package name="test.model"/>
<!-- 批量起别名的情况下,可以在 Bean 上使用 @Alias 注解为某个类指定新的别名 -->
</typeAliases> <!-- environments:环境配置,default 指定使用某种环境
environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识
transactionManager:事务管理器
type:事务管理器的类型 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory)自定义事务管理器:实现 TransactionFactory 接口,type 为全类名
dataSource:数据源
type:数据源类型 UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory)| JNDI(JndiDataSourceFactory)
自定义数据源:实现 DataSourceFactory 接口,type 为全类名
配置注册类:org.apache.ibatis.session.Configuration -->
<environments default="development-mysql">
<environment id="development-mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.8.136:3306/mybatis?allowMultiQueries=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="development-oracle">
<transactionManager type="MANAGED"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments> <!-- databaseIdProvider:支持多数据库厂商;
type="DB_VENDOR":VendorDatabaseIdProvider 作用就是得到数据库厂商的标识(getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的 SQL -->
<databaseIdProvider type="DB_VENDOR">
<!-- 为不同的数据库厂商起别名 -->
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider> <!-- mappers:将 SQL 映射文件注册到全局配置中 -->
<mappers>
<!-- 引用类路径下的 SQL 映射文件 -->
<mapper resource="test/xml/DeptMapper.xml"/> <!-- 引用网路路径或者磁盘路径下的sql映射文件 -->
<!--<mapper url="file:///var/mappers/AuthorMapper.xml"/>--> <!-- 引用 Class 接口注册,没有 SQL 映射文件,所有的 SQL 都是利用注解写在接口上 -->
<!--<mapper class="com.dao.MyUserMapperAnnotation"/>--> <!-- 批量注册,有 SQL 映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下 -->
<!--<package name="test.xml"/>-->
</mappers>
</configuration>

2.测试方法

public static void main(String[] args) throws IOException {
SqlSession session = null;
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); session = sqlSessionFactory.openSession();
DeptMapper mapper = session.getMapper(DeptMapper.class); // 查询所有
System.out.println(mapper.selectByExample(null)); // 条件查询
DeptExample deptExample = new DeptExample();
DeptExample.Criteria criteria = deptExample.createCriteria();
criteria.andIdEqualTo(1);
System.out.println(mapper.selectByExample(deptExample));
} finally {
if (session != null) {
session.close();
}
}
}


官方配置文档

https://www.cnblogs.com/ygjlch/p/6471924.html

xxxExample类的使用

https://blog.csdn.net/biandous/article/details/65630783

MyBatis-generator-Maven方式的更多相关文章

  1. idea + mybatis generator + maven 插件使用

    idea + mybatis generator + maven 插件使用 采用的是 generator 的 maven 插件的方式 ~ 1 pom.xml mybatis其它配置一样,下面是配置my ...

  2. SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  3. mybatis generator maven插件自动生成代码

    如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...

  4. mybatis generator使用方式

    资源: 一 https://files.cnblogs.com/files/jiuya/jdbcT.zip 二  https://files.cnblogs.com/files/jiuya/mybat ...

  5. MyBatis generator 使用方式 小结

    1.  配置到 maven 中pom.xml 中 2.  手动运行 脚本文件 3. 基于 web 项目  http://git.oschina.net/redArmy/springboot-gener ...

  6. MyBatis Generator报错:Cannot instantiate object of type

    [ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate ( ...

  7. 解决mybatis generator无法覆盖XML

    今天发现mybatis generator maven plugin在重复生成的时候xml文件只会merge,不会覆盖. 明明在pom.xml中配置了如下: <configuration> ...

  8. IDEA使用mybatis generator自动生成代码

    主要就三步: 1.pom 文件中引入jar包并配置 build 属性 <dependencies> <!-- 自动生产mapper Begin! --> <depende ...

  9. Maven插件方式使用Mybatis Generator

    Mybatis Generator Mybatis Generator简称MBG,可以根据数据库自动生成实体类.单表查询接口及其映射xml文件(也可以选择以注解方式生成). 下面介绍一下以maven插 ...

  10. MyBatis Generator作为maven插件自动生成增删改查代码及配置文件例子

    什么是MyBatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model ...

随机推荐

  1. BZOJ4946[Noi2017]蔬菜——线段树+堆+模拟费用流

    题目链接: [Noi2017]蔬菜 题目大意:有$n$种蔬菜,每种蔬菜有$c_{i}$个,每种蔬菜每天有$x_{i}$个单位会坏掉(准确来说每天每种蔬菜坏掉的量是$x_{i}-$当天这种蔬菜卖出量), ...

  2. [POJ 1637] Sightseeing tour(网络流)

    题意 (混合图的欧拉回路判定) 给你一个既存在有向边, 又存在无向边的图. 问是否存在欧拉回路. \(N ≤ 200, M ≤ 1000\) 题解 难点在于无向边. 考虑每个点的度数限制. 我们先对无 ...

  3. Leetcode 27.移除元素 By Python

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  4. expect交互式安装软件

    公司一些宿主机需要安装软件,吴老师要求写一个安装脚本: 脚本思路:首先要把安装的包拷贝到每台机器上,然后要让每台机器都运行一次安装命令:就想到了应用scp.ssh命令,但这两个命令需要输入对端密码,需 ...

  5. 【Luogu4916】魔力环(Burnside引理,组合计数)

    考虑\(Burside\)引理,设\(f(x)\)表示置换拆成循环的个数为\(x\)时的答案,那么最终的结果就是\(\displaystyle \frac{\sum_{i=1}^n f(gcd(i,n ...

  6. 【CF833E】Caramel Clouds(线段树)

    [CF833E]Caramel Clouds(线段树) 题面 CF 洛谷 题解 首先把区间一段一段分出来,那么只有四种情况. 要么没有被任何一朵云被覆盖,那么直接就会产生这一段的贡献. 要么被一朵云覆 ...

  7. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  8. mailkit库收发邮件

    mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境  W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...

  9. bzoj3467: Crash和陶陶的游戏

    就一篇题解: BZOJ3467 : Crash和陶陶的游戏 - weixin_34248487的博客 - CSDN博客 1.离线,建出Atrie树:B树的倍增哈希数组,节点按照到根路径字典序排序 2. ...

  10. 洛谷P3975 弦论

    题意:求一个串的字典序第k小的子串/本质不同第k小的子串. 解:一开始我的想法是在后缀树上找,但是不知道后缀树上的边对应的是哪些字符... 然而可以不用fail树转移,用转移边转移即可. 先建一个后缀 ...