Full Code of baomidou/mybatis-plus for AI

3.0 856acc1b0f28 cached
1128 files
3.6 MB
1.0M tokens
6019 symbols
1 requests
Download .txt
Showing preview only (4,060K chars total). Download the full file or copy to clipboard to get everything.
Repository: baomidou/mybatis-plus
Branch: 3.0
Commit: 856acc1b0f28
Files: 1128
Total size: 3.6 MB

Directory structure:
gitextract_7cwa3873/

├── .editorconfig
├── .gitee/
│   ├── ISSUE_TEMPLATE.zh-CN.md
│   └── PULL_REQUEST_TEMPLATE.zh-CN.md
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── gradle.yml
│       └── publish.yml
├── CHANGELOG.md
├── LICENSE
├── MPCodeStyle.xml
├── README-zh.md
├── README.md
├── build.gradle
├── changelog-temp.md
├── gradle.properties
├── libs/
│   └── jdbcDriver-18.jar
├── license.txt
├── mybatis-plus/
│   ├── build.gradle
│   └── src/
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               └── test/
│           │                   ├── BaseDbTest.java
│           │                   ├── DbTypeTest.java
│           │                   ├── MybatisTest.java
│           │                   ├── OgnlTest.java
│           │                   ├── PageTest.java
│           │                   ├── autoresultmap/
│           │                   │   ├── AutoResultMapTest.java
│           │                   │   ├── Entity.java
│           │                   │   └── EntityMapper.java
│           │                   ├── batch/
│           │                   │   ├── BatchTest.java
│           │                   │   ├── Entity.java
│           │                   │   └── EntityMapper.java
│           │                   ├── cache/
│           │                   │   ├── page/
│           │                   │   │   ├── PageCache.java
│           │                   │   │   ├── PageCacheMapper.java
│           │                   │   │   └── PageCacheTest.java
│           │                   │   └── xml/
│           │                   │       ├── XmlCache.java
│           │                   │       ├── XmlCacheMapper.java
│           │                   │       └── XmlCacheTest.java
│           │                   ├── chainwrapper/
│           │                   │   ├── ChainWrapperTest.java
│           │                   │   ├── ChainWrappersTest.java
│           │                   │   ├── Entity.java
│           │                   │   └── EntityMapper.java
│           │                   ├── enums/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   ├── EnumInt.java
│           │                   │   ├── EnumOrdinal.java
│           │                   │   ├── EnumStr.java
│           │                   │   └── EnumTest.java
│           │                   ├── fill/
│           │                   │   ├── FillEntity.java
│           │                   │   ├── FillMapper.java
│           │                   │   └── FillTest.java
│           │                   ├── gaussdb/
│           │                   │   ├── Demo.java
│           │                   │   ├── DemoMapper.java
│           │                   │   └── GaussdbTest.java
│           │                   ├── h2/
│           │                   │   ├── ActiveRecordTest.java
│           │                   │   ├── BaseTest.java
│           │                   │   ├── CustomFillTest.java
│           │                   │   ├── FillPerformanceTest.java
│           │                   │   ├── H2Delete1Eq1Test.java
│           │                   │   ├── H2KeyGeneratorTest.java
│           │                   │   ├── H2LogicDeleteTest.java
│           │                   │   ├── H2MetaObjectHandler.java
│           │                   │   ├── H2StudentMapperTest.java
│           │                   │   ├── H2UserMapperTest.java
│           │                   │   ├── H2UserStrategyTest.java
│           │                   │   ├── H2UserTest.java
│           │                   │   ├── H2userNameJsonTypeHandler.java
│           │                   │   ├── LastSqlTest.java
│           │                   │   ├── MybatisMapperRegistryTest.java
│           │                   │   ├── SqlRunnerTest.java
│           │                   │   ├── TestXmlConfig.java
│           │                   │   ├── cache/
│           │                   │   │   ├── CacheConfig.java
│           │                   │   │   ├── CacheTest.java
│           │                   │   │   ├── CustomCache.java
│           │                   │   │   ├── CustomPage.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   └── CacheMapper.java
│           │                   │   │   ├── model/
│           │                   │   │   │   └── CacheModel.java
│           │                   │   │   └── service/
│           │                   │   │       ├── ICacheService.java
│           │                   │   │       └── impl/
│           │                   │   │           └── CacheServiceImpl.java
│           │                   │   ├── config/
│           │                   │   │   ├── DBConfig.java
│           │                   │   │   ├── MybatisPlusConfig.java
│           │                   │   │   ├── MybatisPlusConfigLogicDelete.java
│           │                   │   │   └── MybatisXmlConfig.java
│           │                   │   ├── customfill/
│           │                   │   │   ├── CustomFillConfig.java
│           │                   │   │   ├── annotation/
│           │                   │   │   │   └── InsertUpdateFill.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   └── TestModelMapper.java
│           │                   │   │   └── model/
│           │                   │   │       └── TestModel.java
│           │                   │   ├── entity/
│           │                   │   │   ├── H2Addr.java
│           │                   │   │   ├── H2Student.java
│           │                   │   │   ├── H2User.java
│           │                   │   │   ├── H2UserLogicDelete.java
│           │                   │   │   ├── H2UserStrategy.java
│           │                   │   │   ├── SuSuperEntity.java
│           │                   │   │   ├── SuSuperEntityCamel.java
│           │                   │   │   ├── SuperEntity.java
│           │                   │   │   └── SuperEntityCamel.java
│           │                   │   ├── enums/
│           │                   │   │   ├── AgeEnum.java
│           │                   │   │   ├── GenderEnum.java
│           │                   │   │   └── GradeEnum.java
│           │                   │   ├── fillperformance/
│           │                   │   │   ├── FillPerformanceConfig.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   └── PerformanceModelMapper.java
│           │                   │   │   ├── model/
│           │                   │   │   │   └── PerformanceModel.java
│           │                   │   │   └── service/
│           │                   │   │       ├── IPerformanceModelService.java
│           │                   │   │       └── impl/
│           │                   │   │           └── PerformanceModelServiceImpl.java
│           │                   │   ├── idgenerator/
│           │                   │   │   ├── CustomIdGenerator.java
│           │                   │   │   ├── IdGeneratorConfig.java
│           │                   │   │   ├── IdentifierGeneratorTest.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   ├── BigDecimalIdGeneratorMapper.java
│           │                   │   │   │   ├── BigIntegerIdGeneratorMapper.java
│           │                   │   │   │   ├── IntegerIdGeneratorMapper.java
│           │                   │   │   │   ├── IntegerStringIdGeneratorMapper.java
│           │                   │   │   │   ├── LongIdGeneratorMapper.java
│           │                   │   │   │   ├── LongStringIdGeneratorMapper.java
│           │                   │   │   │   └── StringIdGeneratorMapper.java
│           │                   │   │   └── model/
│           │                   │   │       ├── BigDecimalIdGeneratorModel.java
│           │                   │   │       ├── BigIntegerIdGeneratorModel.java
│           │                   │   │       ├── IntegerIdGeneratorModel.java
│           │                   │   │       ├── IntegerStringIdGeneratorModel.java
│           │                   │   │       ├── LongIdGeneratorModel.java
│           │                   │   │       ├── LongStringIdGeneratorModel.java
│           │                   │   │       └── StringIdGeneratorModel.java
│           │                   │   ├── issues/
│           │                   │   │   ├── aop/
│           │                   │   │   │   ├── AopConfig1.java
│           │                   │   │   │   ├── AopConfig2.java
│           │                   │   │   │   ├── AppConfig.java
│           │                   │   │   │   ├── MultiAopTest.java
│           │                   │   │   │   ├── NoAopTest.java
│           │                   │   │   │   ├── SingleAopTest.java
│           │                   │   │   │   ├── entity/
│           │                   │   │   │   │   └── Demo.java
│           │                   │   │   │   ├── mapper/
│           │                   │   │   │   │   └── DemoMapper.java
│           │                   │   │   │   └── service/
│           │                   │   │   │       ├── IDemoService.java
│           │                   │   │   │       └── impl/
│           │                   │   │   │           └── DemoServiceImpl.java
│           │                   │   │   ├── genericid/
│           │                   │   │   │   ├── GenericIdTest.java
│           │                   │   │   │   ├── MybatisPlusConfig.java
│           │                   │   │   │   ├── entity/
│           │                   │   │   │   │   ├── LongEntity.java
│           │                   │   │   │   │   ├── StringEntity.java
│           │                   │   │   │   │   └── SuperEntity.java
│           │                   │   │   │   └── mapper/
│           │                   │   │   │       ├── LongEntityMapper.java
│           │                   │   │   │       └── StringEntityMapper.java
│           │                   │   │   └── repositoryscan/
│           │                   │   │       ├── AppConfig.java
│           │                   │   │       ├── AppConfigWithMapperScan.java
│           │                   │   │       ├── RepositoryDefaultScanTest.java
│           │                   │   │       ├── RepositoryMapperScanTest.java
│           │                   │   │       ├── entity/
│           │                   │   │       │   └── Demo.java
│           │                   │   │       ├── mapper/
│           │                   │   │       │   └── DemoRepositoryMapper.java
│           │                   │   │       └── service/
│           │                   │   │           ├── IDemoRepositoryService.java
│           │                   │   │           └── impl/
│           │                   │   │               └── DemoRepositoryServiceImpl.java
│           │                   │   ├── keygenerator/
│           │                   │   │   ├── KeyGeneratorConfig.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   ├── ExtendKeyGeneratorMapper.java
│           │                   │   │   │   ├── IntegerKeyGeneratorMapper.java
│           │                   │   │   │   ├── KeyGeneratorMapper.java
│           │                   │   │   │   ├── LongKeyGeneratorMapper.java
│           │                   │   │   │   └── StringKeyGeneratorMapper.java
│           │                   │   │   └── model/
│           │                   │   │       ├── BaseMode.java
│           │                   │   │       ├── ExtendKeyGeneratorModel.java
│           │                   │   │       ├── IntegerKeyGeneratorModel.java
│           │                   │   │       ├── KeyGeneratorModel.java
│           │                   │   │       ├── LongKeyGeneratorModel.java
│           │                   │   │       └── StringKeyGeneratorModel.java
│           │                   │   ├── mapper/
│           │                   │   │   ├── H2StudentMapper.java
│           │                   │   │   ├── H2UserLogicDeleteMapper.java
│           │                   │   │   ├── H2UserMapper.java
│           │                   │   │   ├── H2UserStrategyMapper.java
│           │                   │   │   └── SuperMapper.java
│           │                   │   ├── service/
│           │                   │   │   ├── IH2StudentService.java
│           │                   │   │   ├── IH2UserService.java
│           │                   │   │   └── impl/
│           │                   │   │       ├── H2StudentServiceImpl.java
│           │                   │   │       └── H2UserServiceImpl.java
│           │                   │   └── tenant/
│           │                   │       ├── CustomCacheExecutor.java
│           │                   │       ├── TenantConfig.java
│           │                   │       ├── TenantTest.java
│           │                   │       ├── mapper/
│           │                   │       │   └── StudentMapper.java
│           │                   │       ├── model/
│           │                   │       │   └── Student.java
│           │                   │       └── service/
│           │                   │           ├── IStudentService.java
│           │                   │           └── impl/
│           │                   │               └── StudentServiceImpl.java
│           │                   ├── json/
│           │                   │   ├── FastJson2Entity.java
│           │                   │   ├── FastJson2EntityMapper.java
│           │                   │   ├── FastJsonEntity.java
│           │                   │   ├── FastJsonEntityMapper.java
│           │                   │   ├── Fastjson2Test.java
│           │                   │   ├── FastjsonTest.java
│           │                   │   ├── GsonEntity.java
│           │                   │   ├── GsonEntityMapper.java
│           │                   │   ├── GsonTest.java
│           │                   │   ├── JackJsonEntity.java
│           │                   │   ├── JackJsonEntityMapper.java
│           │                   │   └── JacksonTest.java
│           │                   ├── logicdel/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── LogicDelTest.java
│           │                   ├── multisqlsessionfactory/
│           │                   │   ├── AppConfig.java
│           │                   │   ├── MultiSqlSessionFactoryTest.java
│           │                   │   ├── a/
│           │                   │   │   ├── entity/
│           │                   │   │   │   └── AEntity.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   └── AEntityMapper.java
│           │                   │   │   └── service/
│           │                   │   │       ├── AEntityService.java
│           │                   │   │       └── impl/
│           │                   │   │           └── AEntityServiceImpl.java
│           │                   │   └── b/
│           │                   │       ├── entity/
│           │                   │       │   └── BEntity.java
│           │                   │       ├── mapper/
│           │                   │       │   └── BEntityMapper.java
│           │                   │       └── service/
│           │                   │           ├── BEntityService.java
│           │                   │           └── impl/
│           │                   │               └── BEntityServiceImpl.java
│           │                   ├── non/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── NonTest.java
│           │                   ├── optimisticlocker/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── OptimisticLockerTest.java
│           │                   ├── orderby/
│           │                   │   ├── OrderByEntity.java
│           │                   │   ├── OrderByMapper.java
│           │                   │   └── OrderByMapperTest.java
│           │                   ├── phoenix/
│           │                   │   ├── PhoenixBaseMapper.java
│           │                   │   ├── PhoenixTest.java
│           │                   │   ├── config/
│           │                   │   │   ├── DBConfig.java
│           │                   │   │   └── MybatisPlusConfig.java
│           │                   │   ├── entity/
│           │                   │   │   └── PhoenixTestInfo.java
│           │                   │   └── mapper/
│           │                   │       └── PhoenixTestInfoMapper.java
│           │                   ├── pom/
│           │                   │   └── GeneratePomTest.java
│           │                   ├── postgresql/
│           │                   │   ├── PostgresqlTest.java
│           │                   │   ├── config/
│           │                   │   │   └── PostgresqlConfig.java
│           │                   │   ├── entity/
│           │                   │   │   └── Pgtable.java
│           │                   │   ├── mapper/
│           │                   │   │   └── PgtableMappper.java
│           │                   │   └── service/
│           │                   │       ├── IPgtableService.java
│           │                   │       └── impl/
│           │                   │           └── PgtableServiceImpl.java
│           │                   ├── puginsome/
│           │                   │   ├── A.java
│           │                   │   ├── AMapper.java
│           │                   │   ├── B.java
│           │                   │   ├── BMapper.java
│           │                   │   └── PluginSomeTest.java
│           │                   ├── record/
│           │                   │   ├── RecordEntity.java
│           │                   │   ├── RecordEntityMapper.java
│           │                   │   └── RecordEntityTest.java
│           │                   ├── reflection/
│           │                   │   └── ExampleObjectFactory.java
│           │                   ├── replaceplaceholder/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   ├── EntitySubMapper.java
│           │                   │   └── ReplacePlaceholderTest.java
│           │                   ├── resultmap/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── ResultMapTest.java
│           │                   ├── rewrite/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── RewriteTest.java
│           │                   ├── scheam/
│           │                   │   ├── SchemaEntity.java
│           │                   │   ├── SchemaEntityMapper.java
│           │                   │   └── SchemaEntityTest.java
│           │                   ├── sqlrunner/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── SqlRunnerTest.java
│           │                   ├── strategy/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── StrategyTest.java
│           │                   ├── tenant/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── TenantTest.java
│           │                   ├── toolkit/
│           │                   │   ├── DbTest.java
│           │                   │   ├── JdbcUtilsTest.java
│           │                   │   ├── SimpleQueryTest.java
│           │                   │   ├── SqlHelperTest.java
│           │                   │   └── StringUtilsTest.java
│           │                   ├── uuid/
│           │                   │   ├── DeleteByIdDto.java
│           │                   │   ├── UUIDEntity.java
│           │                   │   ├── UUIDEntityMapper.java
│           │                   │   ├── UUIDEntityTest.java
│           │                   │   ├── UUIDLogicEntity.java
│           │                   │   ├── UUIDLogicEntityMapper.java
│           │                   │   ├── UUIDLogicEntityTest.java
│           │                   │   └── UUIDTypeHandler.java
│           │                   └── version/
│           │                       ├── Entity.java
│           │                       ├── EntityMapper.java
│           │                       └── VersionTest.java
│           ├── kotlin/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               └── test/
│           │                   └── h2/
│           │                       ├── KtTestConfig.kt
│           │                       ├── MetaObjectHandlerTest.kt
│           │                       ├── MyMetaObjectHandler.kt
│           │                       └── kotlin/
│           │                           ├── KtH2UserTest.kt
│           │                           ├── entity/
│           │                           │   └── KtH2User.kt
│           │                           ├── mapper/
│           │                           │   └── KtUserMapper.kt
│           │                           └── service/
│           │                               ├── KtH2UserService.kt
│           │                               └── impl/
│           │                                   └── KtH2UserServiceImpl.kt
│           └── resources/
│               ├── cache/
│               │   └── init.ddl.sql
│               ├── com/
│               │   └── baomidou/
│               │       └── mybatisplus/
│               │           └── test/
│               │               ├── cache/
│               │               │   ├── package-info.java
│               │               │   └── xml/
│               │               │       └── XmlCacheMapper.xml
│               │               ├── enums/
│               │               │   └── EntityMapper.xml
│               │               ├── fill/
│               │               │   └── FillMapper.xml
│               │               ├── h2/
│               │               │   └── mapper/
│               │               │       └── H2StudentMapper.xml
│               │               ├── puginsome/
│               │               │   ├── AMapper.xml
│               │               │   └── BMapper.xml
│               │               ├── resultmap/
│               │               │   └── EntityMapper.xml
│               │               └── rewrite/
│               │                   └── EntityMapper.xml
│               ├── customfilltest/
│               │   └── init.ddl.sql
│               ├── fillperformance/
│               │   └── init.ddl.sql
│               ├── h2/
│               │   ├── spring-cache-h2.xml
│               │   ├── spring-custom-fill-test-h2.xml
│               │   ├── spring-fill-performance-h2.xml
│               │   ├── spring-id-generator-h2.xml
│               │   ├── spring-keygenerator-h2.xml
│               │   ├── spring-logic-delete-h2.xml
│               │   ├── spring-sharding-h2.xml
│               │   ├── spring-tenant-h2.xml
│               │   ├── spring-test-h2.xml
│               │   ├── spring-test-xml-h2.xml
│               │   ├── student.ddl.sql
│               │   ├── student.insert.sql
│               │   ├── user.ddl.sql
│               │   └── user.insert.sql
│               ├── hbase-site.xml
│               ├── idgenerator/
│               │   └── init.ddl.sql
│               ├── issues/
│               │   └── genericid/
│               │       ├── spring.xml
│               │       └── sql/
│               │           └── init.ddl.sql
│               ├── keygenerator/
│               │   └── init.ddl.sql
│               ├── logback.xml
│               ├── mybatis-config-object-factory.xml
│               ├── mybatis-config.xml
│               ├── phoenix/
│               │   ├── spring-test-phoenix.xml
│               │   └── test_info.ddl.sql
│               ├── postgresql/
│               │   └── spring-test-postgresql.xml
│               └── tenant/
│                   └── init.ddl.sql
├── mybatis-plus-annotation/
│   ├── build.gradle
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── baomidou/
│                       └── mybatisplus/
│                           └── annotation/
│                               ├── DbType.java
│                               ├── EnumValue.java
│                               ├── FieldFill.java
│                               ├── FieldStrategy.java
│                               ├── IEnum.java
│                               ├── IdType.java
│                               ├── InterceptorIgnore.java
│                               ├── KeySequence.java
│                               ├── OrderBy.java
│                               ├── SqlCondition.java
│                               ├── TableField.java
│                               ├── TableId.java
│                               ├── TableLogic.java
│                               ├── TableName.java
│                               ├── Version.java
│                               └── package-info.java
├── mybatis-plus-bom/
│   └── build.gradle
├── mybatis-plus-core/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── baomidou/
│       │   │           └── mybatisplus/
│       │   │               └── core/
│       │   │                   ├── InjectorResolver.java
│       │   │                   ├── MybatisConfiguration.java
│       │   │                   ├── MybatisMapperAnnotationBuilder.java
│       │   │                   ├── MybatisMapperBuilderAssistant.java
│       │   │                   ├── MybatisMapperRegistry.java
│       │   │                   ├── MybatisMethodResolver.java
│       │   │                   ├── MybatisParameterHandler.java
│       │   │                   ├── MybatisPlusVersion.java
│       │   │                   ├── MybatisSqlSessionFactoryBuilder.java
│       │   │                   ├── MybatisXMLConfigBuilder.java
│       │   │                   ├── MybatisXMLLanguageDriver.java
│       │   │                   ├── MybatisXMLMapperBuilder.java
│       │   │                   ├── MybatisXMLScriptBuilder.java
│       │   │                   ├── assist/
│       │   │                   │   ├── AbstractSqlRunner.java
│       │   │                   │   ├── ISqlRunner.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── batch/
│       │   │                   │   ├── BatchMethod.java
│       │   │                   │   ├── BatchSqlSession.java
│       │   │                   │   ├── MybatisBatch.java
│       │   │                   │   └── ParameterConvert.java
│       │   │                   ├── conditions/
│       │   │                   │   ├── AbstractLambdaWrapper.java
│       │   │                   │   ├── AbstractWrapper.java
│       │   │                   │   ├── ISqlSegment.java
│       │   │                   │   ├── SharedString.java
│       │   │                   │   ├── Wrapper.java
│       │   │                   │   ├── interfaces/
│       │   │                   │   │   ├── Compare.java
│       │   │                   │   │   ├── Func.java
│       │   │                   │   │   ├── Join.java
│       │   │                   │   │   ├── Nested.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   ├── package-info.java
│       │   │                   │   ├── query/
│       │   │                   │   │   ├── LambdaQueryWrapper.java
│       │   │                   │   │   ├── Query.java
│       │   │                   │   │   ├── QueryWrapper.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   ├── segments/
│       │   │                   │   │   ├── AbstractISegmentList.java
│       │   │                   │   │   ├── ColumnSegment.java
│       │   │                   │   │   ├── GroupBySegmentList.java
│       │   │                   │   │   ├── HavingSegmentList.java
│       │   │                   │   │   ├── MatchSegment.java
│       │   │                   │   │   ├── MergeSegments.java
│       │   │                   │   │   ├── NormalSegmentList.java
│       │   │                   │   │   ├── OrderBySegmentList.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── update/
│       │   │                   │       ├── LambdaUpdateWrapper.java
│       │   │                   │       ├── Update.java
│       │   │                   │       ├── UpdateWrapper.java
│       │   │                   │       └── package-info.java
│       │   │                   ├── config/
│       │   │                   │   ├── GlobalConfig.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── enums/
│       │   │                   │   ├── SqlKeyword.java
│       │   │                   │   ├── SqlLike.java
│       │   │                   │   ├── SqlMethod.java
│       │   │                   │   ├── WrapperKeyword.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── exceptions/
│       │   │                   │   ├── MybatisPlusException.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── handlers/
│       │   │                   │   ├── AnnotationHandler.java
│       │   │                   │   ├── CompositeEnumTypeHandler.java
│       │   │                   │   ├── IJsonTypeHandler.java
│       │   │                   │   ├── MetaObjectHandler.java
│       │   │                   │   ├── MybatisEnumTypeHandler.java
│       │   │                   │   ├── PostInitTableInfoHandler.java
│       │   │                   │   ├── StrictFill.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── incrementer/
│       │   │                   │   ├── DefaultIdentifierGenerator.java
│       │   │                   │   ├── IKeyGenerator.java
│       │   │                   │   ├── IdentifierGenerator.java
│       │   │                   │   ├── ImadcnIdentifierGenerator.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── injector/
│       │   │                   │   ├── AbstractMethod.java
│       │   │                   │   ├── AbstractSqlInjector.java
│       │   │                   │   ├── DefaultSqlInjector.java
│       │   │                   │   ├── ISqlInjector.java
│       │   │                   │   ├── SqlRunnerInjector.java
│       │   │                   │   ├── methods/
│       │   │                   │   │   ├── Delete.java
│       │   │                   │   │   ├── DeleteBatchByIds.java
│       │   │                   │   │   ├── DeleteById.java
│       │   │                   │   │   ├── DeleteByIds.java
│       │   │                   │   │   ├── DeleteByMap.java
│       │   │                   │   │   ├── Insert.java
│       │   │                   │   │   ├── SelectBatchByIds.java
│       │   │                   │   │   ├── SelectById.java
│       │   │                   │   │   ├── SelectByIds.java
│       │   │                   │   │   ├── SelectByMap.java
│       │   │                   │   │   ├── SelectCount.java
│       │   │                   │   │   ├── SelectList.java
│       │   │                   │   │   ├── SelectMaps.java
│       │   │                   │   │   ├── SelectMapsPage.java
│       │   │                   │   │   ├── SelectObjs.java
│       │   │                   │   │   ├── SelectOne.java
│       │   │                   │   │   ├── SelectPage.java
│       │   │                   │   │   ├── Update.java
│       │   │                   │   │   ├── UpdateById.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── mapper/
│       │   │                   │   ├── BaseMapper.java
│       │   │                   │   ├── Mapper.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── metadata/
│       │   │                   │   ├── IPage.java
│       │   │                   │   ├── MapperProxyMetadata.java
│       │   │                   │   ├── OrderFieldInfo.java
│       │   │                   │   ├── OrderItem.java
│       │   │                   │   ├── TableFieldInfo.java
│       │   │                   │   ├── TableInfo.java
│       │   │                   │   ├── TableInfoHelper.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── override/
│       │   │                   │   ├── MybatisMapperMethod.java
│       │   │                   │   ├── MybatisMapperProxy.java
│       │   │                   │   ├── MybatisMapperProxyFactory.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── package-info.java
│       │   │                   ├── plugins/
│       │   │                   │   ├── IgnoreStrategy.java
│       │   │                   │   └── InterceptorIgnoreHelper.java
│       │   │                   ├── spi/
│       │   │                   │   ├── CompatibleHelper.java
│       │   │                   │   └── CompatibleSet.java
│       │   │                   └── toolkit/
│       │   │                       ├── AES.java
│       │   │                       ├── AnnotationUtils.java
│       │   │                       ├── AopUtils.java
│       │   │                       ├── ArrayUtils.java
│       │   │                       ├── Assert.java
│       │   │                       ├── BeanUtils.java
│       │   │                       ├── ClassUtils.java
│       │   │                       ├── CollectionUtils.java
│       │   │                       ├── Constants.java
│       │   │                       ├── EncryptUtils.java
│       │   │                       ├── ExceptionUtils.java
│       │   │                       ├── GlobalConfigUtils.java
│       │   │                       ├── IdWorker.java
│       │   │                       ├── LambdaUtils.java
│       │   │                       ├── MybatisBatchUtils.java
│       │   │                       ├── MybatisUtils.java
│       │   │                       ├── NetUtils.java
│       │   │                       ├── ObjectUtils.java
│       │   │                       ├── ParameterUtils.java
│       │   │                       ├── PluginUtils.java
│       │   │                       ├── ReflectionKit.java
│       │   │                       ├── Sequence.java
│       │   │                       ├── SerializationUtils.java
│       │   │                       ├── SetAccessibleAction.java
│       │   │                       ├── StringPool.java
│       │   │                       ├── StringUtils.java
│       │   │                       ├── SystemClock.java
│       │   │                       ├── TableNameParser.java
│       │   │                       ├── Wrappers.java
│       │   │                       ├── package-info.java
│       │   │                       ├── reflect/
│       │   │                       │   ├── GenericTypeUtils.java
│       │   │                       │   ├── IGenericTypeResolver.java
│       │   │                       │   ├── SpringReflectionHelper.java
│       │   │                       │   └── TypeParameterResolver.java
│       │   │                       ├── sql/
│       │   │                       │   ├── SqlInjectionUtils.java
│       │   │                       │   ├── SqlScriptUtils.java
│       │   │                       │   ├── SqlUtils.java
│       │   │                       │   ├── StringEscape.java
│       │   │                       │   └── package-info.java
│       │   │                       └── support/
│       │   │                           ├── BiIntFunction.java
│       │   │                           ├── ColumnCache.java
│       │   │                           ├── IdeaProxyLambdaMeta.java
│       │   │                           ├── LambdaMeta.java
│       │   │                           ├── ReflectLambdaMeta.java
│       │   │                           ├── SFunction.java
│       │   │                           ├── SerializedLambda.java
│       │   │                           └── ShadowLambdaMeta.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── spring-devtools.properties
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               ├── code/
│           │               │   ├── Overwrite.java
│           │               │   ├── OverwriteFile.java
│           │               │   ├── OverwriteRunner.java
│           │               │   └── sub/
│           │               │       └── MapperMethod.java
│           │               ├── core/
│           │               │   ├── MethodTest.java
│           │               │   ├── MybatisMapperAnnotationBuilderTest.java
│           │               │   ├── MybatisXMLConfigBuilderTest.java
│           │               │   ├── MybatisXMLLanguageDriverTest.java
│           │               │   ├── MybatisXMLScriptBuilderTest.java
│           │               │   ├── conditions/
│           │               │   │   ├── AbstractWrapperTest.java
│           │               │   │   ├── BaseWrapperTest.java
│           │               │   │   ├── LambdaQueryWrapperTest.java
│           │               │   │   ├── QueryWrapperTest.java
│           │               │   │   ├── UpdateWrapperIncrDecrTest.java
│           │               │   │   └── UpdateWrapperTest.java
│           │               │   ├── handlers/
│           │               │   │   └── MetaObjectHandlerTest.java
│           │               │   ├── incrementer/
│           │               │   │   └── ImadcnIdentifierGeneratorTest.java
│           │               │   ├── metadata/
│           │               │   │   └── TableInfoTest.java
│           │               │   ├── plugins/
│           │               │   │   └── InterceptorIgnoreHelperTest.java
│           │               │   └── toolkit/
│           │               │       ├── MybatisUtilsTest.java
│           │               │       ├── SequenceTest.java
│           │               │       ├── reflect/
│           │               │       │   └── TypeParameterResolverTest.java
│           │               │       ├── sql/
│           │               │       │   ├── SqlInjectionUtilsTest.java
│           │               │       │   ├── SqlScriptUtilsTest.java
│           │               │       │   └── SqlUtilsTest.java
│           │               │       └── support/
│           │               │           └── IdeaProxyLambdaMetaTest.java
│           │               └── test/
│           │                   ├── EncryptTest.java
│           │                   ├── MybatisConfigurationTest.java
│           │                   ├── MybatisMapperAnnotationBuilderTest.java
│           │                   ├── MybatisParameterHandlerTest.java
│           │                   ├── Role.java
│           │                   ├── User.java
│           │                   ├── entity/
│           │                   │   ├── AEntity.java
│           │                   │   └── BEntity.java
│           │                   ├── mapper/
│           │                   │   ├── AMapper.java
│           │                   │   └── BMapper.java
│           │                   ├── metadata/
│           │                   │   └── TableInfoHelperTest.java
│           │                   ├── override/
│           │                   │   └── MybatisMapperMethodTest.java
│           │                   ├── pom/
│           │                   │   ├── GeneratePomTest.java
│           │                   │   └── ReflectionKitTest.java
│           │                   └── toolkit/
│           │                       ├── AESTest.java
│           │                       ├── AnnotationUtilsTest.java
│           │                       ├── BeanUtilsTest.java
│           │                       ├── ClassUtilsTest.java
│           │                       ├── CollectionUtilsTest.java
│           │                       ├── LambdaUtilsTest.java
│           │                       ├── ParameterUtilsTest.java
│           │                       ├── PluginUtilsTest.java
│           │                       ├── ReflectionKitTest.java
│           │                       ├── StringUtilsTest.java
│           │                       └── TableNameParserTest.java
│           └── resources/
│               ├── MybatisXMLConfigBuilderTest.xml
│               ├── com/
│               │   └── baomidou/
│               │       └── mybatisplus/
│               │           └── test/
│               │               └── mapper/
│               │                   ├── AMapper.xml
│               │                   └── BMapper.xml
│               └── mybatis-config-empty.xml
├── mybatis-plus-extension/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── baomidou/
│       │   │           └── mybatisplus/
│       │   │               └── extension/
│       │   │                   ├── MybatisMapWrapperFactory.java
│       │   │                   ├── activerecord/
│       │   │                   │   ├── AbstractModel.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── conditions/
│       │   │                   │   ├── AbstractChainWrapper.java
│       │   │                   │   ├── ChainWrapper.java
│       │   │                   │   ├── query/
│       │   │                   │   │   ├── ChainQuery.java
│       │   │                   │   │   ├── LambdaQueryChainWrapper.java
│       │   │                   │   │   └── QueryChainWrapper.java
│       │   │                   │   └── update/
│       │   │                   │       ├── ChainUpdate.java
│       │   │                   │       ├── LambdaUpdateChainWrapper.java
│       │   │                   │       └── UpdateChainWrapper.java
│       │   │                   ├── ddl/
│       │   │                   │   ├── DdlHelper.java
│       │   │                   │   ├── DdlScript.java
│       │   │                   │   ├── DdlScriptErrorHandler.java
│       │   │                   │   ├── IDdl.java
│       │   │                   │   └── history/
│       │   │                   │       ├── IDdlGenerator.java
│       │   │                   │       ├── MysqlDdlGenerator.java
│       │   │                   │       ├── OracleDdlGenerator.java
│       │   │                   │       ├── PostgreDdlGenerator.java
│       │   │                   │       └── SQLiteDdlGenerator.java
│       │   │                   ├── handlers/
│       │   │                   │   ├── AbstractJsonTypeHandler.java
│       │   │                   │   ├── Fastjson2TypeHandler.java
│       │   │                   │   ├── FastjsonTypeHandler.java
│       │   │                   │   ├── GsonTypeHandler.java
│       │   │                   │   ├── Jackson3TypeHandler.java
│       │   │                   │   ├── JacksonTypeHandler.java
│       │   │                   │   ├── MybatisMapWrapper.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── incrementer/
│       │   │                   │   ├── DB2KeyGenerator.java
│       │   │                   │   ├── DmKeyGenerator.java
│       │   │                   │   ├── FirebirdKeyGenerator.java
│       │   │                   │   ├── H2KeyGenerator.java
│       │   │                   │   ├── KingbaseKeyGenerator.java
│       │   │                   │   ├── LealoneKeyGenerator.java
│       │   │                   │   ├── OracleKeyGenerator.java
│       │   │                   │   ├── PostgreKeyGenerator.java
│       │   │                   │   ├── SapHanaKeyGenerator.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── injector/
│       │   │                   │   ├── methods/
│       │   │                   │   │   ├── AlwaysUpdateSomeColumnById.java
│       │   │                   │   │   ├── InsertBatchSomeColumn.java
│       │   │                   │   │   ├── LogicDeleteBatchByIds.java
│       │   │                   │   │   ├── LogicDeleteByIdWithFill.java
│       │   │                   │   │   ├── Upsert.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── p6spy/
│       │   │                   │   ├── MybatisPlusLogFactory.java
│       │   │                   │   ├── MybatisPlusLoggingEventListener.java
│       │   │                   │   ├── P6SpyLogger.java
│       │   │                   │   └── StdoutLogger.java
│       │   │                   ├── package-info.java
│       │   │                   ├── plugins/
│       │   │                   │   ├── MybatisPlusInterceptor.java
│       │   │                   │   ├── handler/
│       │   │                   │   │   └── TableNameHandler.java
│       │   │                   │   ├── inner/
│       │   │                   │   │   ├── DynamicTableNameInnerInterceptor.java
│       │   │                   │   │   ├── InnerInterceptor.java
│       │   │                   │   │   ├── OptimisticLockerInnerInterceptor.java
│       │   │                   │   │   └── ReplacePlaceholderInnerInterceptor.java
│       │   │                   │   ├── package-info.java
│       │   │                   │   └── pagination/
│       │   │                   │       ├── DialectFactory.java
│       │   │                   │       ├── DialectModel.java
│       │   │                   │       ├── Page.java
│       │   │                   │       ├── PageDTO.java
│       │   │                   │       ├── dialects/
│       │   │                   │       │   ├── DB2Dialect.java
│       │   │                   │       │   ├── GBase8sDialect.java
│       │   │                   │       │   ├── GaussDBDialect.java
│       │   │                   │       │   ├── Hive2Dialect.java
│       │   │                   │       │   ├── IDialect.java
│       │   │                   │       │   ├── InformixDialect.java
│       │   │                   │       │   ├── MySqlDialect.java
│       │   │                   │       │   ├── Oracle12cDialect.java
│       │   │                   │       │   ├── OracleDialect.java
│       │   │                   │       │   ├── PostgreDialect.java
│       │   │                   │       │   ├── SQLServer2005Dialect.java
│       │   │                   │       │   ├── SQLServerDialect.java
│       │   │                   │       │   ├── SybaseDialect.java
│       │   │                   │       │   ├── TrinoDialect.java
│       │   │                   │       │   ├── XCloudDialect.java
│       │   │                   │       │   └── package-info.java
│       │   │                   │       └── package-info.java
│       │   │                   ├── repository/
│       │   │                   │   ├── AbstractRepository.java
│       │   │                   │   └── IRepository.java
│       │   │                   ├── scripting/
│       │   │                   │   ├── MybatisFreeMarkerLanguageDriver.java
│       │   │                   │   ├── MybatisThymeleafLanguageDriver.java
│       │   │                   │   └── MybatisVelocityLanguageDriver.java
│       │   │                   ├── spi/
│       │   │                   │   ├── CompatibleHelper.java
│       │   │                   │   └── CompatibleSet.java
│       │   │                   └── toolkit/
│       │   │                       ├── ChainWrappers.java
│       │   │                       ├── Db.java
│       │   │                       ├── JdbcUtils.java
│       │   │                       ├── PropertyMapper.java
│       │   │                       ├── SimpleQuery.java
│       │   │                       ├── SqlHelper.java
│       │   │                       ├── SqlParserUtils.java
│       │   │                       └── package-info.java
│       │   └── kotlin/
│       │       └── com/
│       │           └── baomidou/
│       │               └── mybatisplus/
│       │                   └── extension/
│       │                       └── kotlin/
│       │                           ├── AbstractKtWrapper.kt
│       │                           ├── KtQueryChainWrapper.kt
│       │                           ├── KtQueryWrapper.kt
│       │                           ├── KtUpdateChainWrapper.kt
│       │                           └── KtUpdateWrapper.kt
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               └── test/
│           │                   ├── DdlHelperTest.java
│           │                   ├── DdlScriptTest.java
│           │                   ├── SqlParserUtilsTest.java
│           │                   ├── extension/
│           │                   │   ├── parsers/
│           │                   │   │   └── DynamicTableNameParserTest.java
│           │                   │   └── plugins/
│           │                   │       └── pagination/
│           │                   │           └── dialects/
│           │                   │               └── IDialectTest.java
│           │                   ├── handlers/
│           │                   │   ├── BaseTypeHandlerTest.java
│           │                   │   ├── FastJson2TypeHandlerTest.java
│           │                   │   ├── FastJsonTypeHandlerTest.java
│           │                   │   ├── GsonTypeHandlerTest.java
│           │                   │   ├── Jackson3TypeHandlerTest.java
│           │                   │   ├── JacksonTypeHandlerTest.java
│           │                   │   ├── MybatisEnumTypeHandlerTest.java
│           │                   │   └── MybatisMapWrapperTest.java
│           │                   ├── model/
│           │                   │   └── UserBean.java
│           │                   ├── plugins/
│           │                   │   └── pagination/
│           │                   │       ├── DialectFactoryTest.java
│           │                   │       └── SQLServer2005DialectTest.java
│           │                   └── pom/
│           │                       └── GeneratePomTest.java
│           └── resources/
│               ├── ddl/
│               │   └── test.sql
│               └── logback.xml
├── mybatis-plus-generator/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── baomidou/
│       │   │           └── mybatisplus/
│       │   │               └── generator/
│       │   │                   ├── AutoGenerator.java
│       │   │                   ├── DefaultTableAnnotationHandler.java
│       │   │                   ├── DefaultTableFieldAnnotationHandler.java
│       │   │                   ├── FastAutoGenerator.java
│       │   │                   ├── IFill.java
│       │   │                   ├── IGenerateMapperMethodHandler.java
│       │   │                   ├── ITableAnnotationHandler.java
│       │   │                   ├── ITableFieldAnnotationHandler.java
│       │   │                   ├── ITemplate.java
│       │   │                   ├── config/
│       │   │                   │   ├── ConstVal.java
│       │   │                   │   ├── DataSourceConfig.java
│       │   │                   │   ├── GlobalConfig.java
│       │   │                   │   ├── IConfigBuilder.java
│       │   │                   │   ├── IDbQuery.java
│       │   │                   │   ├── IKeyWordsHandler.java
│       │   │                   │   ├── INameConvert.java
│       │   │                   │   ├── IOutputFile.java
│       │   │                   │   ├── ITypeConvert.java
│       │   │                   │   ├── InjectionConfig.java
│       │   │                   │   ├── OutputFile.java
│       │   │                   │   ├── PackageConfig.java
│       │   │                   │   ├── StrategyConfig.java
│       │   │                   │   ├── TemplateConfig.java
│       │   │                   │   ├── TemplateLoadWay.java
│       │   │                   │   ├── TemplateType.java
│       │   │                   │   ├── builder/
│       │   │                   │   │   ├── BaseBuilder.java
│       │   │                   │   │   ├── ConfigBuilder.java
│       │   │                   │   │   ├── Controller.java
│       │   │                   │   │   ├── CustomFile.java
│       │   │                   │   │   ├── Entity.java
│       │   │                   │   │   ├── GeneratorBuilder.java
│       │   │                   │   │   ├── Mapper.java
│       │   │                   │   │   ├── PathInfoHandler.java
│       │   │                   │   │   ├── Service.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   ├── converts/
│       │   │                   │   │   ├── ClickHouseTypeConvert.java
│       │   │                   │   │   ├── DB2TypeConvert.java
│       │   │                   │   │   ├── DmTypeConvert.java
│       │   │                   │   │   ├── FirebirdTypeConvert.java
│       │   │                   │   │   ├── GaussDBSqlTypeConvert.java
│       │   │                   │   │   ├── KingbaseESTypeConvert.java
│       │   │                   │   │   ├── MySqlTypeConvert.java
│       │   │                   │   │   ├── OracleTypeConvert.java
│       │   │                   │   │   ├── OscarTypeConvert.java
│       │   │                   │   │   ├── PostgreSqlTypeConvert.java
│       │   │                   │   │   ├── SqlServerTypeConvert.java
│       │   │                   │   │   ├── SqliteTypeConvert.java
│       │   │                   │   │   ├── TypeConverts.java
│       │   │                   │   │   ├── package-info.java
│       │   │                   │   │   └── select/
│       │   │                   │   │       ├── Branch.java
│       │   │                   │   │       ├── BranchBuilder.java
│       │   │                   │   │       └── Selector.java
│       │   │                   │   ├── package-info.java
│       │   │                   │   ├── po/
│       │   │                   │   │   ├── LikeTable.java
│       │   │                   │   │   ├── TableField.java
│       │   │                   │   │   ├── TableInfo.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   ├── querys/
│       │   │                   │   │   ├── AbstractDbQuery.java
│       │   │                   │   │   ├── ClickHouseQuery.java
│       │   │                   │   │   ├── DB2Query.java
│       │   │                   │   │   ├── DMQuery.java
│       │   │                   │   │   ├── DbQueryDecorator.java
│       │   │                   │   │   ├── DbQueryRegistry.java
│       │   │                   │   │   ├── FirebirdQuery.java
│       │   │                   │   │   ├── GaussDBSqlQuery.java
│       │   │                   │   │   ├── GaussQuery.java
│       │   │                   │   │   ├── GbaseQuery.java
│       │   │                   │   │   ├── H2Query.java
│       │   │                   │   │   ├── KingbaseESQuery.java
│       │   │                   │   │   ├── MariadbQuery.java
│       │   │                   │   │   ├── MySqlQuery.java
│       │   │                   │   │   ├── OracleQuery.java
│       │   │                   │   │   ├── OscarQuery.java
│       │   │                   │   │   ├── PostgreSqlQuery.java
│       │   │                   │   │   ├── SqlServerQuery.java
│       │   │                   │   │   ├── SqliteQuery.java
│       │   │                   │   │   ├── SybaseQuery.java
│       │   │                   │   │   ├── XuguQuery.java
│       │   │                   │   │   ├── ZenithQuery.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── rules/
│       │   │                   │       ├── DateType.java
│       │   │                   │       ├── DbColumnType.java
│       │   │                   │       ├── IColumnType.java
│       │   │                   │       ├── NamingStrategy.java
│       │   │                   │       └── package-info.java
│       │   │                   ├── engine/
│       │   │                   │   ├── AbstractTemplateEngine.java
│       │   │                   │   ├── BeetlTemplateEngine.java
│       │   │                   │   ├── EnjoyTemplateEngine.java
│       │   │                   │   ├── FreemarkerTemplateEngine.java
│       │   │                   │   └── VelocityTemplateEngine.java
│       │   │                   ├── fill/
│       │   │                   │   ├── Column.java
│       │   │                   │   └── Property.java
│       │   │                   ├── function/
│       │   │                   │   └── ConverterFileName.java
│       │   │                   ├── index/
│       │   │                   │   ├── AbstractMapperMethodHandler.java
│       │   │                   │   ├── DefaultGenerateMapperLambdaMethodHandler.java
│       │   │                   │   └── DefaultGenerateMapperMethodHandler.java
│       │   │                   ├── jdbc/
│       │   │                   │   └── DatabaseMetaDataWrapper.java
│       │   │                   ├── keywords/
│       │   │                   │   ├── BaseKeyWordsHandler.java
│       │   │                   │   ├── H2KeyWordsHandler.java
│       │   │                   │   ├── MySqlKeyWordsHandler.java
│       │   │                   │   ├── PostgreSqlKeyWordsHandler.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── model/
│       │   │                   │   ├── AnnotationAttributes.java
│       │   │                   │   ├── ClassAnnotationAttributes.java
│       │   │                   │   └── MapperMethod.java
│       │   │                   ├── package-info.java
│       │   │                   ├── query/
│       │   │                   │   ├── AbstractDatabaseQuery.java
│       │   │                   │   ├── DefaultQuery.java
│       │   │                   │   ├── IDatabaseQuery.java
│       │   │                   │   └── SQLQuery.java
│       │   │                   ├── type/
│       │   │                   │   ├── ITypeConvertHandler.java
│       │   │                   │   └── TypeRegistry.java
│       │   │                   └── util/
│       │   │                       ├── ClassUtils.java
│       │   │                       ├── FileUtils.java
│       │   │                       ├── KotlinTypeUtils.java
│       │   │                       └── RuntimeUtils.java
│       │   └── resources/
│       │       └── templates/
│       │           ├── controller.java.btl
│       │           ├── controller.java.ej
│       │           ├── controller.java.ftl
│       │           ├── controller.java.vm
│       │           ├── entity.java.btl
│       │           ├── entity.java.ej
│       │           ├── entity.java.ftl
│       │           ├── entity.java.vm
│       │           ├── entity.kt.btl
│       │           ├── entity.kt.ej
│       │           ├── entity.kt.ftl
│       │           ├── entity.kt.vm
│       │           ├── mapper.java.btl
│       │           ├── mapper.java.ej
│       │           ├── mapper.java.ftl
│       │           ├── mapper.java.vm
│       │           ├── mapper.xml.btl
│       │           ├── mapper.xml.ej
│       │           ├── mapper.xml.ftl
│       │           ├── mapper.xml.vm
│       │           ├── service.java.btl
│       │           ├── service.java.ej
│       │           ├── service.java.ftl
│       │           ├── service.java.vm
│       │           ├── serviceImpl.java.btl
│       │           ├── serviceImpl.java.ej
│       │           ├── serviceImpl.java.ftl
│       │           └── serviceImpl.java.vm
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           ├── demo/
│           │           │   ├── beetl/
│           │           │   │   ├── controller/
│           │           │   │   │   └── SimpleController.java
│           │           │   │   ├── entity/
│           │           │   │   │   └── Simple.java
│           │           │   │   ├── mapper/
│           │           │   │   │   ├── SimpleMapper.java
│           │           │   │   │   └── xml/
│           │           │   │   │       └── SimpleMapper.xml
│           │           │   │   └── service/
│           │           │   │       ├── ISimpleService.java
│           │           │   │       └── impl/
│           │           │   │           └── SimpleServiceImpl.java
│           │           │   ├── enjoy/
│           │           │   │   ├── controller/
│           │           │   │   │   └── SimpleController.java
│           │           │   │   ├── entity/
│           │           │   │   │   └── Simple.java
│           │           │   │   ├── mapper/
│           │           │   │   │   ├── SimpleMapper.java
│           │           │   │   │   └── xml/
│           │           │   │   │       └── SimpleMapper.xml
│           │           │   │   └── service/
│           │           │   │       ├── ISimpleService.java
│           │           │   │       └── impl/
│           │           │   │           └── SimpleServiceImpl.java
│           │           │   ├── freemarker/
│           │           │   │   ├── controller/
│           │           │   │   │   └── SimpleController.java
│           │           │   │   ├── entity/
│           │           │   │   │   └── Simple.java
│           │           │   │   ├── mapper/
│           │           │   │   │   ├── SimpleMapper.java
│           │           │   │   │   └── xml/
│           │           │   │   │       └── SimpleMapper.xml
│           │           │   │   └── service/
│           │           │   │       ├── ISimpleService.java
│           │           │   │       └── impl/
│           │           │   │           └── SimpleServiceImpl.java
│           │           │   └── velocity/
│           │           │       ├── controller/
│           │           │       │   └── SimpleController.java
│           │           │       ├── entity/
│           │           │       │   └── Simple.java
│           │           │       ├── mapper/
│           │           │       │   ├── SimpleMapper.java
│           │           │       │   └── xml/
│           │           │       │       └── SimpleMapper.xml
│           │           │       └── service/
│           │           │           ├── ISimpleService.java
│           │           │           └── impl/
│           │           │               └── SimpleServiceImpl.java
│           │           └── mybatisplus/
│           │               └── generator/
│           │                   ├── config/
│           │                   │   ├── DataSourceConfigTest.java
│           │                   │   ├── DbQueryRegistryTest.java
│           │                   │   ├── GlobalConfigTest.java
│           │                   │   ├── InjectionConfigTest.java
│           │                   │   ├── PackageConfigTest.java
│           │                   │   ├── StrategyConfigTest.java
│           │                   │   ├── TemplateConfigTest.java
│           │                   │   ├── builder/
│           │                   │   │   └── ConfigBuilderTest.java
│           │                   │   ├── converts/
│           │                   │   │   ├── GaussDBSqlTypeConvertTest.java
│           │                   │   │   ├── SqlServerTypeConvertTest.java
│           │                   │   │   ├── TypeConvertsTest.java
│           │                   │   │   └── select/
│           │                   │   │       └── SelectorTest.java
│           │                   │   ├── po/
│           │                   │   │   ├── TableFieldTest.java
│           │                   │   │   └── TableInfoTest.java
│           │                   │   └── rules/
│           │                   │       └── NamingStrategyTest.java
│           │                   ├── engine/
│           │                   │   └── TemplateEngineTest.java
│           │                   ├── entity/
│           │                   │   ├── BaseEntity.java
│           │                   │   └── SuperEntity.java
│           │                   ├── index/
│           │                   │   └── MapperMethodHandlerTest.java
│           │                   ├── jdbc/
│           │                   │   └── DatabaseMetaDataWrapperTest.java
│           │                   ├── keywords/
│           │                   │   ├── H2KeyWordsHandlerTest.java
│           │                   │   ├── MySqlKeyWordsHandlerTest.java
│           │                   │   └── PostgreSqlKeyWordsHandlerTest.java
│           │                   ├── model/
│           │                   │   └── ClassAnnotationAttributesTest.java
│           │                   └── samples/
│           │                       ├── BaseGeneratorTest.java
│           │                       ├── DMGeneratorTest.java
│           │                       ├── FastAutoGeneratorTest.java
│           │                       ├── GaussDBGeneratorTest.java
│           │                       ├── H2CodeGeneratorTest.java
│           │                       ├── MySQLGeneratorTest.java
│           │                       ├── OracleGeneratorTest.java
│           │                       └── PostgreSQLGeneratorTest.java
│           ├── kotlin/
│           │   └── com/
│           │       └── baomidou/
│           │           ├── beetl/
│           │           │   ├── controller/
│           │           │   │   └── SimpleController.kt
│           │           │   ├── entity/
│           │           │   │   └── Simple.kt
│           │           │   ├── mapper/
│           │           │   │   ├── SimpleMapper.kt
│           │           │   │   └── xml/
│           │           │   │       └── SimpleMapper.xml
│           │           │   └── service/
│           │           │       ├── ISimpleService.kt
│           │           │       └── impl/
│           │           │           └── SimpleServiceImpl.kt
│           │           ├── enjoy/
│           │           │   ├── controller/
│           │           │   │   └── SimpleController.kt
│           │           │   ├── entity/
│           │           │   │   └── Simple.kt
│           │           │   ├── mapper/
│           │           │   │   ├── SimpleMapper.kt
│           │           │   │   └── xml/
│           │           │   │       └── SimpleMapper.xml
│           │           │   └── service/
│           │           │       ├── ISimpleService.kt
│           │           │       └── impl/
│           │           │           └── SimpleServiceImpl.kt
│           │           ├── freemarker/
│           │           │   ├── controller/
│           │           │   │   └── SimpleController.kt
│           │           │   ├── entity/
│           │           │   │   └── Simple.kt
│           │           │   ├── mapper/
│           │           │   │   ├── SimpleMapper.kt
│           │           │   │   └── xml/
│           │           │   │       └── SimpleMapper.xml
│           │           │   └── service/
│           │           │       ├── ISimpleService.kt
│           │           │       └── impl/
│           │           │           └── SimpleServiceImpl.kt
│           │           └── velocity/
│           │               ├── controller/
│           │               │   └── SimpleController.kt
│           │               ├── entity/
│           │               │   └── Simple.kt
│           │               ├── mapper/
│           │               │   ├── SimpleMapper.kt
│           │               │   └── xml/
│           │               │       └── SimpleMapper.xml
│           │               └── service/
│           │                   ├── ISimpleService.kt
│           │                   └── impl/
│           │                       └── SimpleServiceImpl.kt
│           └── resources/
│               ├── sql/
│               │   └── init.sql
│               └── templates/
│                   ├── dto.java.ftl
│                   ├── dto.java.vm
│                   ├── entity1.java.ftl
│                   ├── entity1.java.vm
│                   ├── test.vm
│                   ├── vo.java.ftl
│                   └── vo.java.vm
├── mybatis-plus-jsqlparser-support/
│   ├── build.gradle
│   ├── mybatis-plus-jsqlparser/
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── baomidou/
│   │       │               └── mybatisplus/
│   │       │                   └── extension/
│   │       │                       ├── DynamicTableNameHandler.java
│   │       │                       ├── parser/
│   │       │                       │   ├── JsqlParserFunction.java
│   │       │                       │   ├── JsqlParserGlobal.java
│   │       │                       │   ├── JsqlParserSupport.java
│   │       │                       │   └── cache/
│   │       │                       │       ├── AbstractCaffeineJsqlParseCache.java
│   │       │                       │       ├── FstFactory.java
│   │       │                       │       ├── FstSerialCaffeineJsqlParseCache.java
│   │       │                       │       ├── FuryFactory.java
│   │       │                       │       ├── FurySerialCaffeineJsqlParseCache.java
│   │       │                       │       ├── JdkSerialCaffeineJsqlParseCache.java
│   │       │                       │       └── JsqlParseCache.java
│   │       │                       └── plugins/
│   │       │                           ├── handler/
│   │       │                           │   ├── DataPermissionHandler.java
│   │       │                           │   ├── MultiDataPermissionHandler.java
│   │       │                           │   └── TenantLineHandler.java
│   │       │                           └── inner/
│   │       │                               ├── BaseMultiTableInnerInterceptor.java
│   │       │                               ├── BlockAttackInnerInterceptor.java
│   │       │                               ├── DataChangeRecorderInnerInterceptor.java
│   │       │                               ├── DataPermissionInterceptor.java
│   │       │                               ├── DynamicTableNameJsqlParserInnerInterceptor.java
│   │       │                               ├── IllegalSQLInnerInterceptor.java
│   │       │                               ├── PaginationInnerInterceptor.java
│   │       │                               └── TenantLineInnerInterceptor.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── baomidou/
│   │                       └── mybatisplus/
│   │                           └── test/
│   │                               ├── JSqlParserTest.java
│   │                               ├── extension/
│   │                               │   ├── parser/
│   │                               │   │   ├── JsqlParserSimpleSerialTest.java
│   │                               │   │   └── cache/
│   │                               │   │       └── FstFactoryTest.java
│   │                               │   └── plugins/
│   │                               │       ├── MybatisPlusInterceptorTest.java
│   │                               │       └── inner/
│   │                               │           ├── BlockAttackInnerInterceptorTest.java
│   │                               │           ├── DataChangeRecorderInnerInterceptorTest.java
│   │                               │           ├── DataPermissionInterceptorTest.java
│   │                               │           ├── DynamicTableNameInnerInterceptorTest.java
│   │                               │           ├── DynamicTableNameJsqlParserInnerInterceptorTest.java
│   │                               │           ├── IllegalSQLInnerInterceptorTest.java
│   │                               │           ├── MultiDataPermissionInterceptorTest.java
│   │                               │           ├── PaginationInnerInterceptorTest.java
│   │                               │           └── TenantLineInnerInterceptorTest.java
│   │                               └── pagination/
│   │                                   └── SelectBodyToPlainSelectTest.java
│   ├── mybatis-plus-jsqlparser-4.9/
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── baomidou/
│   │       │               └── mybatisplus/
│   │       │                   └── extension/
│   │       │                       ├── DynamicTableNameHandler.java
│   │       │                       ├── parser/
│   │       │                       │   ├── JsqlParserFunction.java
│   │       │                       │   ├── JsqlParserGlobal.java
│   │       │                       │   ├── JsqlParserSupport.java
│   │       │                       │   └── cache/
│   │       │                       │       ├── AbstractCaffeineJsqlParseCache.java
│   │       │                       │       ├── FstFactory.java
│   │       │                       │       ├── FstSerialCaffeineJsqlParseCache.java
│   │       │                       │       ├── JdkSerialCaffeineJsqlParseCache.java
│   │       │                       │       └── JsqlParseCache.java
│   │       │                       └── plugins/
│   │       │                           ├── handler/
│   │       │                           │   ├── DataPermissionHandler.java
│   │       │                           │   ├── MultiDataPermissionHandler.java
│   │       │                           │   └── TenantLineHandler.java
│   │       │                           └── inner/
│   │       │                               ├── BaseMultiTableInnerInterceptor.java
│   │       │                               ├── BlockAttackInnerInterceptor.java
│   │       │                               ├── DataChangeRecorderInnerInterceptor.java
│   │       │                               ├── DataPermissionInterceptor.java
│   │       │                               ├── DynamicTableNameJsqlParserInnerInterceptor.java
│   │       │                               ├── IllegalSQLInnerInterceptor.java
│   │       │                               ├── PaginationInnerInterceptor.java
│   │       │                               └── TenantLineInnerInterceptor.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── baomidou/
│   │                       └── mybatisplus/
│   │                           └── test/
│   │                               ├── JSqlParserTest.java
│   │                               ├── extension/
│   │                               │   ├── parser/
│   │                               │   │   ├── JsqlParserSimpleSerialTest.java
│   │                               │   │   └── cache/
│   │                               │   │       └── FstFactoryTest.java
│   │                               │   └── plugins/
│   │                               │       ├── MybatisPlusInterceptorTest.java
│   │                               │       └── inner/
│   │                               │           ├── BlockAttackInnerInterceptorTest.java
│   │                               │           ├── DataChangeRecorderInnerInterceptorTest.java
│   │                               │           ├── DataPermissionInterceptorTest.java
│   │                               │           ├── DynamicTableNameInnerInterceptorTest.java
│   │                               │           ├── DynamicTableNameJsqlParserInnerInterceptorTest.java
│   │                               │           ├── IllegalSQLInnerInterceptorTest.java
│   │                               │           ├── MultiDataPermissionInterceptorTest.java
│   │                               │           ├── PaginationInnerInterceptorTest.java
│   │                               │           └── TenantLineInnerInterceptorTest.java
│   │                               └── plugins/
│   │                                   └── pagination/
│   │                                       └── SelectBodyToPlainSelectTest.java
│   ├── mybatis-plus-jsqlparser-5.0/
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── baomidou/
│   │       │               └── mybatisplus/
│   │       │                   └── extension/
│   │       │                       ├── DynamicTableNameHandler.java
│   │       │                       ├── parser/
│   │       │                       │   ├── JsqlParserFunction.java
│   │       │                       │   ├── JsqlParserGlobal.java
│   │       │                       │   ├── JsqlParserSupport.java
│   │       │                       │   └── cache/
│   │       │                       │       ├── AbstractCaffeineJsqlParseCache.java
│   │       │                       │       ├── FstFactory.java
│   │       │                       │       ├── FstSerialCaffeineJsqlParseCache.java
│   │       │                       │       ├── JdkSerialCaffeineJsqlParseCache.java
│   │       │                       │       └── JsqlParseCache.java
│   │       │                       └── plugins/
│   │       │                           ├── handler/
│   │       │                           │   ├── DataPermissionHandler.java
│   │       │                           │   ├── MultiDataPermissionHandler.java
│   │       │                           │   └── TenantLineHandler.java
│   │       │                           └── inner/
│   │       │                               ├── BaseMultiTableInnerInterceptor.java
│   │       │                               ├── BlockAttackInnerInterceptor.java
│   │       │                               ├── DataChangeRecorderInnerInterceptor.java
│   │       │                               ├── DataPermissionInterceptor.java
│   │       │                               ├── DynamicTableNameJsqlParserInnerInterceptor.java
│   │       │                               ├── IllegalSQLInnerInterceptor.java
│   │       │                               ├── PaginationInnerInterceptor.java
│   │       │                               └── TenantLineInnerInterceptor.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── baomidou/
│   │                       └── mybatisplus/
│   │                           └── test/
│   │                               ├── JSqlParserTest.java
│   │                               ├── extension/
│   │                               │   ├── parser/
│   │                               │   │   ├── JsqlParserSimpleSerialTest.java
│   │                               │   │   └── cache/
│   │                               │   │       └── FstFactoryTest.java
│   │                               │   └── plugins/
│   │                               │       ├── MybatisPlusInterceptorTest.java
│   │                               │       └── inner/
│   │                               │           ├── BlockAttackInnerInterceptorTest.java
│   │                               │           ├── DataChangeRecorderInnerInterceptorTest.java
│   │                               │           ├── DataPermissionInterceptorTest.java
│   │                               │           ├── DynamicTableNameInnerInterceptorTest.java
│   │                               │           ├── DynamicTableNameJsqlParserInnerInterceptorTest.java
│   │                               │           ├── IllegalSQLInnerInterceptorTest.java
│   │                               │           ├── MultiDataPermissionInterceptorTest.java
│   │                               │           ├── PaginationInnerInterceptorTest.java
│   │                               │           └── TenantLineInnerInterceptorTest.java
│   │                               └── pagination/
│   │                                   └── SelectBodyToPlainSelectTest.java
│   └── mybatis-plus-jsqlparser-common/
│       ├── build.gradle
│       └── src/
│           └── main/
│               └── java/
│                   └── com/
│                       └── baomidou/
│                           └── mybatisplus/
│                               └── jsqlparser/
│                                   ├── JsqlParserThreadPool.java
│                                   └── enums/
│                                       └── ExpressionAppendMode.java
├── mybatis-plus-spring/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── baomidou/
│       │   │           └── mybatisplus/
│       │   │               └── extension/
│       │   │                   ├── activerecord/
│       │   │                   │   └── Model.java
│       │   │                   ├── ddl/
│       │   │                   │   └── SimpleDdl.java
│       │   │                   ├── repository/
│       │   │                   │   └── CrudRepository.java
│       │   │                   ├── service/
│       │   │                   │   ├── IService.java
│       │   │                   │   ├── impl/
│       │   │                   │   │   ├── ServiceImpl.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── spi/
│       │   │                   │   └── SpringCompatibleSet.java
│       │   │                   ├── spring/
│       │   │                   │   ├── MybatisPlusApplicationContextAware.java
│       │   │                   │   └── MybatisSqlSessionFactoryBean.java
│       │   │                   └── toolkit/
│       │   │                       └── SqlRunner.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── com.baomidou.mybatisplus.core.spi.CompatibleSet
│       │               └── com.baomidou.mybatisplus.extension.spi.CompatibleSet
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               └── test/
│           │                   └── service/
│           │                       └── ServiceTest.java
│           └── kotlin/
│               └── com/
│                   └── baomidou/
│                       └── mybatisplus/
│                           └── test/
│                               ├── instance.kt
│                               └── kotlin/
│                                   ├── BaseDbTest.kt
│                                   ├── ChainWrappersTest.kt
│                                   ├── DbTest.kt
│                                   ├── FixIssue1986.kt
│                                   ├── User.kt
│                                   ├── UserMapper.kt
│                                   └── WrapperTest.kt
├── settings.gradle
└── spring-boot-starter/
    ├── build.gradle
    ├── mybatis-plus-boot-starter/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   ├── java/
    │       │   │   └── com/
    │       │   │       └── baomidou/
    │       │   │           └── mybatisplus/
    │       │   │               └── autoconfigure/
    │       │   │                   └── MybatisPlusAutoConfiguration.java
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── additional-spring-configuration-metadata.json
    │       │           ├── spring/
    │       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               ├── autoconfigure/
    │           │               │   └── ApplicationTestStartSuccess.java
    │           │               └── test/
    │           │                   ├── MetadataTest.java
    │           │                   ├── MybatisPlusPropertiesTest.java
    │           │                   ├── entity/
    │           │                   │   └── Test.java
    │           │                   ├── mapper/
    │           │                   │   └── TestMapper.java
    │           │                   └── pom/
    │           │                       └── GeneratePomTest.java
    │           └── resources/
    │               ├── application.yml
    │               └── mapper/
    │                   ├── modulea/
    │                   │   └── testa.xml
    │                   └── moduleb/
    │                       └── testb.xml
    ├── mybatis-plus-boot-starter-test/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── spring/
    │       │           │   └── com.baomidou.mybatisplus.test.autoconfigure.AutoConfigureMybatisPlus.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               └── test/
    │           │                   └── autoconfigure/
    │           │                       ├── MybatisPlusSampleTest.java
    │           │                       ├── MybatisPlusTestApplication.java
    │           │                       ├── Sample.java
    │           │                       └── SampleMapper.java
    │           └── resources/
    │               ├── application.yml
    │               └── schema.sql
    ├── mybatis-plus-spring-boot-autoconfigure/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   └── java/
    │       │       └── com/
    │       │           └── baomidou/
    │       │               └── mybatisplus/
    │       │                   └── autoconfigure/
    │       │                       ├── ConfigurationCustomizer.java
    │       │                       ├── DdlApplicationRunner.java
    │       │                       ├── DdlAutoConfiguration.java
    │       │                       ├── IdentifierGeneratorAutoConfiguration.java
    │       │                       ├── MybatisDependsOnDatabaseInitializationDetector.java
    │       │                       ├── MybatisPlusInnerInterceptorAutoConfiguration.java
    │       │                       ├── MybatisPlusLanguageDriverAutoConfiguration.java
    │       │                       ├── MybatisPlusProperties.java
    │       │                       ├── MybatisPlusPropertiesCustomizer.java
    │       │                       ├── SafetyEncryptProcessor.java
    │       │                       ├── SpringBootVFS.java
    │       │                       ├── SqlSessionFactoryBeanCustomizer.java
    │       │                       └── package-info.java
    │       └── test/
    │           └── java/
    │               └── com/
    │                   └── baomidou/
    │                       └── mybatisplus/
    │                           └── test/
    │                               ├── MetadataTest.java
    │                               └── MybatisPlusPropertiesTest.java
    ├── mybatis-plus-spring-boot-test-autoconfigure/
    │   ├── build.gradle
    │   └── src/
    │       └── main/
    │           └── java/
    │               └── com/
    │                   └── baomidou/
    │                       └── mybatisplus/
    │                           └── test/
    │                               └── autoconfigure/
    │                                   ├── AutoConfigureMybatisPlus.java
    │                                   ├── MybatisPlusTest.java
    │                                   ├── MybatisPlusTestContextBootstrapper.java
    │                                   └── MybatisPlusTypeExcludeFilter.java
    ├── mybatis-plus-spring-boot3-starter/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   ├── java/
    │       │   │   └── com/
    │       │   │       └── baomidou/
    │       │   │           └── mybatisplus/
    │       │   │               └── autoconfigure/
    │       │   │                   └── MybatisPlusAutoConfiguration.java
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── additional-spring-configuration-metadata.json
    │       │           ├── spring/
    │       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               ├── autoconfigure/
    │           │               │   └── ApplicationTestStartSuccess.java
    │           │               └── test/
    │           │                   ├── MetadataTest.java
    │           │                   ├── MybatisPlusPropertiesTest.java
    │           │                   ├── entity/
    │           │                   │   └── Test.java
    │           │                   ├── mapper/
    │           │                   │   └── TestMapper.java
    │           │                   └── pom/
    │           │                       └── GeneratePomTest.java
    │           └── resources/
    │               ├── application.yml
    │               └── mapper/
    │                   ├── modulea/
    │                   │   └── testa.xml
    │                   └── moduleb/
    │                       └── testb.xml
    ├── mybatis-plus-spring-boot3-starter-test/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── spring/
    │       │           │   └── com.baomidou.mybatisplus.test.autoconfigure.AutoConfigureMybatisPlus.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               └── test/
    │           │                   └── autoconfigure/
    │           │                       ├── MybatisPlusSampleTest.java
    │           │                       ├── MybatisPlusTestApplication.java
    │           │                       ├── Sample.java
    │           │                       └── SampleMapper.java
    │           └── resources/
    │               ├── application.yml
    │               └── schema.sql
    ├── mybatis-plus-spring-boot4-starter/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   ├── java/
    │       │   │   └── com/
    │       │   │       └── baomidou/
    │       │   │           └── mybatisplus/
    │       │   │               └── autoconfigure/
    │       │   │                   └── MybatisPlusAutoConfiguration.java
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── additional-spring-configuration-metadata.json
    │       │           ├── spring/
    │       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               ├── autoconfigure/
    │           │               │   └── ApplicationTestStartSuccess.java
    │           │               └── test/
    │           │                   ├── MetadataTest.java
    │           │                   ├── MybatisPlusPropertiesTest.java
    │           │                   ├── entity/
    │           │                   │   └── Test.java
    │           │                   ├── mapper/
    │           │                   │   └── TestMapper.java
    │           │                   └── pom/
    │           │                       └── GeneratePomTest.java
    │           └── resources/
    │               ├── application.yml
    │               └── mapper/
    │                   ├── modulea/
    │                   │   └── testa.xml
    │                   └── moduleb/
    │                       └── testb.xml
    └── mybatis-plus-spring-boot4-starter-test/
        ├── build.gradle
        └── src/
            ├── main/
            │   └── resources/
            │       └── META-INF/
            │           ├── spring/
            │           │   └── com.baomidou.mybatisplus.test.autoconfigure.AutoConfigureMybatisPlus.imports
            │           └── spring.factories
            └── test/
                ├── java/
                │   └── com/
                │       └── baomidou/
                │           └── mybatisplus/
                │               └── test/
                │                   └── autoconfigure/
                │                       ├── MybatisPlusSampleTest.java
                │                       ├── MybatisPlusTestApplication.java
                │                       ├── Sample.java
                │                       └── SampleMapper.java
                └── resources/
                    ├── application.yml
                    └── schema.sql

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf


================================================
FILE: .gitee/ISSUE_TEMPLATE.zh-CN.md
================================================
### 当前使用版本(必填,否则不予处理)



### 该问题是如何引起的?(确定最新版也有问题再提!!!)



### 重现步骤(如果有就写完整)



### 报错信息




================================================
FILE: .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
================================================
### 该Pull Request关联的Issue



### 修改描述



### 测试用例



### 修复效果的截屏




================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: 错误报告
description: File a bug report.
title: "[错误报告]: 描述"
labels: [""]
body:
  - type: markdown
    attributes:
      value: |
        请确认以下信息:
        1. 请按此模板提交issues, 不按模板提交的问题将直接关闭
        2. 如果你使用的版本号不是最新版, 那么你的 issue 大概率将会被直接关闭
        3. 如果你的问题与该仓库无关或者可以直接在以往 issue 中找到, 那么你的 issue 大概率将会被直接关闭
        4. 提交问题务必描述清楚、附上日志, 描述不清导致无法理解和分析的问题 大概率会被直接关闭
  - type: checkboxes
    id: confirm
    attributes:
      label: 确认
      description: 在提交 issue 之前, 请确认你已经阅读并确认以下内容, 如果 不全部勾选 或 勾选与事实不符 那么你的 issue 大概率将会被直接关闭
      options:
        - label: 我使用的版本是[最新版](https://central.sonatype.com/search?q=g:com.baomidou%20%20a:mybatis-plus&smo=true), 并且使用插件确认过项目里无依赖版本冲突
          required: true
        - label: 我已经在 [issue](https://github.com/baomidou/mybatis-plus/issues) 中搜索过, 确认问题没有被提出过
          required: true
        - label: 我已经修改标题, 将标题中的 **描述** 替换为遇到的问题(不得删除 **描述** 前面的部分)
          required: true
  - type: input
    id: version
    attributes:
      label: 当前程序版本
      description: 遇到问题时程序所在的版本号
    validations:
      required: true
  - type: textarea
    id: what-happened
    attributes:
      label: 问题描述
      description: 请详细描述你碰到的问题
      placeholder: "问题描述"
    validations:
      required: true
  - type: textarea
    id: logs
    attributes:
      label: 详细堆栈日志
      description: 问题出现时,程序错误堆栈日志。
      render: bash


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: 官网
    url: https://baomidou.com/
    about: document.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: 功能改进
description: Feature Request
title: "[功能改进]: 描述"
labels: [""]
body:
  - type: markdown
    attributes:
      value: |
        请说明你希望添加的功能。
  - type: checkboxes
    id: confirm
    attributes:
      label: 确认
      description: 在提交 issue 之前,请确认你已经阅读并确认以下内容
      options:
        - label: 我的版本是最新版本, 我的版本号与 [version](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.baomidou%22%20AND%20a%3A%22mybatis-plus%22) 相同, 并且项目里无依赖冲突
          required: true
        - label: 我已经在 [issue](https://github.com/baomidou/mybatis-plus/issues) 中搜索过, 确认问题没有被提出过
          required: true
        - label: 我已经修改标题, 将标题中的 **描述** 替换为你的想法(不得删除 **描述** 前面的部分)
          required: true
  - type: textarea
    id: feature-request
    attributes:
      label: 功能改进
      description: 请详细描述需要改进或者添加的功能。
      placeholder: "功能改进"
    validations:
      required: true
  - type: textarea
    id: references
    attributes:
      label: 参考资料
      description: 可以列举一些参考资料,但是不要引用同类但商业化软件的任何内容。
      placeholder: "参考资料"


================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
  - package-ecosystem: "gradle" # See documentation for possible values
    directory: "/" # Location of package manifests
    schedule:
      interval: "daily"


================================================
FILE: .github/workflows/gradle.yml
================================================
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: Java CI with Gradle

on:
  push:
    branches: [ "3.0" ]
  pull_request:
    branches: [ "3.0" ]

jobs:
  build:

    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 21
      uses: actions/setup-java@v4
      with:
        java-version: '21'
        distribution: 'temurin'

    # Configure Gradle for optimal use in GiHub Actions, including caching of downloaded dependencies.
    # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
    - name: Setup Gradle
      uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0

    - name: Build with Gradle Wrapper
      run: ./gradlew build

    # NOTE: The Gradle Wrapper is the default and recommended way to run Gradle (https://docs.gradle.org/current/userguide/gradle_wrapper.html).
    # If your project does not have the Gradle Wrapper configured, you can use the following configuration to run Gradle with a specified version.
    #
    # - name: Setup Gradle
    #   uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
    #   with:
    #     gradle-version: '8.5'
    #
    # - name: Build with Gradle 8.5
    #   run: gradle build

  dependency-submission:

    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 21
      uses: actions/setup-java@v4
      with:
        java-version: '21'
        distribution: 'temurin'

    # Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies.
    # See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md
    - name: Generate and submit dependency graph
      uses: gradle/actions/dependency-submission@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0


================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish package to the Maven Central Repository
on:
  push:
    tags:
      - v*
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK 21
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'temurin'

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v3

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew

      - name: Build without tests
        run: ./gradlew build -x test

      - name: Decode
        run: |
          echo "${{secrets.SIGNING_SECRET_KEY_RING_FILE}}" > ~/.gradle/secring.gpg.b64
          base64 -d ~/.gradle/secring.gpg.b64 > ~/.gradle/secring.gpg

      - name: Publish
        run: ./gradlew publish -Psigning.keyId=${{secrets.SIGNING_KEY_ID}} -Psigning.password=${{secrets.SIGNING_PASSWORD}} -Psigning.secretKeyRingFile=$(echo ~/.gradle/secring.gpg)
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}


================================================
FILE: CHANGELOG.md
================================================
# CHANGELOG

## [v3.5.16] 2026.1.11
- fix: 修复`Jackson3TypeHandler`自定义`ObjectMapper`无效
- fix: 处理代码生成器`PackageConfig`指定模块为空时拼接错误
- feat: 升级`SpringBoot3`至3.5.9
- feat: 升级`JUnit`单元测试
- feat: 升级`fastjson`至2.0.60
- feat: 升级`jackson`至2.20.1
- feat: 升级`gson`至2.13.2
- feat: 升级`postgresql`至42.7.8
- feat: 升级`h2database`至2.4.240
- feat: 升级`mysql-connector-j`至9.5.0
- feat: 升级`sqlite-jdbc`至3.51.1.0
- feat: 升级`jaybird`至5.0.10.java8
- feat: 升级`mybatis-spring`4.0.0

## [v3.5.15] 2025.11.30
- fix: 修复`Enjoy`模板生成xml错误
- feat: 调整代码生成器元数据构建
- feat: 优化`CrudRepository`批量执行前判断非事务中关闭连接
- feat: 支持`SpringBoot`4.0.0
- feat: 支持`Jackson`3.0

## [v3.5.14] 2025.08.29
- feat: 增加`bom`对`mybatis-plus-spring-boot4-starter`与`mybatis-plus-spring-boot4-starter-test`管理

## [v3.5.13] 2025.08.29
- fix: 修复在`Spring`中使用`@PostConstruct`调用`Db`方法查询出现警告日志
- fix: 修复`Db`使用`count`返回`null`导致的空指针异常
- fix: 修复`BaseMapper`在非`Spring`项目中报错
- feat: 升级`Jsqlparser`5.2
- feat: `OrderItem`增加`withExpression`根据表达式排序(注意:不支持序列化方式使用,自行控制`sql`注入)
- feat: `OracleDdlGenerator`支持指定`schema`模式运行
- feat: 适配华为云`GaussDb`数据库
- feat: 雪花生成器初始化错误增加降级处理
- feat: 新增`spring-boot4`支持
- feat: 升级`gradle`8.13
- opt: `SqlUtils`中`replaceSqlPlaceholder`方法增加缓存处理
- opt:优化`DDL`执行记录表检查是否存在
- opt: 容器环境下`workerId`获取优化

## [v3.5.12] 2025.04.27
- fix: 修复批量操作异步执行首次可能的出现`NoSuchElementException`错误
- fix: 修复默认`SQL`解析线程池在`JVM`退出关闭导致的任务拒绝
- fix: 修复`entity.java.btl`生成`toString`方法样式错误
- fix: 修复`entity.java.ftl`模板类注释与导包缺少换行
- opt: 重构`SqlRunner`执行`SQL`语句 (动态传参,不再根据参数值生成执行`SQL`)
- opt: 增强`SqlRunner`执行(支持单参数使用`Map`({key}),`List`({index}),`JavaBean`({property})获取值)
- opt: 改进`MybatisUtils`对自`SqlSessionFactory`的提取(支持自定义`SqlSessionTemplate`子类)
- opt: 自动识别数据库支持`TDengine`数据库`websocket`连接
- opt: 支持`Db`工具类对多数据源的支持
- opt: 优化`MapperProxy`属性访问
- opt: `CompatibleSet`接口增加`getBean`与`getProxyTargetObject`方法
- opt: `CompatibleSet`与`CompatibleHelper`调整至`com.baomidou.mybatisplus.core.spi`包之中
- opt: 支持手动指定`CompatibleSet`实现
- opt: 代码生成器处理驱动返回索引信息`null`
- opt: 代码生成器处理`PRIMARY_KEY_`为开头的主键索引情况
- opt: 去除`entity.kt.btl`模板`@Override`注解
- opt: 解决`serviceImpl.java.ej`生成格式不统一
- opt: 去除`mapper.java.ftl`多余的换行生成
- opt: 去除`entity.kt.vm`,`entity.kt.ej`,`entity.kt.btl`导包结束分隔符
- opt: 去除`controller.java.ej`,`controller.java.vm`多余的换行
- opt: 去除`entity.kt.btl`生成属性多余的空格
- opt: 统一`entity.java.btl`,`entity.java.ej`,`entity.java.ftl`,`entity.java.vm` 生成的`toString`方法样式

## [v3.5.11] 2025.03.23
- fix: 修复代码生成器链式模型非`lombok`下生成了`@Accessors`注解
- fix: 修复主键使用`UUID`执行批量删除错
- fix: 修复`Kotlin`使用`select(predicate)`方法错误
- fix: 修复`AbstractCaffeineJsqlParseCache`异步产生的错误
- fix: 修复动态SQL解析包含SQL注释(--或#)导致的合并错误 (动态脚本语句不再处理换行,如果需要去除换行请自行处理)
- fix: 修复`DataChangeRecorderInnerInterceptor`数据比较出现强转异常
- fix: 修复`IllegalSQLInnerInterceptor`拦截插件获取`catalog`与`schema`错误
- fix: 修复动态表解析`create table if not exists` 获取表名错误
- fix: 修复动态表解析`create [type] index` 获取表名错误
- feat: 新增`DynamicTableNameJsqlParserInnerInterceptor` 基于`JsqlParser`动态表处理
- feat: 支持`DdlScript`自定义脚本运行器参数
- feat: 支持`DdlHelper`自定义脚本运行器参数
- feat: 支持`DdlApplicationRunner`参数配置(脚本错误处理,自定义`ScriptRunner`,多处理器执行异常是否中断)
- feat: 支持`BaseMultiTableInnerInterceptor`指定追加条件模式 (默认条件追加至末尾,仅作用于`select`,`delete`,`update`)
- feat: 支持生成器`Entity`指定`serialVersionUID`添加`@Serial`注解
- feat: 支持生成器`Entity`注解(字段,类注解)自定义处理
- feat: 支持生成器`Entity`导包自定义处理
- feat: 支持`崖山`数据库
- feat: 支持`Hive2`分页
- feat: 升级`Gradle`至8.10
- feat: 支持`DdlHelper`执行自定义异常处理
- opt: 调整`DynamicTableNameInnerInterceptor`表处理逻辑并保证`hook`运行
- opt: 调整`DdlScript`类方法实现(分离DDL版本记录,优化执行方法)
- opt: 调整`DbType#GAUSS`数据库名为`gauss`
- opt: 调整`JsqlParserGlobal`解析线程池指定
- opt: 移除过时的`FieldStrategy.IGNORED`
- opt: 移除过时的`GlobalConfig.DbConfig#selectStrategy`
- opt: 移除过时的`MybatisSqlSessionFactoryBean#typeEnumsPackage`
- opt: 优化`DdlHelper`资源加载(不再依赖`Spring`或者其他实现)
- opt: 去除`DdlHelper`中`getScriptRunner`方法指定的字符集编码
- doc: 修正`DdlHelper`中注释错误
由于`jsqlParser`5.0版本与5.1版本升级不兼容性不是很大,计划后期移除`mybatis-plus-jsqlparser-5.0`支持模块。
多版本支持相对来说比较麻烦,后期只维护`mybatis-plus-jsqlparser-4.9` 与 `mybatis-plus-jsqlparser`(保持最新版跟进,直到再提升jdk)

## [v3.5.10.1] 2025.01.13
- fix: 修复动态节点处理错误

## [v3.5.10] 2025.01.12
- fix: 修复字段有`TableField`注解但未指定`value`值下全局`columnFormat`未生效问题
- fix: 修复enjoy模板生成kotlin代码报错
- fix: 修复enjoy模板生成字符串代码报错
- fix: 修复springdoc生成注解未转义双引号
- fix: 修复数据变动插件更新无主键报错
- fix: 修复多表解析processJoins解析表出现越界
- feat: TableName注解新增`properties`属性
- feat: 支持@InterceptorIgnore注解在default方法上
- feat: 适配jsqlparser5.1版本(5.0兼容版本请使用`mybatis-plus-jsqlparser-5.0`)
- feat: 提供`InterceptorIgnoreHelper.execute`模板执行方法处理插件跳过策略(防止手动使用handle方法出现未清理线程资源造成的错误)
- feat: 代码生成器全局package配置属性支持自定义模板信息获取
- feat: 代码生成器新增表索引信息获取
- feat: 代码生成器提供`Mapper.Builder.generateMapperMethodHandler`处理器基于索引生成索引方法
- feat: 代码生成器Entity支持自定义Class注解和字段注解生成
- feat: 代码生成器Entity支持lombok模式指定生成类注解
- feat: 代码生成器Entity支持ToString`(Entity.Builder.toString(boolean))`方法控制生成 (默认生成,lombok模式下将会生成@ToString,低版本下lombok不生成,属于不兼容改动)
- feat: 代码生成器Entity支持字段文档注释(`Entity.Builder.fieldUseJavaDoc(boolean)`)控制生成 (默认生成,低版本下,使用swagger或springdoc不会生成字段文档注释,属于不兼容改动)
- feat: 重写动态语句生成(生成执行SQL将不再包含\n换行符)
- feat: 安全加密处理器密钥获取支持环境变量与系统属性传入
- feat: 升级mybatis至3.5.19
- feat: 升级springboot至3.4.1
- feat: 升级kotlin至2.1.0
- 实用性低,检查语法不完善,计划移除IllegalSQLInnerInterceptor插件
- 功能缺陷较多,计划移除DataChangeRecorderInnerInterceptor插件

## [v3.5.9] 2024.10.23
- opt: 优化代码生成器支持可视化配置生成能力
- opt: 解耦扩展包不再强制依赖 spring 开发框架
- opt: 拆分jsqlparser支持模块,提供mybatis-plus-jsqlparser(支持最新jsqlparser)与mybatis-plus-jsqlparser-4.9模块, 默认不携带,升级后需要自行引入.
- feat: 重构 service 模块抽象为 CrudRepository 不再建议使用 IService 避免业务层数据混乱
- feat: 新增 solon 启动插件支持
- feat: 升级SpringBoot3.3.4
- feat: 升级velocity2.4

## [v3.5.8] 2024.09.18
- fix: 解决optimizeJoinOfCountSql反序列化不支持问题
- fix: 解决Db工具类批量操作使用rewriteBatchedStatements=true返回值不准确
- fix: 修复逻辑删除填充与乐观锁冲突
- fix: 修复IllegalSQLInnerInterceptor分析嵌套count语句错误
- fix: 升级jsqlParser5.0 解决 for update 语句错误
- fix: 修复处自增自减负数情况导致jsqlParser解析优化错误
- fix: 修复removeMapper缓存清理不完全
- fix: 修复SqlServerQuery查询表注释乱码
- opt: 完善函数注入校验逻辑
- opt: Page属性访问调整为private,重写toString方法
- opt: 主键生成策略(uuid)不支持的类型打印警告日志
- opt: MybatisPlusException转化为PersistenceException子类
- feat: 增加deleteByIds空集合处理
- feat: 重命名selectBatchIds方法为selectByIds
- feat: 支持tableName与schema属性占位符配
- feat: 代码生成器增加对虚拟列的属性获取
- feat: chain wrapper to lambda chain wrapper #6314
- feat: 代码生成器增加手动指定数据库驱动兼容不能自动注册的驱动实现
- feat: 升级kotlin2.0.0
- feat: 升级SpringBoot3.3.2
- feat: 升级fastjson2.0.52
- feat: 升级mybatis-spring3.0.4
- feat: 升级spring-cloud-commons4.1.4
- feat: 部分支持依赖升级更新
- feat: 支持GoldenDB数据库
- feat: 支持Duckdb数据库
- feat: 支持Derby数据库
- feat: 支持Vastbase数据库

## [v3.5.7] 2024.06.10
- fix: 修复动态表名处理 update ignore 错误
- fix: 修复SQLServer2005分页处理空格错误
- fix: 修复多租户查询出现问题
- fix: 修正非通用泛型情况下序列化json减少强转
- fix: 修复代码生成器禁用模板失效
- fix: 修复分页count优化distinct搭配orderBy处理错误
- fix: 修复达梦数据库生成代码错误
- fix: 修复租户插件特殊exists语句会失效
- fix: 修复sqlite数据库ddl_history错误导致无法创建表
- fix: 修复DataChangeRecorderInnerInterceptor在Insert时配置忽略无效
- fix: 修复代码生成器处理不标准的JdbcType导致空指针错误
- feat: BaseMapper新增批量操作与InsertOrUpdate方法
- feat: BaseMapper新增批量操作方法返回值List<BatchResult>
- feat: BaseMapper方法逻辑删除默认支持填充
- feat: 调整Service层逻辑删除填充逻辑处理
- feat: 重构批量删除参数填充处理逻辑.
- feat: 自增自减处理BigDecimal
- feat: 新增雪花ID配置(支持手动分配workerId与datacenterId或指定网卡信息自动获取方式)
- feat: 重构ServiceImpl泛型参数提取
- feat: 修改AES密钥随机性生成
- feat: UpdateWrapper增加checkSqlInjection方法
- feat: 调整DDL脚本自动装配逻辑(当无实现时或无mybatis-plus-extension模块时不注入DDL运行bean)
- feat: 注入方法deleteBatchIds重命名deleteByIds
- feat: SpringBoot升级至2.7.18和3.2.6
- feat: 升级kotlin至1.9.24
- feat: 升级lombok至1.18.32

## [v3.5.6] 2024.04.08
- fix: 修复通用Service多层代理引发的错误
- fix: 修复Json类型处理器反序列化泛型丢失原始类型
- fix: 修复填充器处理器基本类型数组出现强制错误
- fix: 修复上版本移除掉Page方法保留至PageDto类之中
- fix: 修复IllegalSQLInnerInterceptor未处理Parenthesis
- fix: 修复IllegalSQLInnerInterceptor表名或字段名包裹导致无法获取索引信息和索引字段校验问题
- fix: 修复KtUpdateChainWrapper调用setSql的时候params没有展开
- fix: 修复useGeneratedShortKey配置失效
- fix: 修复DataChangeRecorderInnerInterceptor一系列问题
- feat: 去除sqlFirst与sqlComment转义(如有需要转义操作,请手动调用转义后传入)
- feat: ServiceImpl修改为抽象类,防止错误直接实例化
- feat: 重构代码生成器TemplateConfig配置,模板禁用与路径配置更改至对应具体实现之上
- feat: 支持组合注解
- feat: 新增 LambdaUpdateWrapper 字段自增 setIncrBy 自减 setDecrBy 方法
- feat: 获取注入方法时传递org.apache.ibatis.session.Configuration
- feat: 新增自增主键兼容配置开关(mybatis-plus.global-config.db-config.insert-ignore-auto-increment-column 默认false,开启INSERT语句无视主键字段生成)
- feat: 新增参数填充器跳过方式(基于MappedStatement#id)
- feat: 新增SQLite的DDL自动维护功
- feat: 新增eqSql方法
- feat: 新增SQL解析线程池
- feat: 增加雪花ID生成器初始化日志打印(默认超过5秒打印警告日志)
- feat: 升级mybatis至3.5.16
- feat: 升级spring-cloud-commons
- feat: 升级jsqlparser至4.9
- test: Github增加CI
- doc: 增加update(Wrapper)相关api无法自动填充注释

## [v3.5.5] 2023.12.24
- fix: 修复配置databaseId失效
- fix: 修复自增主键忽略注入错误忽略非自增主键注入问题
- fix: 修复ChainWrapper模式下GroupBy生成多的逗
- fix: 修复selectOne缓存问题
- fix: 修复数据权限多表支持在某些场景下失效问题
- fix: 修复生成器mysql类型转换器point转换错误
- fix: 修复kotlin下无法使用父类属性操作
- fix: 修复自动注入DdlApplicationRunner返回null导致的高版本springboot启动错误
- fix: 修复生成器代码提示的RuntimeUtils安全性漏洞问题
- feat: 新增fastjson2支持
- feat: 升级gradle-wrapper至8.4
- feat: 升级kotlin-gradle-plugin至1.9.21
- feat: 升级mybatis至3.5.15
- feat: 升级lombok至1.18.30
- feat: 升级spring-boot3至3.2.0
- feat: 升级spring-boot2版本mybatis-spring至2.1.2
- feat: 升级spring-boot3版本mybatis-spring至3.0.3
- feat: 移除通用service中saveOrUpdate的事务
- feat: 支持Trino,Presto,GBase8s-pg,SUNDB数据库

## [v3.5.4.1] 2023.11.4
- fix: 修复Aop增强Mapper层导致的转换错误.

## [v3.5.4] 2023.10.22

- fix: 修复Insert无字段时执行SQL报错.
- fix: 修复高版本JDK下lambda无法执行IDEA调试.
- fix: 修复LambdaQuery中select,groupBy,orderBy,orderByAsc,orderByDesc提示的警告,新增对应doXxx方法支持重写(不兼容改动,api方法做了final处理).
- fix: 修复inject-sql-session-on-mapper-scan无配置提示.
- fix: 修复@OrderBy搭配@TableId排序字段错误(不兼容改动,com.baomidou.mybatisplus.core.metadata.TableInfo.orderByFields调整了类型).
- fix: 修复Service中根据主键逻辑删除时类型不匹配导致的错误.
- fix: 修复分页插件Count与自定义ResultHandler冲突.
- fix: 修复字段填充处理器可能会出现重入问题
- feat: 新增自增主键字段是否允许插入控制,可使用方法注入覆盖Insert(boolean ignoreAutoIncrementColumn)或Insert(String name, boolean ignoreAutoIncrementColumn)控制自增主键是否支持写入行为.
- feat: ActiveRecord模式下deleteById(逻辑删除)方法支持自动填充功能.
- feat: 内置泛型提取,支持非Spring体系项目使用.
- feat: BaseMapper新增update(wrapper)更新方法.
- feat: BaseMapper新增流式查询方法对大数据查询支持.
- feat: 代码生成器元数据信息公开tableName与columnName字段访问.
- feat: 新增mybatis-plus-spring-boot3-starter与mybatis-plus-spring-boot3-starter-test支持SpringBoot3.
- feat: 支持插件缺省注入,当无MybatisPlusInterceptor注入时,支持com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor自动注入.
- feat: 升级源码Jdk开发版本至Java21.
- feat: 升级gradle-wrapper至8.4-rc-1.
- feat: 升级kotlin-gradle-plugin至1.9.20-Beta.
- feat: 升级SpringBoot2.x版本至2.7.15.
- feat: 升级lombok至1.18.30.
- opt: mybatis-plus-extension中mybatis-spring依赖修改为可选依赖(不兼容改动,如果项目在非spring或非springBoot下使用到了请手动添加依赖).
- opt: spring-boot-starter减少无用的配置提示(不兼容改动,调整了com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties.configuration类型).
- opt: 字段填充处理器提取去除固定参数提取,支持更宽松的mapper方法参数提取填充处理,
- opt: 去除com.baomidou.mybatisplus.core.toolkit.ReflectionKit.setAccessible方法调用,防止高版本Jdk移除
- opt: 调整selectOne方法(配合流式处理,最多提取两行数据,日志不再打印总记录数).
- opt: 优化selectObjs方法返回值,减少类型强制转换.
- opt: 通用Service支持多SqlSessionFactory注入.
- opt: 优化TableInfo.newInstance创建实例方法.
- opt: 去除多余的@SuppressWarnings("serial")


## [v3.5.3.2] 2023.08.08

- feat: 升级mybatis至3.5.13,mybatis-spring至2.1.1
- feat: jsqlparser提供统一解析类,可配置解析函数,并加入缓存选项
- feat: 增加Sequence初始化debug日志
- feat: 参数填充器支持多参数填充
- feat: BaseMapper新增selectMaps(page, wrapper)与selectList(page, wrapper)方法
- feat: 乐观锁字段支持 java.time.Instant
- feat: `wrapper#apply`支持配置`mapping`比如`column={0,javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler}`
- feat: 调整 QueryWrapper 需要主动开启检查 SQL 注入过滤(移除掉wrapper的orderby的sql过滤功能)
- feat: 新增星瑞格数据库支持
- feat: `updateWrapper#setSql`方法支持`动态入参`参考`wrapper#apply`方法
- feat: 自动 SQL 维护 DDL 支持 SQL 执行存储过程
- perf: `ktWrapper`加强泛型限制
- fix: 修复在选择springdoc文档注释时entity描述异常
- fix: 在主键的`IdType`为`AUTO`的情况下,`Table#getAllInsertSqlColumnMaybeIf("xx.")`所生成sql错误问题
- fix: 租户插件支持`update set subSelect`的情况
- fix: 修复高版本Jdk提示非法反射警告(Illegal reflective access by com.baomidou.mybatisplus.core.toolkit.SetAccessibleAction)
- fix: 修复高版本Jdk插件动态代理反射错误 (Unable to make field protected java.lang.reflect.InvocationHandler java.lang.reflect.Proxy.h accessible)
- fix: 修复路径替换将原有的“.”替换成了文件分隔符“/”
- fix: 修复Beetl模板引擎无法生成注释
- fix: 修复Types.DOUBLE类型无法映射
- fix: 修复转换父类公共字段报错
- fix: 修复生成器无法通过cfg.取值
- fix: 修复单元测试下MockBean时事务回滚失败
- fix: 修复Warpper类nonEmptyOfWhere方法命名不规范,导致Ognl未正确缓存带来的执行开销
- fix: ClickHouseQuery类的tableComment()方法返回表注释字段为comment
- fix: 修复在选择springdoc文档注释时entity描述异常问题
- fix: Table\#getAllInsertSqlColumnMaybeIf("xx.")下的sql生成错误问题
- fix: Db类增加根据实体不为空的字段条件查询方法重载
- fix: 生成器对于Kotlin的Entity文件的superEntityClass的错误
- fix: 修复springdoc freemarker模式下 表注释取值取不到
- opt: 增强参数填充处理器,防止因参数名称与填充名称一致类型不匹配导致转换错误
- opt: 优化方法注入,去除SelectPage,SelectMapsPage,SelectByMap,DeleteByMap注入
- opt: 减少MappedStatement堆内存占用
- opt: 解决PluginUtils重复获取元数据带来的性能消耗
- opt: 注入方法去除多余的换行符
- opt: 去除SqlRunner持有的sqlSessionFactory变量
- opt: 解决Sequence初始化多次问题(自定义情况下可不创建默认主键生成器)
- opt: 优化 SqlHelper#getMapper 返回泛型
- opt: 去除SqlRunner持有的sqlSessionFactory变量
- docs: 修正DdlHelper注释错误


## [v3.5.3.1] 2022.12.29

- bug:生成模块pg和dm语句模式名增加
- feat: 优化 ChainWrapper#getEntityClass
- fix: 修复在 IService.lambdaQuery().one() 使用场景在数据库无数据时报错问题
- est 以及租户插件解析sql遇到多表必须给表起别名


## [v3.5.3] 2022.12.28

- 多租户插件:多表join表名必需起别名,否则追加的过滤条件不带前缀
- InterceptorIgnore 不能过滤 selectKey 的问题
- 分页新增`informix数据库`支持
- 分页新增`优炫数据库`支持
- 分页新增`TDengine数据库`支持
- 分页新增`亚马逊redshift数据库`支持
- 支持spring-boot 2.7以上版本
- 雪花id新增反解时间戳方法`Sequence#parseIdTimestamp`
- BaseMapper.selectCount生成语句加入中`AS total`
- 修复IllegalSQLInnerInterceptor类ClassCastException异常,并优化日志
- 移除注解`OrderBy`的过时属性`isDesc`
- 移除`TableInfo`过时方法
- 加入`JoinTableInfoInitHandler`类参与`TableInfo`初始化
- 修复StringUtils.sqlInjectionReplaceBlank方法过滤sql不全,可能会导致sql注入的情况
- 增加IService.lambdaQuery(entity)支持,写法更便捷
- 新增数据变更记录(数据审计)插件`DataChangeRecorderInnerInterceptor`
- 新增查询条件方法 notLikeLeft 和 notLikeRight
- 数据权限多表解析部分处理优化
- 允许子类重写 orderBy 基础方法 gitee issues/I61F51
- 新增Db类,调整 SimpleQuery 类
- 新增脚本自动维护功能
- 新增支持手动拦截器忽略策略,例如 `InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());`
- 支持 PG 数据字段大写 ID 自增 fixed issues/I4T0YJ
- 代码生成器重构完成,合并回 MP 核心代码库
- 代码生成器增加是否生成service接口的开关


## [v3.5.2] 2022.06.01

- 升级 mybatis 3.5.10
- 升级 jsqlparser 4.4
- 添加 vertical 数据库分页支持
- 添加对Gbase 8s 数据库支持
- 添加对 行云 数据库分页的支持
- 添加对 Firebird 数据库分页的支持
- 修复参数填充判断错误,标记替换字段常量
- DbType 清理以及 IDialect 实现类的清理
- 新增SqlHelper.execute,通过entityClass获取BaseMapper
- 枚举处理优化,不再需要'typeEnumsPackage'这个配置
- fix 租户id获取的执行顺序
- 新增Firebird数据库的KeyGenerator
- 新增达梦Dm数据库的KeyGenerator
- Merge pull request #4343 from LK820/fix-IdType.java
- Merge pull request #4495 from nieqiurong/fix-parameter
- Merge pull request #4314 from tomalloc/3.0


## [v3.5.1] 2022.01.25

- 新增 impala 数据库支~~持
- 缓存动态获取数据库类型~~
- 新增可控分配 id 方法 fixed github pull/4231
- 延迟枚举扫描注册
- 乐观锁插件支持根据wrapper填充 github pull/3664
- H2KeyGenerator 语法修改
- SimpleQuery 优化及Bug修改
- fixed gitee issues/I4P9EN
- SybaseDialect 关键词替换优化


## [v3.5.0] 2022.01.01

- 升级 mybatis 3.5.9
- 升级 jsqlparser 4.3
- 新增移除 Mapper 相关缓存,支持 GroovyClassLoader 动态注入 Mapper
- 添加动态表名的钩子函数 https://github.com/baomidou/mybatis-plus/pull/3965
- 注入类 DefaultSqlInjector 优化调整
- 反射类 ReflectionKit 优化 field -> field 改为 Function.identity()
- baseMapper 新增方法 exist 方法
- 解决 sysbase 小写 from 导致 index 取不到正确的索引值问题
- 新增通过 entityClass 获取 Mapper 方法 `BaseMapper<Entity> mapper = SqlHelper.getMapper(Entity.class);`
- 注入方法 byId 注入优化
- 多租户 right join bug https://gitee.com/baomidou/mybatis-plus/issues/I4FP6E  https://github.com/baomidou/mybatis-plus/pull/4035
- 自定义注入方法名优化 https://github.com/baomidou/mybatis-plus/pull/4159
- 新增 sap hana 内存数据库
- 新增 SimpleQuery 工具栏查询
- SQL 注入验证工具类 代码修改写法
- 整理字符串常量的使用
- upgrade license-gradle-plugin version
- 自定义注入方法名优化 (不兼容)
- 重载columnsToString方法允许子类调整
- 修复 et 判断逻辑 fixed gitee issues/I4L4XV
- 逻辑删除 byId 支持转换为实体删除填充



## [v3.4.3.4] 2021.09.22

- order by wrapper 存在条件不排序问题处理
- 解决引入 cloud InetUtils 类编译错误
- 升级 sql 解析依赖 jsqlparser 版本 4.2
- fix: 修复 JDK16 中增加模块化校验后,导致 lambda 序列化失败问题
- fix: java 17 的支持 #I4A7I5
- bug: fix left join 条件构造会多一个的问题
- fix: 当逻辑删除字段默认值为null时,阻止全表更新插件失效
- 分页 count(*) as total
- 允许注入自定义事务工厂 TransactionFactory


## [v3.4.3.3] 2021.09.05

- 移除不在实用类 ISqlParserFilter AbstractJsqlParser 需要使用从旧版本复制
- 移除全局配置workerId,datacenterId参数,推荐直接初始化identifierGenerator
- count 方法 Integer 修改为 Long 涉及升级成本【注意】,对于涉及缺陷调整给您造成困扰表示抱歉
- 修复主键 @0rderby 注解 bug
- 修复 String 主键删除失败
- 主键类型增加 BigDecimal BigInteger 支持
- 隔离 spring 框架强依赖,非 spring 框架用 mp 注入 GenericTypeUtils.setGenericTypeResolver


## [v3.4.3.2] 2021.08.21

- 增加 goldilocks 数据库 csiidb 数据库 的支持
- 增加对南大通用GBase 8s数据库的支持(GBASEDBT),区别于原有定义(GBASE)
- 优化 selectOne 查询方式,精简 SQL 注入
- PropertyMapper.whenNotBlack to whenNotBlank
- BaseMapper新增deleteById(T entity)方法
- jsqlparser 版本 4.0 升级 4.1
- TableInfo新增原生Reflector反射操作.
- 解决 lambda 构造器在 JDK16 中无法运行的问题
- wrapper clear 将sqlSegment重置为空串 缓存标志重置为true
- 注入器调整无主键不注入ById方法
- 自动构建 resultMap 处理主键获取真正的字段名
- Wrapper optimized: 优化警告
- Wrapper 新增 gtSql geSql ltSql leSql 方法
- 新增对CUBRID数据库的支持
- fix github pull/3557 乐观锁新增版本号 null 自定义异常,租户插入忽略逻辑允许自定义
- fix github issues/2931 解决结果集大于 Integer 异常问题
- fix github issues/3652 k8s 网络获取失败问题
- fix gitee issues/I3Z2RG 优化 Order By SQL 注入识别率
- fix gitee issues/3826 优化动态表名处理器
- fix gitee issues/I3UQH5 修复注解@OrderBy,使用limit 异常
- fix github issues/3768 mysql 批量自增 bug
- 修复自动构建resultMap时主键字段映射错误&OrderBySegmentList懒加载执行
- 源代码升级相关测试依赖,构建环境 gradle 升级为 7.1 新增更多测试用例


## [v3.4.3.1] 2021.06.15

- 支持多重继承获取泛型
- 应要求 pageDto 修改为 PageDTO
- 分页排序优化
- TableField 新增 ResultMapping#property 注解支持
- fixed github pull/3550 优化排序
- fix #I3T0LA
- 开放KtUpdateChainWrapper、KtQueryChainWrapper的继承
- 新增 exists 方法判断 count 存在
- 优化数据方言获取方式减少对象创建
- feat GlobalConfig增加whereStrategy属性和适配selectStrategy的getWhereStrategy()方法
- 扩展 p6spy 优化
- fix github#3390 SqlRunner.selectPage()方法未释放连接克隆
- 优化 JDK 默认不推荐泛型数组
- perf: 替换为 JVM 中本身的方法
- 当用户指定ID时,不用自动生成,不指定时自增
- Github Merge pull request #3549 #3555 #3565 #3571 #3587 #3591 #3592 #3595 #3599 #3605 #3606
- 提供处理Map多key取值工具方法
- 调整 page 注解泛型 E 为 P 方便阅读
- Pattern定义为静态常量,优化正则匹配速度
- Fix 主键添加@OrderBy无效
- 去除addMappedStatement日志打印
- NoKeyGenerator Jdbc3KeyGenerator shared instance

## [v3.4.3] 2021.05.21

- 增加瀚高数据库支持
- 增加注解 Order By 支持默认排序
- Wrapper exists notExists orderBy groupBy 支持参数绑定
- Wrapper 支持 setParamAlias 其它优化
- 优化 KeyGenerator 支持多实现多数据源注入
- 增强 ServiceImpl 泛型推断,解决多继承与代理问题
- 新增 PageDto 用于微服务对象传输序列化
- 新增 Page 提供静态 of 构造方式
- 增加代理 MethodHandleProxies 对 lambda 调试支持
- 调整 ActiveRecord 日志对象初始化
- 调整 ActiveRecord 模式 Model 类开发 pkVal 方法外部可用
- 删除标记过时代码
- 优化枚举值获取方式
- 分页 count 安全处理
- Sequence 方法支持重写支持
- 升级 Mybatis 3.5.7
- 修复自动配置 lazy-initialization 无属性提示
- 修复 mysql on duplicate key update 字段名判断为表名问题
- 修复 lambda 条件 npe 异常
- 重构 lambda 信息提取方法
- 获取 lambda 信息不在序列化
- 合并 gitee pulls/ 141
- fixed github issues/3208 3016
- fixed github issues/3482 数据权限处理器支持 union all
- 调整事务未启用打印提示信息
- 单元测试优化相关依赖升级

## [v3.4.2] 2021.01.15

- fix: 移除 BlockAttackInnerInterceptor 内引用的 commons 的 utils
- feat: PaginationInnerInterceptor 添加 optimizeJoin 属性控制是否在count时对sql的join进行优化
- feat: 可通过Resources.setDefaultClassLoader设置默认类加载器.
- feat: InterceptorIgnore 注解新增 others 属性
- feat: IService 增加 kotlin 链式调用支持(ktQuery() 和 ktUpdate())
- style: jsqlparser up to 4.0
- style: 移除 com.baomidou.mybatisplus.extension.injector.methods.additional 包下的过时类
- style: generator 模块另开仓库 [generator](https://github.com/baomidou/generator)

## [v3.4.1] 2020.11.10

- fix: 新多租户插件完善子查询,支持 比较符号,in,EXISTS,NOT EXISTS
- feat: 公开 AbstractWrapper.getEntityClass
- feat: 新增 FakeTenantLineInnerInterceptor 对 TenantSqlParser 进行过度
- feat: 分页count识别 `left join (subSelect)` 优化
- feat: 所有 count 从 count(1) 变更为 count(*)
- style: mybatis up to 3.5.6

## [v3.4.0] 2020.8.23
- fix: @TableName.autoResultMap=true 情况下, 内置的 selectBody 将不会进行 as ,使用了的需要注意!!!
- feat: 新增 mybatis-plus-boot-starter-test 模块
- fix: MetaObjectHandler 重载错误(解决办法是参数位置对调),填充值在泛型上支持字段类型的子类
- feat: mybatis up to 3.5.5, mybatis-spring up to 2.0.5
- feat: jsqlparser up to 3.2
- feat: 新增 MybatisParameterHandler, 废弃 MybatisDefaultParameterHandler
- feat: 分页插件加入 GBase,ClickHouse,oscar,OceanBase 数据库连接自动识别的支持
- feat: Wrapper 新增api not(boolean condition, Consumer consumer)
- feat: 新增 MybatisPlusInterceptor 解决 多租户和分页 插件一级和二级缓存不正确问题
- feat: 新分页插件优化 size<0 时继续拼接 orderBy
- feat: 新增 IdentifierGenerator 一个实现类 ImadcnIdentifierGenerator
- fix: chainWrapper#func 强转异常
- fix(mybatis-plus-generator.main): 重构生成器数据库类型转换器,修复部分支条,提交选择器测试
- fix: 修复复杂情况中动态表名替换产生的问题:正则由空白检测转为单词边界检测
- refactor: 重构动态表名解析器,去除正则替换程序,改为按表名位置进行替换
- refactor: 将表名解析重构为访问者模式,现在不会对原有 SQL 做改动


## [v3.3.2] 2020.5.26
- 分页参数提取,单元测试用例修复
- 达梦数据库代码生成器表过滤支持
- 微软数据库代码生成器表过滤支持
- 修复代码生成器属性字段规则错误
- SelectById 支持自定义方法名
- 修复分页插件获取数据库类型问题
- Json转换器空值处理
- bugfix(mybatis-plus-generator):SQL类型返回错误问题
- 调整未知方言异常,自动识别url转换小写匹配.
- fix: 初始化 TableInfo 中遇到多个字段有 @TableId 注解时未能抛出异常的问题
- SuperController有Class参数的set方法
- 增加方法StrategyConfig.setSuperServiceImplClass(java.lang.Class<?>).
- 代码生成器命名策略调整.
- 扩展分页缓存key值计算.
- 去除方法推测,直接访问属性字段.
- 修正枚举处理器类型不匹配比较.
- 修改表前缀匹配方式
- 修改在Mybatis全局配置文件中设置分页插件参数不生效问题
- 修复PR未指定解析器的时候引发空指针
- 增加分页插件limit参数配置
- 修复指定superEntityClass重复生成父类字段问题
- 无主键的情况无需导入IdType与TableId包
- 调整生成BaseResultMap格式
- 支持lombok模式下选择是否进行链式set生成
- 修复解析器for update错误
- 过滤PG约束列(只留下主键约束)
- 增加生成器禁用模板生成
- fix(kotlin): 修复动态表名 BUG,最大努力替换表名
- 修复PG约束生成重复属性字段问题
- fix(kotlin): 将 LambdaUtils 中缓存的 key 改为 String
- 代码生成器增加数据库关键字处理接口
- fix github/issues/2454 支持注解可继承
- 新增 AES 加密数据库用户名密码
- 优化方法入参泛型,支持更多类型
- 修复代码生成器开启移除is前缀生成实体缺少包导入
- fixed github issues/2470


## [v3.3.1] 2020.1.17
- 新增`TableName`注解属性`excludeProperty`支持排除字段
- 新增ServiceImpl#entityClass属性,减少泛型提取
- 新增phoenix支持
- 新增支持hbase的选装件`Upsert`
- 新增生成器策略配置enableSqlFilter属性来控制是否启用SQL过滤表支持
- 新增批量执行方法,方便用户自定义批量执行操作
- `Wrapper`支持`clear`清空
- `Wrapper`子类新增`func`方法,主要为了支持在`if else`情况下使用`Wrapper`的不同method不会导致断链(链式调用不能一链到底)
- `BaseMapper`部分入参为`Wrapper`的select方法支持`wrapper.first`来设置RDS的hint
- `KtUpdateWrapper#set`支持value为null
- 支持泛型主键支持
- 优化分页拦截器数据类型与方言实现类配置
- 二级缓存复用count查询缓存
- `IService`部分method调整为default方法
- 二级缓存兼容json序列化情况(主要出现默认缓存count出现long反序列化回来为int的情况)
- 处理批量操作嵌套事物问题(二级缓存更新问题)
- 修复启用乐观锁下updateById时自动填充不生效的问题
- 修复自动填充接口的default方法(`setFieldValByName`和`getFieldValByName`)某些情况下会发生异常的问题
- 修复`KtWrapper`嵌套函数问题
- 修复Freemarker生成Kotlin类的常量错误
- 修复StringUtils#guessGetterName错误
- 修复SerializationUtils资源未释放问题

## [v3.3.0] 2019.12.06
- BaseMapper 接口两个 page 方法优化
- IService 以及 ServiceImpl 对应 page 方法优化,个别返回 collection 的方法修改为返回 list
- 逻辑删除字段的两个表示已删除和未删除的定义支持字符串 `"null"`
- 修复批量操作未清空缓存
- 批量操作异常转换为DataAccessException
- mybatis up 3.5.3, mybatis-spring up 2.0.3, jsqlparser up 3.1
- mapper 选装件包调整, chainWrapper 包调整
- 新增 ChainWrappers 工具类
- 新增 IdentifierGenerator 接口,支持自定义Id生成
- 代码生成工具废弃正则表名匹配,新增likeTable与notLikeTable
- 分页插件支持自定义处理页数限制与溢出总页数处理
- 修复SqlExplainInterceptor导致的Oracle序列自增两次
- 分页二级缓存支持
- 扩展p6spy日志打印
- DbConfig加入新属性propertyFormat,TableFieldInfo移除属性related
- 优化序列生成器,过时KeySequence的clazz属性
- 修复Ognl表达式关键字导致的null值判断失效
- 修复更新填充开关失效
- 优化填充逻辑
- ISqlRunner支持selectPage
- 支持全局逻辑删除字段
- BaseMapper的方法可自定义
- 添加【虚谷】【Oracle12c】【Kingbase】数据库支持
- 解决数据库字段与实体字段名称不同时出现`null as xxx`的情况
- 过时ID_WORKER_STR,自动识别主键类型
- 配置开启注解,TableName也强制生成

## [v3.2.0] 2019.08.26
- 代码生成器添加达梦数据库支持
- 修复多主键查询表字段SQL的Bug
- 新增 updateWrapper 尝试更新,否继续执行saveOrUpdate(T)方法
- 代码生成器 pg 增加 numeric instant 类型支持
- 修复InjectionConfig不存在时无法生成代码的问题
- fix: #1386(github) 逻辑删除字段为Date类型并且非删除数据日期为null
- 升级依赖 mybatis 版本为 3.5.2
- 升级依赖 jsqlparser 版本为 2.1
- 应 EasyScheduler 计划提交 Apache 孵化请求移除 996NPL 协议限制
- 调整 SQL 移除 SET 部分 Github/1460
- 移除 SqlMethod 枚举 UPDATE_ALL_COLUMN_BY_ID 属性,推荐使用 AlwaysUpdateSomeColumnById 套
- fix: #1412(github) github:mybatis-plus-generator can't support oracle
- fix: github 1380
- 移除全局配置的 dbType 和 columnLike
- 移除 fieldStrategy, 使用上个版本新增的三个替代
- 移除 PerformanceInterceptor 相关, 建议使用 p6spy
- 移除 el 拆分为 jdbcType typeHandler 等具体属性
- 升级 gradle-5.5.1,lombok-1.18.4
- 当selectStatement.getSelectBody()的类型为SetOperationList
- 移除 GlobalConfig#sqlParserCache 属性,移除 LogicSqlInjector, OrderItem 新增2个快捷生成的method, page 新增一个入参是 List<OrderItem> 的 addOrder method
- Nested 接口个别入参是 `Function<Param, Param> func` 的method,入参更改为 `Consumer<Param> consumer`,不影响规范的使用
- fixed gitee/I10XWC 允许根据 TableField 信息判断自定义类型
- Merge pull request #1445 from kana112233/3.0
- 支持过滤父类属性功能
- 添加批量异常捕获测试
- 多租户ID 值表达式,支持多个 ID 条件查询
- 扩展新增 json 类型处理器 jackson fastjson 两种实现


## [v3.1.2] 2019.06.26
- EnumTypeHandler 更名为 MybatisEnumTypeHandler,移除 EnumAnnotationTypeHandler
- 新增自动构建 resultMap 功能,去除转义符
- 注解增加变量控制是否自动生成resultmap
- 修改分页缓存Key值错误
- TableField.el 属性标记过时
- 取消 MybatisMapWrapperFactory 的自动注册
- starter 增加默认xml路径扫描
- 新增 MybatisPlusPropertiesCustomizer 及配置使用
- ConfigurationCustomizer 内部方法入参更新为 MybatisConfiguration
- 原有 fieldStrategy 标记过时,新增 3 种 fieldStrategy 进行区分
- 获取注入方法时传递当前mapperClass
- 增加sqlite代码自动生成测试代码及测试用的数据库文件
- JsqlParserCountOptimize 对 left join 的 sql 优化 count 更精确
- fix(AbstractWrapper.java): 修复 lambda 表达式在 order、groupBy 只有条件一个时引起的类型推断错误
- apply plugin: 'kotlin'
- refactor(order): 修复排序字段优先级问题(#IX1QO)
- 启动就缓存 lambdacache
- Merge pull request #1213 from sandynz/feature/sqlComment 支持SQL注释
- 去除 wrapper 的一些变量,wrapper 内部 string 传递优化
- fix: #1160(github) 分页组件orderBy: 同时存在group by 和order by,且IPage 参数中存在排序属性时,拼接
- Merge pull request #1253 from ShammgodYoung/patch-1 代码生成器输入表名忽略大小写
- 新增渲染对象 MAP 信息预处理注入
- 修改 dts rabbitAdmin bean 判断方式
- Merge pull request #1255 from ShammgodYoung/patch-2 对serialVersionUID属性进行缩进
- JsqlParserCountOptimize 加入 boolean 字段,判断是否优化 join
- Merge pull request #1256 from baomidou/master Master
- freemarker entity 模板缩进调整
- 增加jdbcType,typeHandler属性, 合并el属性


## [v3.1.1] 2019.04.25
- 新增 996icu license 协议
- 新增 mybatis-plus-dts 分布式事务 rabbit 可靠消息机制
- 新增 DynamicTableNameParser 解析器、支持动态表名
- 优化 getOne 日志打印
- sql 优化跳过存储过程
- 优化分页查询(count为0不继续查询)
- 修复分页一级缓存无法继续翻页问题
- MybatisMapWrapperFactory 自动注入
- 支持纯注解下使用 IPage 的子类作为返回值
- 逻辑删除不再需要 LogicInject
- GlobalConfig 加入 enableSqlRunner 属性控制是否注入 SqlRunner ,默认 false
- SqlParser注解不再需要全局设置参数才会缓存,以及支持注解在 mapper 上
- GlobalConfig 的 sqlParserCache 设置为过时
- mybatis 升级到 3.5.1 , mybatis-spring 升级到 2.0.1 , jsqlparser 降级到 1.2
- ISqlInjector 接口 移除 injectSqlRunner 方法
- SqlFormatter 类设置为过时
- 解决自动注入的 method 的 SqlCommandType 在逻辑删除下混乱问题
- 新增 AlwaysUpdateSomeColumnById 选装件
- SFunction 继承 Function
- DbConfig 的 columnLike 和 dbType 属性设置为过时
- DbConfig 新增 schema 和 columnFormat 属性
- TableField 注解增加 keepGlobalFormat 属性
- TableName 注解增加 schema 和 keepGlobalPrefix 属性
- fixed bug tmp文件格式错乱 github #1048
- 处理表/字段名称抽象 INameConvert 接口策略 github #1038
- DB2支持动态 schema 配置 github #1035
- 把字段缓存的key从className替换成了.class, 如果使用dev-tools会导致:MybatisPlusException: Your property named "xxxx" cannot find the corresponding database column name!(解决方案:去掉dev-tools)


## [v3.1.0] 2019.02.24
- 升级 `mybatis` 到 `3.5.0` 版本
- 升级 `mybatis-spring` 到 `2.0.0` 版本
- 升级 `jsqlparser` 到 `1.4` 版本
- 新增 p6spy 日志打印支持
- 变更 `IService` 的 `getOne(Wrapper<T> queryWrapper)` 方法如果获取到多条数据将会抛出 `TooManyResultsException` 异常
- 修复 自定义分页功能不支持注解 `@select` 问题
- 修复 生成器的配置 kotlin 模式下 swagger 模式无效问题
- 修复 生成器 is 开头字段无法自动注解问题
- 修复 生成器 Serializable Active 模式继承父类包自动导入异常问题
- 修复 生成器 支持公共字段自动读取父类 class 属性问题
- 修复 枚举(注解方式)转换器在存储过程中转换失败
- 修复 beetl 模板逻辑删除注解错误问题
- 修复 通过 `mybatis-config.xml` 方式构建的 `Configuration` 的 `mapUnderscoreToCamelCase` 默认值非 `true` 的问题
- 修复 sql解析器动态代理引发的bug
- 修复 `mapper` 使用纯注解下可能触发的重试机制在个别情况下启动报错的问题
- 优化 支持指定 `defaultEnumTypeHandler` 来进行通用枚举处理
- 优化 从 hibernate copy 最新代码到 SqlFormatter
- 移除 `wrapper` 的 `in` 以及 `notIn` 方法内部对入参 `coll` 及 `动态数组` 的非empty判断(**注意: 如果以前有直接使用以上的方法的入参可能为 empty 的现在会产出如下sql: `in ()` 或 `not in ()` 导致报错**)
- 移除 `wrapper` 的 `notInOrThrow` 和 `inOrThrow` 方法(**使用新版的 `in` 以及 `notIn` 效果一样,异常则为sql异常**)
- 移除 `IService` 的 `query` 链式调用的 `delete` 操作
- 移除 xml 热加载相关配置项,只保留`MybatisMapperRefresh`该类并打上过时标志
- 日常优化

## [v3.0.7.1] 2019.01.02
- 修复 lambdaWrapper 的获取不到主键缓存的问题
- 优化 `IService` 新增的 `update` 链式调用支持 `remove` 操作
- 过时 `IService` 新增的 `query` 链式调用的 `delete` 打上过时标识
- 日常优化


## [v3.0.7] 2019.01.01
- 优化 generator 的 postgresSql 数据库支持生成 java8 时间类型
- 优化 generator 的 sqlServer 数据库支持生成 java8 时间类型
- 优化 LambdaWrapper 反射获取字段信息支持首字母大写的字段
- 优化 仅 LambdaWrapper 的 select 优化(支持字段对不上数据库时自动 as)
- 优化 重复扫描 `BaseMapper` 子类时,`TableInfo` 缓存的 `Configuration` 只保留最后一个
- 优化 `MergeSegments` 获取 `getSqlSegment` 方式
- 优化 SQL 自动注入器的初始化 modelClass 过程,提高初始化速度
- 优化 `BaseMapper` 的 `update` 方法的第一个入参支持为 `null`
- 新增 `IService` 增加4个链式调用方法
- 新增 代码生成器增加 `beetl` 模板
- 新增 `IdWorker` 增加毫秒时间 ID 可用于订单 ID
- 新增 wrapper 新增 `inOrThrow` 方法,入参为 empty 则抛出 `MybatisPlusExcuption` 异常
- 新增 `MetaObjectHandler` 新提供几个能根据注解才插入值的 `default` 方法
- 新增 kotlin 下 lambda 的支持,`KtQueryWrapper` 和 `KtUpdateWrapper`类
- 新增 简化MP自定义SQL使用方法,现在可以使用 `自定义sql` + ${ew.customSqlSegment} 方式
- 新增 提供新的 `InsertBatchSomeColumn` 选装件
- 修复 Page` 的 `setTotal(Long total)` -> `setTotal(long total)`
- 修复 `Page` 的 `setSearchCount` 为 `public`
- 修复 `TenantSqlParser` 如果 where 条件的开头是一个 `orExpression`,直接在左边用and拼接租户信息会造成逻辑不符合预期的问题
- 修复 wrapper 的 `lambda` 方法会向下传递 sqlSelect
- 修复 `ServiceImpl` 个别 batch 操作 `flushStatements` 问题
- 修复 selectObjs 泛型错误问题
- 移除 `InsertBatchAllColumn` 选装件
- 移除 `ServiceImpl` 的 batch 操作之外的事务注解
- 移除 `Model` 的事务注解
- 移除 `AbstractSqlInjector` 的 `isInjectSqlRunner` 方法(SqlRunner初始化较早,目前isInjectSqlRunner无法控制)
- 移除 `MybatisSessionFactoryBuilder`
- 移除 对 `mybatis-plus-generator` 包的依赖,自己按需引入
- 还原 xml 热加载,打上过时标识
- 升级 jsqlparser 依赖到 1.3
- 日常优化


## [v3.0.6] 2018.11.18
- 修复entity中2个以上条件并且拼接ODER BY 或 GROUP BY 产生的 WHERE X1 =? AND X2
- refactor(SerializedLambda.java):重构方法增加反序列化安全性,优化命名
- 基础Mapper优化支持自定义父类Mapper构造自己需要的注入方法
- 使用<where><set>代替<trim>
- 部分优化: 直到抛出异常时才进行字符串 format
- 优化 IdWorker 生成UUID使用并发性能
- feat: 动态分页模型、优化分页方言重新修正db2分页语句
- Assert 支持 i18n 多语言错误提示
- 支持 total 控制是否 count sql 新增 isSearchCount 方法
- feat: move spring dependency from core module to extension
- fix: Junit.assertTrue
- 强制使用自定义ParameterHandler,去除byId类型限制.
- 新增选装件的 InsertBatch 通用方法,以及相应测试,以及代码和性能的优化
- IPage 新增功能,泛型转换
- 自动填充判断填充值是否为空,为空时跳过填充逻辑
- batchsize 阈值设 30 修改为 1000 提升效率
- 修复在极端情况下saveOrUpdate执行错误
- 移除 MybatisSqlSessionTemplate
- 移除 xml 热加载
- 其他优化


## [v3.0.5] 2018.10.11
- 移除 ApiAssert 改为 Assert
- 移除 ApiResult 改为 R
- SQL 注入器优化
- 移除 excludeColumns 方法
- 修复 last 方法的 condition 入参不生效的问题
- 修复去除1=1 BUG
- 移除对 spring-devtools 的支持
- 修复实体属性都为null时Sql拼接出错问题
- 缓存Class反射信息,提升效率
- 继承Model类的实体中,现在无需重写pkVal()方法
- 解决在设置了config-location的情况下报mpe的bug,以及优化初始化逻辑
- 修复存在 mapper.xml 情况下逻辑删除失效
- 调整 关于ServiceImpl中的事务问题 gitee issue/IN8T8
- 修复 DB2分页方言 github issues/526


## [v3.0.4] 2018.09.28
- 修正全局配置 FieldStrategy 为非默认值
- 修正批量事务异常问题
- Api 层 R 类自动处理逻辑失败
- 修改h2脚本初始化加载,去除测试用例注入.
- 新增注释其它


## [v3.0.3] 2018.09.17
- 新增筛选查询字段方法
- fixed orderBy多入参的bug
- 新增 LogicDeleteByIdWithFill 组件
- fixed github issues/476 issues/473
- fixed github issues/360 gitee issues/IMIHN IM6GM
- 改进 allEq入参的value改用泛型
- fixed saveOrUpdateBatch使用BatchExecutor
- fixed 修正getOne获取多条数据为抛出异常
- 修正service 的getOne 方法
- 修正service 的个别方法为default方法
- 修复了page在set了desc下,sql有bug的问题
- 去除不再需要的方法
- 解决 generator 的 optional 的俩 jar 问题
- 重载 select(Predicate<TableFieldInfo> predicate)
- 其他优化


## [v3.0.2] 2018.09.11
- 新增 Wrapper 条件辅助类
- 新增 banner 属性控制是否打印
- 修复 gitee #IMMF4:批量插入(AR)事务无效
- fix: entity 无主键,生成 ew 的 where 条件的 bug
- 处理SqlRunner的sqlSession获取与释放
- 去除全局缓存sqlSession,增加Model,通用service层sqlSession释放
- ext: 抽象原生枚举处理类注册,方便扩展
- 优化扩展性其他


## [v3.0.1] 2018.08.31
- 修复代码生成器设置表前缀异常
- 新增 EnumValue 注解方式扫描通用枚举处理
- 修复逻辑删除混用失败
- DB2 方言改进何鹏举优化
- 新增测试用例及其他


## [v3.0-RELEASE] 2018.08.28 代号:超级棒棒糖 🍭
- 乐观锁 update(et,ew)方法 et带上 version 注解字段回写
- 优化改进优化代码生成器
- 包扫描为空时不抛出异常(枚举,别名)
- 去除 SqlSession
- 修改 issue 模板,完善注释
- 优化初始化过程,添加逻辑删除注解次数检测
- SQL检查允许跳过检查
- 支持达梦数据库
- 修改 code 为数值型严谨限制简化 api 层命名及初始值规则
- 初始化 SQL 解析移至 SqlInjector
- 其他代码优化


## [v3.0-RC3] 2018.08.19 代号:超级棒棒糖 🍭 RC3
- 支持 TableField select 属性 false 排除默认注入大字段查询
- 解决 page 反序列化 pages 属性报错
- 合并2.x dataSource被代理处理
- 去除DbConfig.columnUnderline属性
- 过滤掉selectObjs查询结果集为空的情况
- baseMapper 的 insert 和 update 返回值不再使用包装类
- fixed Gitee issues/IM3NW
- 优化代码完善注释等


## [v3.0-RC2] 2018.08.10 代号:超级棒棒糖 🍭 RC2
- 生成器加回 MODULE_NAME 开放配置 config
- 修复setting - defaultEnumTypeHandler属性配置无效
- 兼容 Spring boot 1.x 启动.
- 日常优化 , 测试用例 , 优化抛出异常的过程
- 新增 Gitee Github issue,pull_request模板
- 移除数据库关键字转义, 只支持注解模式转义
- 优化掉抛异常为使用 assert 或者 exceptionUtils
- 设置下划线转驼峰到 configuration 优化 ColumnUnderline
- 解决 page 序列化 asc desc 多态序列化异常
- 默认的 dbType 改为 other, 如果用户没有配置才会自动获取 dbType
- 优化,ColumnUnderline与MapUnderscoreToCamelCase意义相同
- fixed ILY8C 生成器指定 IdType 场景导入包
- 补充注释新增大量测试用例


## [v3.0-RC1] 2018.08.01 代号:超级棒棒糖 🍭 RC1
- 优化工具类部分代码,并修复一个在多线程环境下可能会引发死锁的BUG
- 新增断言类,顺便修改几处地方的判断抛异常为使用断言
- 去掉多余的 "implements Serializable"
- 魔法值都改为全局常量模式
- 咩咩说了 MP 3.0 分页已经飘飘欲仙了,不在需要迁就使用 PageHelper 模式
- issue #384 QueryWrapper 支持排除指定字段模式
- 全新 banner,全新感觉
- 再优化一下抛异常的过程
- 修改 class 实例化对象的方式,现在可以实例化私有 class
- 支持无配置可启动使用 Gitee issues/ILJQA
- 释放sqlSession,待优化 ActiveRecord单元测试
- 解决只调用 last 产生的 sql 会出的问题
- 修复Lambda首位属性为基类属性时错误.
- 增加泛型限制,格式化下代码.
- 优化一下 AbstractWrapper 使用的 ISqlSegment
- 其他


## [v3.0-RC] 2018.07.23 代号:超级棒棒糖 🍭 RC
- 优化 page 当 size 小于 0 自动调整为 list 模式
- 新增 攻击 SQL 阻断解析器
- 优化解析核心方法名,新增 querywrapper lambda 转换参数测试
- 调整通用 service 层方法命名为阿里规范 ( 小白鼠,对不起,请唾弃我们吧!然后修改下您的项目。)
- 代码生成器允许正则表达式匹配表名
- 乐观锁 回写更新后的version到实体
- Github #385:查询动态表名能利用Wrapper
- 修复 Gitee issues/ILEYD
- Page 的序列化接口挪到 IPage 接口
- 解决了 gamma 不能自动赋值 ID
- 代码改个常量引用优化


## [v3.0-gamma] 2018.07.15 代号:超级棒棒糖 🍭 伽玛
- IPage 新增 listMode 集合模式
- fixd gitee issues/IL7W4
- fixed gitee issues/IL7W4
- 优化生成器包导入
- 解决 Page ascs,descs 异常
- 逻辑删除无法 set where entity 一个参数并存逻辑
- 合并 PR 修改typeAliasesPackage扫描多维度
- 完善 3.0 测试用例
- 代码性能优化及其他


## [v3.0-beta] 2018.07.07 代号:超级棒棒糖 🍭 贝塔
- 新增字段 LIKE 查询注入全局配置,默认 true 开启
- 修改 dbtype 的 oracle db2 修改 CONCAT 方式
- 修正无论 update 的入参 updateWrapper 如何变化,逻辑删除下依然存在限制条件
- 注释加上告警,完善注释
- 修复 github issues/377 378 389
- 解决逻辑删除同时存在非逻辑删除逻辑
- 逻辑删除支持 delete set 其他字段,update 排除逻辑删除字段
- 支持 typeAliasesPackage 多项每项都有通配符 com.a.b.*.po, com.c.*.po
- 修复 gitee issues/IKJ48 IL0B2
- 其他完善


## [v3.0-alpha] 2018.07.01 代号:超级棒棒糖 🍭
- 升级 JDK 8 + 优化性能 Wrapper 支持 lambda 语法
- 模块化 MP 合理的分配各个包结构
- 重构注入方法,支持任意方法精简注入模式
- 全局配置下划线转换消灭注入 AS 语句
- 改造 Wrapper 更改为 QueryWrapper UpdateWrapper
- 重构 分页插件 消灭固定分页模型,支持 Mapper 直接返回 IPage 接口
- 新增 Rest Api 通过 Controller 层
- 实体 String 类型字段默认使用 LIKE 查询 SelectOne 默认 LIMIT 1
- 辅助支持 selectMaps 新增 bean map 互转工具类
- 增加 db2 支持 starter 改为 Spring boot 2+ 支持
- 重构生成器提供自定义 DB 多种模板引擎支持
- 相关 BUG 修复


## [v2.1.9] 2018.01.28 代号:怀念(纪念 2017 baomidou 组织小伙伴 MP 共同成长之路,奔向 2018 旺旺旺)
- page 分页新增控制是否优化 Count Sql 设置
```
// 不进行 count sql 优化
page.setOptimizeCountSql(false);
```
- 注入定义填充,支持sql注入器,主键生成器.
- fixed github issues/231
- fixed github issues/234
- 修改逻辑删除 selectByIds coll 问题
- fixed gitee issues/IHF7N
- fixed gitee issues/IHH83
- 兼容配置方式,优先使用自定义注入.
- 其他优化


## [v2.1.9-SNAPSHOT] 2018.01.16
- 调整 Gradle 依赖模式
- IdType 可选 ID_WORKER_STR `字符串类型` IdWorker.getIdStr() 字符串类型
- TableField 注解新增属性 `update` 预处理 set 字段自定义注入 fixed gitee IHART
```
 例如:@TableField(.. , update="%s+1") 其中 %s 会填充为字段
 输出 SQL 为:update 表 set 字段=字段+1 where ...
```
```
 例如:@TableField(.. , update="now()") 使用数据库时间
 输出 SQL 为:update 表 set 字段=now() where ...
```
- TableField 注解新增属性 `condition` 预处理 WHERE 实体条件自定义运算规则
```
@TableField(condition = SqlCondition.LIKE)
private String name;
输出 SQL 为:select 表 where name LIKE CONCAT('%',值,'%')
```
- 添加 spring-boot-starter 模块内置 `jdbc mp 包不需要单独引入` 更舒服的使用 boot
- 添加对 SQL Server 视图生成的支持
- 允许字段策略独立设置,默认为 naming 策略
```
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 允许字段策略独立设置,默认为 naming 策略
```
- 代码生成器抽象 AbstractTemplateEngine 模板引擎抽象类,可自定义模板引擎,新增内置 freemarker 可选
```
// 选择 freemarker 引擎
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
```
- 相关 SQL 解析如多租户可通过 `@SqlParser(filter=true)` 排除 SQL 解析
```
# 开启 SQL 解析缓存注解生效
mybatis-plus:
    global-config:
        sql-parser-cache: true
```
- 解决xml加载顺序问题,可随意引入其他 xml sql 片段
- 修复 author 带123的bug
- fix #IGQGE:Wrapper为空,但是page.getCondition()不为空的情况,Condition无法传递问题
- fix #IH6ED:Pagination dubbo 排序等属性序列化不支持
- 判断Wrapper是否为空,使用==,避免被equals方法重载的影响
- 避免注入自定义基类
- 剥离 sql 单独提出至 SqlUtils
- 统一缩进编码风格
- 优化生成代码执行性能 github issues/219
- 优化 sql 解析过程
- fixed gitee issues/IHCQB
- springboot-configuration-processor 修改 compileOnly为optional
- 其他


## [v2.1.8] 2018.01.02 代号:囍
- 修复代码生成器>字段前缀导致的bug
- 使用类全名替代手写的全名
- build修改
- 脚本警告,忽略目录
- 其他优化


## [v2.1.8-SNAPSHOT] 2017.12.28 代号:翻车鱼(秋秋赐名)
- 返回Map自动下划线转驼峰
- kotlin entity 静态常量支持
- 优化 pagination 构造模式
- Merge pull request #201
- fix: selectByMap @alexqdjay
- 增加sqlRuner测试用例,修复selectObjs只获取一个字段的bug
- 新增 BlobTypeHandler
- 去掉参数map的初始大小配置
- 增加.editorconfig,模板空格问题修复.
- Hikaricp连接池无法打印sql
- 全局中去掉了路径,mapperLocations不可缺少了.
- k 神 全部覆盖测试用例


## [v2.1.7] 2017.12.11 代号:清风徐来 , 该版本号存在 bug 请改为 2.1.8-SNAPSHOT +
- 枚举处理:基本类型,Number类型,String类型
- IGDRW:源码注释错误,容易给人误导 注释错误问题
- 炮灰 PR !42:添加分页构造方法重载 添加分页构造方法重载
- 代码生成 > oracle > 解决超出最大游标的问题
- fixed gitee IGNL9
- k 神 一大波 testcase 来袭
- 使用transient关键字去除Page中部分字段参与序列化
- 去除无效日志
- fix #IGI3H:selectBatchIds 参数改为Collection类型
- bugfix for logic delete sql injector
- 添加多个排序字段支持
- fixed github #185:2.0.2版本 自增主键 批量插入问题 pr
- 其他优化`


## [v2.1.6] 2017.11.22 代号:小秋秋之吻
- 模块拆分为 support core generate 代码生成分离可选择依赖
- 解决 gitee issue IFX30 拆分 mybatis-plus-support 包支持
- 解决 gitee issue IGAPX 通用枚举 bigdecimal 类型映射
- druid补充,填充字段修改
- 修复 kotlin 代码生成部分逻辑 Bug
- 合并 gitee pr 40 updateAllColumn****等方法排除fill = FieldFill.INSERT注释的字段 感谢 Elsif
- 构造模式设置 kotlin 修改
- Sql 工具类反射实例优化
- 其他优化


## [v2.1.5] 2017.11.11 代号:离神
- 通用枚举 spring boot 兼容调整
- PostgreSQL 支持关键词非关键词转换问题
- Cat73  PR 稍微调整下自动生成的代码
- 支持 kotlin 代码生成
- bugfix for metaObj handler set val which not included in ...
- alibaba 规范调整
- 其他


## [v2.1.3 - 2.1.4] 2017.10.15
- 新增通用枚举处理器,参考 spring boot demno
- 优化 SQL 解析器
- 新增 schema 租户解析器待完善
- 其他优化


## [v2.1.2] 2017.09.17 代号: X
- 修复代码生成器 Bug
- fixed gitee issues/IF2DY
- 修改 page 可链式操作
- 去掉转义 oracle
- fixed github issues/119
- fixed gitee issues/IF2OI


## [v2.1.1] 2017.09.12 代号:小锅盖
- 修改分页超过总记录数自动设置第一页 bug @wujing 感谢 pr
- fixed IEID6
- 升级 mybatis 3.4.5
- 升级生成器模板引擎 veloctiy 2.0
- 升级 jsqlparser 1.1
- 新增 SQL 解析链可动态扩展自定义 SQL 解析
- 新增 多租户 SQL 解析逻辑,具体查看 spring boot 演示 demo
- jasonlong10 PR 性能分析拦截器 支持OraclePreparedStatementWrapper的情况打印 SQL
- fixed github issues/145
- fixed gitee issue/IF1OF
- add sqlSelect("distinct test_type") test case
- 添加填充生成器遗漏 TableField 导入类
- fixed github issues/MYSQL表名含有保留字代码生成时报错 #124:字段全为 大写 下划线命名支持
- fixed github issues/134
- PostgreSQL 代码生成支持指定 schema 表字段按照默认排序
- 其他优化调整


## [v2.1.0] 2017.08.01 代号:小秋秋

####主体功能
- 批量sqlSession没有关闭问题修复
- 处理sql格式化报错问题,添加填充信息
- #91:关于insertBatch在大数据量的时候优化 github
- 新增 uuid 主键测试用例
- 修复BUG自动填充会覆盖之前的值
- 升级pom依赖,spring-test作用域test
- 更改sqlServer驱动,去掉乐观锁不需要的string类型测试
- #86:关于plus的底层映射设计问题 github issue
- SqlHelper处理Wrapper为空,但是page.getCondition()不为空的情况
- Merge pull request !33:生成实体增加字段排序 from 老千/master
- 解决使用代理对象导致无法获取实例缓存信息
- 解决布尔类型is开头生成sql错误问题
- DBType设置错误
- fix #351:DB2Dialect返回NULL
- fix #356:自动代码生成的Boolean类型的get方法不对
- fix #353:代码生成@TableLogic问题
- 新增 PostgreSqlInjector 自动注入器,处理字段大小写敏感,自动双引号转义。
- 仓库地址与用户信息使用自定义传入.
- fix #357:代码生成@TableLogic引入包Bug
- Sequence 新增 mac 判断,分页 pageHelper 模式新增 freeTotal() 方法
- #95:分页插件俩个建议 Github, selectItems contains #{} ${},
- 添加 Wrapper#setSqlSelect(String... columns) 方法,方便通过自动生成的实体...
- fixed github 116 issue
- fixed osgit IE436  IDVPZ  IDTZH

####代码生成
- 修改实体生成模板
- 修复自动填充代码生成错误
- 新增 postgresql schemaname 生成器支持
- 调整序列化导入问题
- 其他


## [v2.1-gamma] 2017.06.29

####主体功能
- 修正之前sqlserver自动获取类型错误问题
- 修复用户无法自定义分页数据库方言问题

####代码生成
- 完善了自动填充代码生成
- 修复postgresql生成重复字段问题

####上个版本(2.0.9)升级导致的问题
- 修复实体主键不在第一位无法读取的问题
- 修复在自定义insert操作时报`Insert not found et`异常,见#331
- 修复Sql生成错误问题(普通注入Group,Having,Order)
- 修复逻辑删除生成Sql顺序错误
- 感谢各路小伙伴及时反馈的问题,上个版本给大家带来的问题深感抱歉

###Mybatis-Plus-Boot-Start [1.0.4]

####主体变动
- 去除Mybatis-plus直接依赖
- 去除SpringBoot jdbc-starter直接依赖

## [v2.0.9] 2017.06.26 代号:K 神
###Mybaits-Plus
####主体功能
- 修正乐观锁和逻辑删除冲突问题
- 处理在生成注入SQL时之前没有考虑到存在且打开下划线配置情况
- 修复EntityWrapper继承关系问题
- Wrapper添加条件判断
- 性能分析插件支持记录日志提示
- Wrapper重写了toString方式,解决之前Debug时显示为null给用户造成错觉
- 处理Sequence非毫秒内并发偶数居多问题
- 忽略策略优化处理更改了注解的属性
- 注入Sql的方式优化,去除之前XML注入方式
- 处理逻辑删除出现2个Where的问题
- 添加其他数据库序列的实现方式,并开放出接口给用户自行扩展
- 乐观锁优化调整
- 优化Wrapper中Where AND OR 去除之前基于反射方式实现,提高代码运行效率
- 处理不添加mybatis-config.xml主键无法填充问题
- MybatisPlus添加支持gradle构建方式
- Wrapper 添加 `and()` `or()` 方法
- 优化GlobalConfiguration,抽离出GlobalConfigUtils减少耦合
- 修复Sqlserver2008与SqlServer2005分页问题
- 新增自动识别数据库,减少用户显式配置
- 优化分页插件减少用户显示配置属性
- 自动填充字段问题解决
- 新增PageHelper,获取当前线程来管理分页(之前老用户最好不要使用,改方式只用户适用MybatisPageHelper用户习惯)
- 大幅度的添加测试用例(感谢K神支持)
- 代码的其他优化
- 添加了JSqlparser的依赖以后不用手动去添加该Jar包

####代码生成
- 支持逻辑删除方式生成
- 支持乐观锁方式生成
- 修复生成器不能识别sqlServer的自增主键代码生成器不能识别SqlServer自增主键的问题
- 支持Lombok方式生成
- 支持构建模式方式生成
- 添加Clob和Blob类型转换
- 修复Oracle的Number类型字段转换错误问题

###Mybatis-Plus-Boot-Start [1.0.2] 代号:清风
####主体功能
- 处理AR模式devtool替换数据源失效问题
- 添加逻辑删除支持
- 添加序列支持

## [v2.0.8] 2017.05.15
- Wrapper添加设置对象sqlSelect
- 兼容无注解情况
- 乐观锁去除默认short实现,优化绑定注册器在扫描阶段绑定. 测试改为h2环境.
- 优化热加载,去除mapper路径配置.
- 减少刷新Mapper配置
- 修复tableFiled value 为空情况,开启下划线命名
- sequence 升级提示
- 开放表信息、预留子类重写
- 修改Idwork测试
- 支持 devtools
- fixed 259 支持 xml resultMap 公共字段生成
- fixed pulls 28 支持属性重载


## [v2.0.6  2.0.7] 2017.04.20
- 新增 逻辑删除
- 新增 Oracle Sequence
- 新增 jdk1.8 时间类型
- 完善支持乐观锁
- 完善字段填充器,支持更新填充
- 升级 mybatis 依赖为 3.4.4
- 代码调整优化,支持 wrapper limit 等逻辑
- 修复 Id 策略 auto bug ,生成器 bug 其他


## [v2.0.5] 2017.03.25

- 修复分页连接池没有关闭的bug
- issues fixed 217
- IMetaObjectHandler当主键类型是AUTO或者INPUT的时候不起效的bug
- 修复 like 占位符问题
- 生成代码的时候如果目录不存在则新建


## [v2.0.3 - v2.0.4] 2017.03.22

- 优化Wrapper代码结构
- 优化原有数据库连接获取
- 解决Page初始化问题(之前只能通过构造方法生效,现在可以通过setget也可以生效)
- 支持乐观锁插件
- 改造Wrapper让JDBC底层来处理参数,更好的与PreparedStatement结合
- 修复相关错误日志提示级别
- Wrapper开放isWhere方法,现在可以自定义是否拼接"WHERE"
- JDK版本向下兼容,之前相关代码用到了1.7新特性,当前版本解除
- sqlserver生成bug修复以及代码优化
- 优化MybatisPlus,SqlSession获取
- 解决未配置切点的情况下获取的sqlSession提交不属于当前事务的问题以及多个sqlSession造成的事务问题
- 增强执行sql类,sqlRunner
- Model添加序列化ID,避免以后在修改Model后没有设置序列号ID时序列号ID可以会变动的情况
- 添加重写默认BaseMapper测试用例
- 感谢各路小伙伴提问的好的建议以及贡献代码,就不一一点名了


## [v2.0.2] 2017.02.13
- 修复全局配置不起作用 2.0.1 逻辑
- 去除byId强制配置类型
- Wrapper Page 等程序优化
- 优化AR模式自动关闭数据库连接(之前需要手动设置事务)
- 优化代码生成器,下划线名称注解不处理驼峰,支持自定义更多的模板例如 jsp html 等
- 新增 service 层测试
- sql日志记录整合至性能分析插件.
- 处理多数据源分页插件支持多重数据库


## [v2.0.1] 2017.01.15

- 解决EntityWrapper对布尔类型构造sql语句错误
- 全局配置初始化日志提示调整
- Mybatis依赖升级至3.4.2,Mybatis-Spring依赖升级至1.3.1
- Service中补充方法(selectObjs,selectMaps)
- 解决selectCount数据库返回null报错问题
- 支持PostgreSql代码生成
- 拓展支持外部提供转义字符以及关键字列表
- 开放数据库表无主键依然注入MP的CRUD(无主键不能使用MP的xxById方法)
- 解决EntityWrapper拼接SQL时,首次调用OR方法不起作用的问题
- sqlServer代码生成(基于2008版本)
- 解决生成代码时未导入BigDecimal问题.
- 释放自动读取数据库时的数据库连接
- 优化全局校验机制(机制为EMPTY增加忽略Date类型)
- 优化注入,避免扫描到BaseMapper
- 优化注入,去除多余注入方法
- SQLlikeType改名为SqlLike
- 解决热加载关联查询错误问题
- SqlQuery改名为SqlRunner
- 优化完善代码生成器
- 修复代码生成器未导入@tableName
- 全局配置需要手动添加MP的默认注入类,更改为自动注入简化配置
- Wrapper增加ne方法
- 修复Mybatis动态参数无法生成totalCount问题
- 代码结构优化,生成器模板优化
- 解决issus[138,140,142,148,151,152,153,156,157],具体请查看里程碑[mybatis-plus 2.0.1 计划](https://gitee.com/baomidou/mybatis-plus/milestones/2)中所有issus

## [v2.0.0] 2016.12.11

- 支持全局大写命名策略
- 自动分页Count语句优化
- 优化现有全局配置策略
- 优化全局验证策略
- 优化代码生成器(之前硬编码,现使用模板形式)
- 优化注入通用方法ByMap逻辑
- 添加自动选择数据库类型
- 改善SqlExplainInterceptor(自行判断MySQL版本不支持该拦截器则直接放行(版本过低小于5.6.3))
- 修复部分特殊字符字符多次转义的问题
- 优化现有EntityWrapper添加Wrapper父类以及Condition链式查询
- Wrapper类使LIKE方法兼容多种数据库
- 优化日志使用原生Mybatis自带的日志输出提示信息
- 修复使用缓存导致使用分页无法计算Count值
- 修复PerformanceInterceptor替换`?`导致打印SQL不准确问题,并添加格式化SQL选项
- 添加多种数据库支持,请查看DBType
- 添加字符串类型字段非空校验策略(字符串类型自动判断非空以及非空字符串)
- Wrapper添加类似QBC查询(eq、gt、lt等等)
- 支持AR模式(需继承Model)
- 合并所有Selective通用方法(例如:去除之前的insert方法并把之前的insetSelective改名为insert)
- 解决sql剥离器会去除`--`的情况
- 支持MySQL关键词,自动转义
- 精简底层Service、Mapper继承结构
- 不喜欢在XML中写SQL的福音,新增执行SQL方式,具体请查看SqlQuery
- 优化代码结构
- 解决issus[95,96,98,100,103,104,108,114,119,121,123,124,125,126,127,128,131,133,134,135],具体请查看里程碑[mybatis-plus 2.0 计划](https://gitee.com/baomidou/mybatis-plus/milestones/1)中所有issus

## [v1.4.9] 2016.10.28

- ServiceImpl去除@Transactional注解、去除Slf4j依赖
- 解决使用EntityWrapper查询时,参数为特殊字符时,存在sql注入问题
- 调整Mybatis驼峰配置顺序 MybatisPlus > Mybatis
- 优化分页插件并修复分页溢出设置不起作用问题
- 去除DBKeywordsProcessor,添加MySQL自动转义关键词
- 代码生成器新增支持TEXT、TIME、TIMESTAMP类型生成
- 新增批量插入方法
- 代码生成器新增Controller层代码生成
- 调整EntityWrapper类部分List入参为Collection
- 代码生成器优化支持 resultMap

## [v1.4.8] 2016.10.12

- insertOrUpdate增加主键空字符串判断
- 支持Mybatis原生驼峰配置 mapUnderscoreToCamelCase 开关设置
- 支持 TableField FieldStrategy 注解全局配置
- SelectOne、SelectCount方法支持EntityWrapper方式
- oracle 代码生成器支持 Integer Long Dobule 类型区分
- 修复INPUT主键策略InsertOrUpdate方法Bug
- EntityWrapper IN 添加可变数组支持
- 基础Mapper、Servcie通用方法PK参数类型更改至Serializable
- 当selectOne结果集不唯一时,添加警告提示(需开启日志warn模式)
- baseService添加logger,子类直接调用logger不用重新定义(需slf4j依赖)

## [v1.4.7] 2016.09.27

- 主键注解 I 改为 PK 方便理解,去掉 mapper 注解
- 性能分析插件,特殊处理 $ 符内容
- 添加自动提交事务说明,新增事务测试
- 支持 resultMap 实体结果集映射
- 增加#TableField(el = "")表达式,当该Field为对象时, 可使用#{对象.属性}来映射到数据表、及测试
- 新增 typeHanler 级联查询支持
- 新增验证字段策略枚举类
- 代码生成器支持实体构建者模型设置
- 代码生成器新增实体常量生成支持
- CRUD 新增 insertOrUpdate 方法
- 解决MessageFormat.format格式化数字类型sql错误
- EntityWrapper添加 EXISTS、IN、BETWEEN AND(感谢D.Yang提出)方法支持
- 支持 mysql5.7+ json enum 类型,代码生成
- 支持无XML依然注入CRUD方法
- 修改Mybatis原生配置文件加载顺序

## [v1.4.6] 2016.09.05

- 新增无 @TableId 注解跳过注入SQL
- 支持非表映射对象插入不执行填充
- xxxByMap 支持 null 查询

## [v1.4.5] 2016.08.28

- 新增 XML 修改自动热加载功能
- 添加自动处理EntityWrapper方法中的MessageFormat Params类型为字符串的参数
- 新增表公共字段自动填充功能

## [v1.4.4] 2016.08.25

- entitywrapper所有条件类方法支持传入null参数,该条件不会附件到SQL语句中
- TSQLPlus更名为TSqlPlus与整体命名保持一致。
- 修复mysql关键字bug----将关键字映射转换加上``符号,增加xml文件生成时可自定义文件后缀名
- 关闭资源前增加非空判断,避免错误sql引起的空指针错误,增加选择 current>pages 判断
- TSQL 相关类实现序列化支持 dubbo
- 增加 mybatis 自动热加载插件
- 支持数据库 order key 等关键词转义 curd 操作

## [v1.4.3] 2016.08.23

- 优化 Sequence 兼容无法获取 mac 情况
- 兼容用户设置 ID 空字符串,自动填充
- 纯大写命名,转为小写属性
- 修改EntityWrapper符合T-SQL语法标准的条件进行方法封装定义
- 升级 1.4.3 测试传递依赖

## [v1.4.0] 2016.08.17

- 增加自定义 select 结果集,优化 page 分页
- 未考虑 函数,去掉 field 优化
- 新增 delete update 全表操作禁止执行拦截器

## [v1.3.9] 2016.08.09

- 修复 bug
- 解决插入 map 异常
- 插入 map 不处理,原样返回
- 优化 IdWorker 生成器
- 支持自定义 LanguageDriver
- 支持代码生成自定义类名
- 升级 mybatis 3.4.1 依赖

## [v1.3.6] 2016.07.28

- 支持全局表字段下划线命名设置
- 增加自定义 注入 sql 方法
- 优化分页总记录数为0不执行列表查询逻辑
- 自动生成 xml 基础字段增加 AS 处理
- 支持字段子查询

## [v1.3.5] 2016.07.24

- 升级 1.3.5 支持全局表字段下划线命名设置
- 添加发现设置多个主键注解抛出异常
- 添加无主键主键启动异常
- 去掉重置 getDefaultScriptingLanuageInstance
- 修改歧义重载方法

## [v1.3.3] 2016.07.15

- 处理 SimpleDateFormat 非现场安全问题
- 修改 oracle 分页 bug 修复
- oracle TIMESTAMP 生成支持 bug 修复

## [v1.3.2] 2016.07.12

- service 暴露 sqlSegment 的方法调用
- 新增 sql 执行性能分析 plugins
- 新增 deleteByMap , selectByMap

## [v1.3.0] 2016.07.07

- 支持 like 比较等查询 sqlSegment 实现
- 支持 typeAliasesPackage 通配符扫描, 无 count 分页查询
- mybatis mapper 方法调用执行原理测试
- 添加 IOC 演示用例

## [v1.2.17] 2016.06.15

- 优化 代码生成器 感谢 yanghu pull request
- 调整 sql 加载顺序 xmlSql > curdSql
- 支持 CURD 二级缓存
- 增加缓存测试,及特殊字符测试

## [v1.2.15] 2016.04.27

- 新增 支持oracle 自动代码生成,测试 功能
- 新增 UUID 策略
- 演示demo 点击 spring-wind
- 新增支持单表 count 查询

## [v1.2.12] 2016.04.22

- 添加 service 层支持泛型 id 支持,自动生成代码优化
- 升级 mybatis 为 3.4.0 ,mybatis-spring 为 1.3.0

## [v1.2.11] 2016.04.18

- 新增批量更新,支持 oracle 批量操作
- 去掉,移植至 spring-wind 的文档
- 支持 jdk1.5 修改 param 描述
- 添加数据库类型

## [v1.2.9] 2016.04.10

- EntityWrapper 新增无 order by 构造方法
- MailHelper 重载 sendMail 方法
- 新增 String 主键ID 支持 CommonMapper
- 原来方法 selectList 分离为 selectList , selectPage 两个方法
- 优化代码生成器,添加文档说明、其他

## [v1.2.8] 2016.04.02

- 优化生成代码处理大写字段,支持自动生成 entity mapper service 文件
- 优化分页 index 超出逻辑,新增 5 个 CRUD 操作方法
- 开放模板引擎 getHtmltext 方法
- 优化邮件发送配置添加说明文档
- 添加文档说明、其他

## [v1.2.6] 2016.03.29

- 优化代码 service 层封装,抽离 list 、 page 方法
- 优化分页 count sql 语句
- 改进 mail 工具类
- 完善 framework 对 spring 框架的支持
- 添加文档说明、其他

## [v1.2.5] 2016.03.25

- 独立支持id泛型的 baseMapper
- 更完善的自动生成工具
- 支持实体封装排序
- 分页插件完善
- 抽离 service 主键泛型支持

## [v1.2.2] 2016.03.14

- 注解 ID 区分 AUTO 数据库自增,ID_WORKER 自动填充自定义自增ID , INPUT 手动输入 。
- 优化代码及自动生成器功能。
- 其他


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright (c) 2011-${year}, baomidou (jobob@qq.com).

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: MPCodeStyle.xml
================================================
<code_scheme name="JavaCodeStyle">
  <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
  <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
  <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
    <value />
  </option>
  <option name="IMPORT_LAYOUT_TABLE">
    <value>
      <package name="" withSubpackages="true" static="true" />
      <emptyLine />
      <package name="java" withSubpackages="true" static="false" />
      <emptyLine />
      <package name="javax" withSubpackages="true" static="false" />
      <emptyLine />
      <package name="org" withSubpackages="true" static="false" />
      <emptyLine />
      <package name="com" withSubpackages="true" static="false" />
      <emptyLine />
      <package name="" withSubpackages="true" static="false" />
    </value>
  </option>
  <codeStyleSettings language="JAVA">
    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
    <option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
  </codeStyleSettings>
</code_scheme>

================================================
FILE: README-zh.md
================================================
<p align="center">
  <a href="https://github.com/baomidou/mybatis-plus" target="_blank">
   <img alt="Mybatis-Plus-Logo" src="https://raw.githubusercontent.com/baomidou/logo/master/mybatis-plus-logo-new-mini.png">
  </a>
</p>

<p align="center">
  为简化开发工作、提高生产率而生
</p>

<p align="center">

  <a href="https://github.com/baomidou/mybatis-plus">
    <img alt="code style" src="https://img.shields.io/github/stars/baomidou/mybatis-plus?style=social">
  </a>

  <a href="https://gitee.com/baomidou/mybatis-plus">
    <img alt="code style" src="https://gitee.com/baomidou/mybatis-plus/badge/star.svg">
  </a>

  <a href="https://gitcode.com/baomidou/mybatis-plus">
    <img alt="code style" src="https://gitcode.com/baomidou/mybatis-plus/star/badge.svg">
  </a>

  <a href="https://search.maven.org/search?q=g:com.baomidou%20a:mybatis-*">
    <img alt="maven" src="https://img.shields.io/maven-central/v/com.baomidou/mybatis-plus.svg?style=flat-square">
  </a>

  <a href="https://www.apache.org/licenses/LICENSE-2.0">
    <img alt="code style" src="https://img.shields.io/badge/license-Apache%202-4EB1BA.svg?style=flat-square">
  </a>
</p>

[企业版 Mybatis-Mate 高级特性](https://gitee.com/baomidou/mybatis-mate-examples)

# 简介 | Intro

Mybatis 增强工具包 - 只做增强不做改变,简化`CRUD`操作

添加 `微信 wx153666` 备注进 mp 群

> 不允许非法项目使用,后果自负

# 特别用户

<p>
  <a href="https://doc.flowlong.com?from=mp" target="_blank">
   <img alt="aizuda-Logo" src="https://foruda.gitee.com/images/1715955628416785121/954c16ef_12260.png" width="160px" height="50px">
  </a>
  <a href="https://gitee.com/gz-yami/mall4j?from=mp" target="_blank">
   <img alt="mall4j-Logo" src="https://foruda.gitee.com/images/1716776021837872678/87883b39_12260.gif" width="160px" height="50px">
  </a>
  <a href="http://github.crmeb.net/u/MyBatis-Plus" target="_blank">
   <img alt="crmeb-Logo" src="https://foruda.gitee.com/images/1685339553088166856/b0a6b1a4_12260.gif" width="160px" height="50px">
  </a>
</p>

# 依赖引用

- Latest
  Version: [![Maven Central](https://img.shields.io/maven-central/v/com.baomidou/mybatis-plus.svg)](https://search.maven.org/search?q=g:com.baomidou%20a:mybatis-*)
    - Maven:
    - SpringBoot2
      ```xml
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>Latest Version</version>
      </dependency>
      ```
    - SpringBoot3
      ```xml
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
        <version>Latest Version</version>
      </dependency>
      ```
    - SpringBoot4 `^3.5.13`
      ```xml
      <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-spring-boot4-starter</artifactId>
      <version>Latest Version</version>
      </dependency>
      ```
    - `^3.5.9` 你可能需要额外的引用
        - jdk11+
      ```xml
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-jsqlparser</artifactId>
        <version>Latest Version</version>
      </dependency>
      ```
        - jdk8
      ```xml
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-jsqlparser-4.9</artifactId>
        <version>Latest Version</version>
      </dependency>
      ```
        - Gradle
        - SpringBoot2
          ```groovy
          compile group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: 'Latest Version'
          ```
        - SpringBoot3
          ```groovy
          compile group: 'com.baomidou', name: 'mybatis-plus-spring-boot3-starter', version: 'Latest Version'
          ```

# 优点 | Advantages

- **无侵入**:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis
  构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
- **依赖少**:仅仅依赖 Mybatis 以及 Mybatis-Spring
- **损耗小**:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
- **通用CRUD操作**:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- **多种主键策略**:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
- **支持ActiveRecord**:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
- **支持代码生成**:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller
  层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
- **支持自定义全局通用操作**:支持全局通用方法注入( Write once, use anywhere )
- **内置分页插件**:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于写基本List查询
- **内置性能分析插件**:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询
- **内置全局拦截插件**:提供全表 delete 、 update 操作智能分析阻断,预防误操作

## 相关链接 | Links

- [文档](https://baomidou.com)
- [代码生成](https://github.com/baomidou/generator)
- [功能示例](https://github.com/baomidou/mybatis-plus-samples)
- [展示](https://github.com/baomidou/awesome-mybatis-plus)
- [企业版 Mybatis-Mate 高级特性](https://github.com/baomidou/mybatis-mate-examples)


# 其他开源项目 | Other Project

- [基于Cookie的SSO中间件 Kisso](https://gitee.com/baomidou/kisso)
- [Java快速开发框架 SpringWind](https://gitee.com/juapk/SpringWind)
- [基于Hibernate扩展 Hibernate-Plus](https://gitee.com/baomidou/hibernate-plus)
- [基于 pac4j-jwt 的快速集成的 web 安全组件 shaun](https://gitee.com/baomidou/shaun)

# 王者荣耀

![MPTrophy](./images/c9bf2ba5_12260.jpeg "mybatis-plus.jpg")
![GitCode](./images/2025-05-21_163231_398.jpg "2025-05-21_163231_398.jpg")
# 期望 | Futures

> 欢迎提出更好的意见,帮助完善 Mybatis-Plus

# 版权 | License

[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)

![捐赠 mybatis-plus](./images/211207_0acab44e_12260.png "支持一下mybatis-plus")

# 关注我 | About Me
* Github: https://github.com/baomidou/mybatis-plus
* Gitee: https://gitee.com/baomidou/mybatis-plus
* GitCode: https://gitcode.com/baomidou/mybatis-plus
![程序员日记](./images/181933_46d5b802_12260.png "程序员日记")


================================================
FILE: README.md
================================================
<p align="center">
  <a href="https://github.com/baomidou/mybatis-plus">
   <img alt="Mybatis-Plus-Logo" src="https://raw.githubusercontent.com/baomidou/logo/master/mybatis-plus-logo-new-mini.png">
  </a>
</p>

<p align="center">
  Born To Simplify Development
</p>

<p align="center">

  <a href="https://github.com/baomidou/mybatis-plus">
    <img alt="code style" src="https://img.shields.io/github/stars/baomidou/mybatis-plus?style=social">
  </a>

  <a href="https://gitee.com/baomidou/mybatis-plus">
    <img alt="code style" src="https://gitee.com/baomidou/mybatis-plus/badge/star.svg">
  </a>

  <a href="https://gitcode.com/baomidou/mybatis-plus">
    <img alt="code style" src="https://gitcode.com/baomidou/mybatis-plus/star/badge.svg">
  </a>

  <a href="https://search.maven.org/search?q=g:com.baomidou%20a:mybatis-*">
    <img alt="maven" src="https://img.shields.io/maven-central/v/com.baomidou/mybatis-plus.svg?style=flat-square">
  </a>

</p>

[企业版 Mybatis-Mate 高级特性](https://gitee.com/baomidou/mybatis-mate-examples)

添加 `微信 wx153666` 备注进 mp 群

> 不允许非法项目使用,后果自负

# Special user

<p>
  <a href="https://doc.flowlong.com?from=mp" target="_blank">
   <img alt="aizuda-Logo" src="https://foruda.gitee.com/images/1715955628416785121/954c16ef_12260.png" width="160px" height="50px">
  </a>
  <a href="https://gitee.com/gz-yami/mall4j?from=mp" target="_blank">
   <img alt="mall4j-Logo" src="https://foruda.gitee.com/images/1716776021837872678/87883b39_12260.gif" width="160px" height="50px">
  </a>
</p>

## What is MyBatis-Plus?

MyBatis-Plus is a powerful and enhanced toolkit of MyBatis for simplifying development.
It provides efficient, and out-of-the-box features (such as code generation, conditional query builders, pagination plugins...), effectively saving development time

## Links

- [Documentation](https://baomidou.com)
- [Code Generator](https://github.com/baomidou/generator)
- [Samples](https://github.com/baomidou/mybatis-plus-samples)
- [Showcase](https://github.com/baomidou/awesome-mybatis-plus)
- [企业版 Mybatis-Mate 高级特性](https://gitee.com/baomidou/mybatis-mate-examples)

## Features

- Fully compatible with MyBatis
- Auto configuration on startup
- Out-of-the-box interfaces for operate database
- Powerful and flexible where condition wrapper
- Multiple strategy to generate primary key
- Lambda-style API
- Almighty and highly customizable code generator
- Automatic paging operation
- SQL Inject defense
- Support active record
- Support pluggable custom interface
- Build-in many useful extensions

## Getting started

- Add MyBatis-Plus dependency
    - Latest
      Version: [![Maven Central](https://img.shields.io/maven-central/v/com.baomidou/mybatis-plus.svg)](https://search.maven.org/search?q=g:com.baomidou%20a:mybatis-*)
    - Maven:
    - SpringBoot2
      ```xml
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>Latest Version</version>
      </dependency>
      ```
    - SpringBoot3
      ```xml
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
        <version>Latest Version</version>
      </dependency>
      ```
    - SpringBoot4 `^3.5.13`
      ```xml
      <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-spring-boot4-starter</artifactId>
      <version>Latest Version</version>
      </dependency>
      ```
    - `^3.5.9` may need additional citations
        - jdk11+
      ```xml
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-jsqlparser</artifactId>
        <version>Latest Version</version>
      </dependency>
      ```
        - jdk8
      ```xml
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-jsqlparser-4.9</artifactId>
        <version>Latest Version</version>
      </dependency>
      ```

    - Gradle
    - SpringBoot2
      ```groovy
      compile group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: 'Latest Version'
      ```
    - SpringBoot3
      ```groovy
      compile group: 'com.baomidou', name: 'mybatis-plus-spring-boot3-starter', version: 'Latest Version'
      ```
- Modify mapper file extends BaseMapper interface

  ```java
  public interface UserMapper extends BaseMapper<User> {

  }
  ```

- Use it
  ``` java
  List<User> userList = userMapper.selectList(
          new QueryWrapper<User>()
                  .lambda()
                  .ge(User::getAge, 18)
  );
  ```
  MyBatis-Plus will execute the following SQL
    ```sql
    SELECT * FROM user WHERE age >= 18
    ```

> This showcase is just a small part of MyBatis-Plus features. If you want to learn more, please refer to
> the [documentation](https://baomidou.com).

## License

MyBatis-Plus is under the Apache 2.0 license. See the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0)
file for details.


================================================
FILE: build.gradle
================================================
import java.time.LocalDateTime

allprojects {
    group APP_GROUP
    version APP_VERSION
}

ext {
    configuration = [
        javaVersion = JavaVersion.VERSION_21
    ]

    libraries = [
        mybatisVersion = '3.5.19',
        mybatisSpringVersion = '2.1.2',
        mybatisSpringBootStarterVersion = '2.3.2',
        springVersion = '5.3.39',
        springBootVersion = '2.7.18',
        springBoot3Version = '3.5.9',
        springBoot4Version = '4.0.1',
        springCloudVersion = '3.1.8',
        junitVersion = '5.14.1',
    ]

    lib = [
        "kotlin-reflect"             : "org.jetbrains.kotlin:kotlin-reflect:2.1.0",
        "kotlin-stdlib-jdk8"         : "org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.0",
        "mybatis"                    : "org.mybatis:mybatis:${mybatisVersion}",
        "mybatis-spring"             : "org.mybatis:mybatis-spring:${mybatisSpringVersion}",
        "mybatis-thymeleaf"          : "org.mybatis.scripting:mybatis-thymeleaf:1.0.4",
        "mybatis-freemarker"         : "org.mybatis.scripting:mybatis-freemarker:1.3.0",
        "mybatis-velocity"           : "org.mybatis.scripting:mybatis-velocity:2.1.2",
        "spring-context-support"     : "org.springframework:spring-context-support:${springVersion}",
        "spring-jdbc"                : "org.springframework:spring-jdbc:${springVersion}",
        "spring-tx"                  : "org.springframework:spring-tx:${springVersion}",
        "spring-web"                 : "org.springframework:spring-web:${springVersion}",
        "spring-aop"                 : "org.springframework:spring-aop:${springVersion}",
        "cglib"                      : "cglib:cglib:3.3.0",
        "imadcn"                     : "com.imadcn.framework:idworker:1.6.0",
        "spring-cloud-commons"       : "org.springframework.cloud:spring-cloud-commons:${springCloudVersion}",

        "aspectjweaver"              : "org.aspectj:aspectjweaver:1.9.22.1",
        "slf4j-api"                  : "org.slf4j:slf4j-api:1.7.36",
        //copy
        "mybatis-spring-boot-starter": "org.mybatis.spring.boot:mybatis-spring-boot-starter:${mybatisSpringBootStarterVersion}",
        //test
        "spring-test"                : "org.springframework:spring-test:${springVersion}",
        "assertj-core"               : "org.assertj:assertj-core:3.27.6",
        "junit-jupiter"              : "org.junit.jupiter:junit-jupiter:${junitVersion}",
        "fastjson"                   : "com.alibaba:fastjson:2.0.60",
        "jackson"                    : "com.fasterxml.jackson.core:jackson-databind:2.20.1",
        "jackson3"                   : "tools.jackson.core:jackson-databind:3.0.3",
        "gson"                       : "com.google.code.gson:gson:2.13.2",
        "lagarto"                    : "org.jodd:jodd-lagarto:6.0.6",
        //datasource
        "p6spy"                      : "p6spy:p6spy:3.9.1",
        "sqlserver"                  : "com.microsoft.sqlserver:sqljdbc4:4.0",
        "postgresql"                 : "org.postgresql:postgresql:42.7.8",
        "oracle"                     : "com.oracle.database.jdbc:ojdbc8:23.7.0.25.01",
        "dm"                         : fileTree(dir: 'libs', includes: ["jdbcDriver-18.jar"]),
        "h2"                         : "com.h2database:h2:2.4.240",
        "mysql"                      : "com.mysql:mysql-connector-j:9.5.0",
        "sqlite"                     : "org.xerial:sqlite-jdbc:3.51.1.0",
        "firebird"                   : "org.firebirdsql.jdbc:jaybird:5.0.10.java8",
        "gaussdb"                    : "com.huaweicloud.gaussdb:gaussdbjdbc:506.0.0.b058",
        //cache
        "mybatis-caffeine"           : "org.mybatis.caches:mybatis-caffeine:1.2.0",
        //code generator
        "velocity"            : "org.apache.velocity:velocity-engine-core:2.4.1",
        "freemarker"          : "org.freemarker:freemarker:2.3.33",
        "beetl"               : "com.ibeetl:beetl:3.17.0.RELEASE",
        "swagger-annotations" : "io.swagger:swagger-annotations:1.6.14",
        "enjoy"               : "com.jfinal:enjoy:5.2.2",
        "logback-classic"     : "ch.qos.logback:logback-classic:1.5.15",
    ]
}

description = "Mybatis 增强工具包 - 只做增强不做改变,简化CRUD操作"

subprojects {
    apply plugin: 'java-library'
    apply plugin: 'signing'
    apply plugin: 'maven-publish'
    apply plugin: 'tech.yanand.maven-central-publish'
    apply plugin: "io.freefair.lombok"

    sourceCompatibility = "${javaVersion}"
    targetCompatibility = "${javaVersion}"

    lombok {
        version = "1.18.32"
    }

    compileJava {
        options.release = 8
    }

    repositories {
        mavenLocal()
        maven { url "https://maven.aliyun.com/repository/public" }
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
        mavenCentral()
    }

    dependencies {
        testImplementation "${lib["assertj-core"]}"
        testImplementation "${lib["junit-jupiter"]}"
        testImplementation "org.mockito:mockito-junit-jupiter:5.21.0"
        testImplementation "${lib["lagarto"]}"
        testImplementation("org.junit.platform:junit-platform-engine:6.0.1")
        testImplementation("org.junit.jupiter:junit-jupiter-engine:6.0.1")
        testImplementation("org.junit.platform:junit-platform-launcher:6.0.1")
    }

    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
        options.warnings = false
        options.deprecation = true
        options.compilerArgs += ["-parameters"]
    }

    tasks.withType(GenerateModuleMetadata) {
        enabled = false
    }

    jar {
        into("META-INF/") {
            from rootProject.file("LICENSE")
        }
        into("META-INF/maven/$project.group/$project.name") {
            from { generatePomFileForMavenJavaPublication }
            rename ".*", "pom.xml"
        }
        afterEvaluate {
            manifest {
                attributes 'Implementation-Title': archiveBaseName
                attributes 'Implementation-Version': archiveVersion
                attributes 'Built-Gradle': gradle.gradleVersion
                attributes 'Bundle-DocURL': 'https://baomidou.com/'
                attributes 'Build-OS': System.getProperty("os.name")
                attributes 'Built-By': System.getProperty("user.name")
                attributes 'Build-Jdk': System.getProperty("java.version")
                attributes 'Build-Timestamp': LocalDateTime.now().format("yyyy-MM-dd HH:mm:ss")
                attributes 'Automatic-Module-Name': "${project.group}.${project.name.replaceAll("-", ".")}"
            }
        }
    }

    //noinspection GroovyAssignabilityCheck
    task sourcesJar(type: Jar) {
        archiveClassifier = 'sources'
        from sourceSets.main.allSource
    }

    javadoc {
        afterEvaluate {
            configure(options) {
                encoding "UTF-8"
                charSet 'UTF-8'
                author true
                version true
                failOnError false
                links "http://docs.oracle.com/javase/8/docs/api"
            }
        }
    }

    test {
        dependsOn("cleanTest", "generatePomFileForMavenJavaPublication")
        useJUnitPlatform()
        exclude("**/phoenix/**")
        exclude("**/postgresql/**")
        exclude("**/gaussdb/**")
//        exclude("**/generator/**")
    }

    task cleanBuildDir(type: Delete) {
        delete "${projectDir}/out"
    }
    tasks.clean.dependsOn(cleanBuildDir)

    task javadocJar(type: Jar) {
        archiveClassifier = 'javadoc'
        from javadoc
    }

    tasks.whenTaskAdded { task ->
        if (task.name.contains('signMavenJavaPublication')) {
            task.enabled = new File(project.property('signing.secretKeyRingFile') as String).isFile()
        }
    }

    publishing {
        repositories {
            maven {
                name = "Local"
                url = layout.buildDirectory.dir('repos/bundles')
            }
            maven {
                def userName = System.getProperty("un")
                def passWord = System.getProperty("ps")
                name = "snapshots"
                url = "https://central.sonatype.com/repository/maven-snapshots/"
                credentials {
                    username userName
                    password passWord
                }
            }
        }

        // use example : ./gradlew clean build publishMavenJavaPublicationToLocalRepository publishToMavenCentralPortal -DauthToken='xxxxxx' -x test
        mavenCentral {
            repoDir = layout.buildDirectory.dir('repos/bundles')
            // Base64 encoded of "username:password"
            authToken = System.getProperty("authToken")
            // 默认自动发布 AUTOMATIC
            publishingType = 'USER_MANAGED'
        }

        publications {

            mavenJava(MavenPublication) {
                from components.java

                artifact sourcesJar
                artifact javadocJar

                pom {
                    name = 'mybatis-plus'
                    packaging 'jar'
                    description = 'An enhanced toolkit of Mybatis to simplify development.'
                    url = 'https://github.com/baomidou/mybatis-plus'

                    scm {
                        connection = 'scm:git@github.com:Codearte/gradle-nexus-staging-plugin.git'
                        developerConnection = 'scm:git@github.com:Codearte/gradle-nexus-staging-plugin.git'
                        url = 'https://github.com/baomidou/mybatis-plus'
                    }

                    licenses {
                        license {
                            name = 'The Apache License, Version 2.0'
                            url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }

                    developers {
                        developer {
                            id = 'baomidou'
                            name = 'hubin'
                            email = 'jobob@qq.com'
                        }
                    }

                    withXml {
                        def root = asNode()
                        root.dependencies.'*'.findAll {
                            def d = it
                            d.scope.text() == 'runtime' && project.configurations.findByName("implementation").allDependencies.find { dep ->
                                dep.name == it.artifactId.text()
                            }.each() {
                                d.scope*.value = 'compile'
                                d.appendNode('optional', true)
                            }
                        }
                    }
                }
            }
        }

        signing {
            sign publishing.publications.mavenJava
        }
    }
}


================================================
FILE: changelog-temp.md
================================================
- feat: 支持配置加密在环境变量中使用


================================================
FILE: gradle.properties
================================================
APP_VERSION=3.5.17-SNAPSHOT
APP_GROUP=com.baomidou
signing.keyId=1FD337F9
signing.password=243194995
signing.secretKeyRingFile=/home/nieqiurong/signing.gpg
#signing.secretKeyRingFile=/Users/ming/Documents/signing.gpg


================================================
FILE: license.txt
================================================
Copyright (c) 2011-2025, baomidou (jobob@qq.com).

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


================================================
FILE: mybatis-plus/build.gradle
================================================
apply plugin: 'kotlin'

compileKotlin{
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjvm-default=all']
    }
}

configurations {
    testImplementation.exclude module: 'mybatis-plus-jsqlparser-4.9'
}

dependencies {
    api project(":mybatis-plus-core")
    api project(":mybatis-plus-annotation")
    api project(":mybatis-plus-spring")

    api "${lib.mybatis}"

    implementation "${lib."mybatis-spring"}"
    implementation "${lib."kotlin-stdlib-jdk8"}"
    implementation project(":mybatis-plus-jsqlparser-support:mybatis-plus-jsqlparser-4.9")

    testImplementation "${lib.'spring-web'}"

    testImplementation "${lib.'spring-test'}"
    testImplementation "${lib.'spring-aop'}"
    testImplementation "${lib.'aspectjweaver'}"
    testImplementation "${lib."jackson"}"
    testImplementation "${lib."fastjson"}"
    testImplementation "${lib."gson"}"

    testImplementation "${lib.h2}"
    testImplementation "${lib.sqlserver}"
    testImplementation "${lib.postgresql}"
    testImplementation "${lib.oracle}"
    testImplementation "${lib.mysql}"
    testImplementation "${lib.'spring-context-support'}"
    testImplementation "${lib.'spring-jdbc'}"
    testImplementation "${lib.'slf4j-api'}"
    testImplementation "${lib.'logback-classic'}"
    testImplementation "${lib.cglib}"
    testImplementation "${lib.postgresql}"
    testImplementation "${lib.gaussdb}"
    testImplementation project(":mybatis-plus-jsqlparser-support:mybatis-plus-jsqlparser")
//    testCompile ('org.apache.phoenix:phoenix-core:5.0.0-HBase-2.0')
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/BaseDbTest.java
================================================
package com.baomidou.mybatisplus.test;

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
import com.baomidou.mybatisplus.core.MybatisXMLMapperBuilder;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.logging.slf4j.Slf4jImpl;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
import org.apache.ibatis.type.TypeReference;
import org.h2.Driver;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;

/**
 * @author miemie
 * @since 2020-06-23
 */
public abstract class BaseDbTest<T> extends TypeReference<T> {

    protected SqlSessionFactory sqlSessionFactory;
    protected Class<T> mapper;
    protected JdbcTemplate jdbcTemplate;

    @SuppressWarnings("unchecked")
    public BaseDbTest() {
        DataSource ds = dataSource();
        List<String> tableSql = tableSql();
        String tableDataSql = tableDataSql();
        String mapperXml = mapperXml();
        GlobalConfig globalConfig = globalConfig();
        List<Interceptor> interceptors = interceptors();
        Consumer<Configuration> consumer = consumer();
        mapper = (Class<T>) getRawType();

        jdbcTemplate = new JdbcTemplate(ds);
        if (CollectionUtils.isNotEmpty(tableSql)) {
            for (String sql : tableSql) {
                if (StringUtils.isNotBlank(sql)) {
                    jdbcTemplate.execute(sql);
                }
            }
        }

        if (StringUtils.isNotBlank(tableDataSql)) {
            jdbcTemplate.execute(tableDataSql);
        }
        MybatisSqlSessionFactoryBuilder builder = new MybatisSqlSessionFactoryBuilder();
        Environment environment = new Environment("test", new ManagedTransactionFactory(), ds);
        MybatisConfiguration configuration = new MybatisConfiguration(environment);
        if (consumer != null) {
            consumer.accept(configuration);
        }
        GlobalConfigUtils.setGlobalConfig(configuration, globalConfig);
        configuration.setLogImpl(Slf4jImpl.class);
        if (StringUtils.isNotBlank(mapperXml)) {
            try {
                InputStream inputStream = Resources.getResourceAsStream(mapperXml);
                MybatisXMLMapperBuilder xmlMapperBuilder = new MybatisXMLMapperBuilder(inputStream,
                    configuration, mapperXml, configuration.getSqlFragments());
                xmlMapperBuilder.parse();
            } catch (IOException e) {
                throw ExceptionUtils.mpe(e);
            }
        }
        configuration.addMapper(mapper);
        otherMapper().forEach(configuration::addMapper);

        if (CollectionUtils.isNotEmpty(interceptors)) {
            interceptors.forEach(configuration::addInterceptor);
        }
        sqlSessionFactory = builder.build(configuration);
    }

    private DataSource dataSource() {
        SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
        dataSource.setDriver(new Driver());
        dataSource.setUrl("jdbc:h2:mem:test;MODE=mysql;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
        dataSource.setUsername("sa");
        dataSource.setPassword("");
        return dataSource;
    }

    protected SqlSession sqlSession(ExecutorType type) {
        return sqlSessionFactory.openSession(type);
    }

    protected void doTest(Consumer<T> consumer) {
        try (SqlSession sqlSession = sqlSession(null)) {
            doTest(sqlSession, consumer);
        }
    }

    protected void doTestAutoCommit(Consumer<T> consumer) {
        try (SqlSession sqlSession = sqlSession(null)) {
            doTestAutoCommit(sqlSession, consumer);
        }
    }

    protected void doTest(SqlSession sqlSession, Consumer<T> consumer) {
        doMapper(sqlSession, false, consumer);
    }

    protected void doTestAutoCommit(SqlSession sqlSession, Consumer<T> consumer) {
        doMapper(sqlSession, true, consumer);
    }

    protected void doMapper(SqlSession sqlSession, boolean commit, Consumer<T> consumer) {
        T t = sqlSession.getMapper(mapper);
        consumer.accept(t);
        if (commit) {
            sqlSession.commit();
        } else {
            sqlSession.rollback();
        }
    }

    protected List<String> tableSql() {
        return null;
    }

    protected String tableDataSql() {
        return null;
    }

    protected String mapperXml() {
        return null;
    }

    protected List<Interceptor> interceptors() {
        return null;
    }

    protected GlobalConfig globalConfig() {
        return GlobalConfigUtils.defaults();
    }

    protected Consumer<Configuration> consumer() {
        return null;
    }

    protected List<Class<?>> otherMapper() {
        return Collections.emptyList();
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/DbTypeTest.java
================================================
package com.baomidou.mybatisplus.test;

import com.baomidou.mybatisplus.annotation.DbType;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;


/**
 * @author nieqiuqiu
 */
class DbTypeTest {

    @Test
    void testGetDbType() {
        Assertions.assertEquals(DbType.MYSQL, DbType.getDbType("mysql"));
        Assertions.assertEquals(DbType.MYSQL, DbType.getDbType("Mysql"));
        Assertions.assertEquals(DbType.OTHER, DbType.getDbType("other"));
        Assertions.assertEquals(DbType.OTHER, DbType.getDbType("unknown"));
    }

    @Test
    void testGaussDb(){
        Assertions.assertEquals(DbType.GAUSS, DbType.getDbType("gauss"));
        Assertions.assertEquals(DbType.GAUSS, DbType.getDbType("Gauss"));
        Assertions.assertEquals(DbType.GAUSS_DB, DbType.getDbType("gaussdb"));
        Assertions.assertEquals(DbType.GAUSS_DB, DbType.getDbType("GaussDB"));
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/MybatisTest.java
================================================
package com.baomidou.mybatisplus.test;

import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler;
import com.baomidou.mybatisplus.core.toolkit.MybatisBatchUtils;
import com.baomidou.mybatisplus.test.h2.entity.H2User;
import com.baomidou.mybatisplus.test.h2.enums.AgeEnum;
import com.baomidou.mybatisplus.test.h2.mapper.H2UserMapper;
import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;


/**
 * 原生Mybatis测试
 *
 * @author nieqiurong 2019/2/27.
 */
@ExtendWith(MockitoExtension.class)
class MybatisTest {

    private static SqlSessionFactory sqlSessionFactory;


    @BeforeAll
    public static void init() throws IOException, SQLException {
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(reader);
        DataSource dataSource = sqlSessionFactory.getConfiguration().getEnvironment().getDataSource();
        Configuration configuration = sqlSessionFactory.getConfiguration();
        TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
        /*
         *  如果是将defaultEnumTypeHandler设置成MP的处理器,
         *  请自行注册处理非MP枚举处理类的原生枚举类型
         */
        typeHandlerRegistry.register(AgeEnum.class, MybatisEnumTypeHandler.class);     //这里我举起了个栗子
        Connection connection = dataSource.getConnection();
        ScriptRunner scriptRunner = new ScriptRunner(connection);
        scriptRunner.runScript(Resources.getResourceAsReader("h2/user.ddl.sql"));
    }


    @Test
    void test() {
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)) {
            H2UserMapper mapper = sqlSession.getMapper(H2UserMapper.class);
            Assertions.assertEquals(1, mapper.myInsertWithNameVersion("test", 2));
            Assertions.assertEquals(1, mapper.insert(new H2User("test")));
            Assertions.assertEquals(2, mapper.selectCount(new QueryWrapper<H2User>().lambda().eq(H2User::getName, "test")));
            Assertions.assertEquals(2, mapper.delete(new QueryWrapper<H2User>().lambda().eq(H2User::getName, "test")));
            H2User h2User = new H2User(66L, "66666", AgeEnum.THREE, 666);
            Assertions.assertEquals(1, mapper.insert(h2User));
            h2User.setName("7777777777");
            H2User user = mapper.selectById(66L);
            Assertions.assertNotNull(user);
            Assertions.assertEquals(AgeEnum.THREE, user.getAge());
            Assertions.assertNotNull(user.getTestType());
            Assertions.assertEquals(1, mapper.updateById(new H2User(66L, "777777")));
            Assertions.assertEquals(1, mapper.deleteById(66L));
            Assertions.assertNull(mapper.selectById(66L));
        }
    }

    @Test
    void testBatchAutoCommitFalse() {
        var userList = List.of(new H2User(2000L, "测试"), new H2User(2001L, "测试"));
        MybatisBatchUtils.execute(sqlSessionFactory, userList, H2UserMapper.class.getName() + ".insert");
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            for (H2User u : userList) {
                Assertions.assertNotNull(mapper.selectById(u.getTestId()));
            }
        }
    }

    @Test
    void testBatchAutoCommitFalseOnException1() {
        Assertions.assertThrowsExactly(PersistenceException.class, () -> MybatisBatchUtils.execute(sqlSessionFactory,
            List.of(new H2User(1000L, "测试"), new H2User(1000L, "测试")), H2UserMapper.class.getName() + ".insert"));
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            Assertions.assertNull(mapper.selectById(1000L));
        }
        Assertions.assertThrowsExactly(PersistenceException.class, () -> MybatisBatchUtils.execute(sqlSessionFactory,
            List.of(new H2User(1001L, "测试"), new H2User(1001L, "测试")),
            H2UserMapper.class.getName() + ".insert", 1));
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            Assertions.assertNotNull(mapper.selectById(1001L));
        }
    }

    @Test
    void testBatchAutoCommitFalseOnException2() {
        List<H2User> userList = List.of(new H2User(1010L, "测试"), new H2User(1011L, "测试"));
        Assertions.assertThrowsExactly(RuntimeException.class, () -> MybatisBatchUtils.execute(sqlSessionFactory, userList, H2UserMapper.class.getName() + ".insert", parameter -> {
            if (parameter.getTestId() == 1011L) {
                throw new RuntimeException("出异常了");
            }
            return parameter;
        }));
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            Assertions.assertNull(mapper.selectById(1010L));
        }
    }


    @Test
    void testBatchAutoCommitTrue() {
        var userList = List.of(new H2User(3000L, "测试"), new H2User(3001L, "测试"));
        MybatisBatchUtils.execute(sqlSessionFactory, userList, true, H2UserMapper.class.getName() + ".insert");
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            for (H2User u : userList) {
                Assertions.assertNotNull(mapper.selectById(u.getTestId()));
            }
        }
    }

    @Test
    void testBatchAutoCommitTrueOnException1() {
        Assertions.assertThrowsExactly(PersistenceException.class, () -> MybatisBatchUtils.execute(sqlSessionFactory,
            List.of(new H2User(4000L, "测试"), new H2User(4000L, "测试")), true, H2UserMapper.class.getName() + ".insert"));
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            Assertions.assertNotNull(mapper.selectById(4000L));
        }
        Assertions.assertThrowsExactly(PersistenceException.class,
            () -> MybatisBatchUtils.execute(sqlSessionFactory, List.of(new H2User(4020L, "测试"), new H2User(4020L, "测试"), 1),
                true, H2UserMapper.class.getName() + ".insert"));
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            Assertions.assertNotNull(mapper.selectById(4020L));
        }
    }

    @Test
    void testBatchAutoCommitTrueOnException2() {
        Assertions.assertThrowsExactly(RuntimeException.class, () -> MybatisBatchUtils.execute(sqlSessionFactory,
            List.of(new H2User(4010L, "测试"), new H2User(4011L, "测试")), true, H2UserMapper.class.getName() + ".insert", parameter -> {
            if (parameter.getTestId() == 4011L) {
                throw new RuntimeException("出异常了");
            }
            return parameter;
        }));
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            Assertions.assertNull(mapper.selectById(4010L));
            Assertions.assertNull(mapper.selectById(4011L));
        }
        Assertions.assertThrowsExactly(RuntimeException.class, () -> MybatisBatchUtils.execute(sqlSessionFactory,
            List.of(new H2User(4015L, "测试"), new H2User(4016L, "测试")), true,
            H2UserMapper.class.getName() + ".insert", parameter -> {
            if (parameter.getTestId() == 4016L) {
                throw new RuntimeException("出异常了");
            }
            return parameter;
        },1));
        try (var sqlSession = sqlSessionFactory.openSession()) {
            var mapper = sqlSession.getMapper(H2UserMapper.class);
            Assertions.assertNotNull(mapper.selectById(4015L));
            Assertions.assertNull(mapper.selectById(4016L));
        }
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/OgnlTest.java
================================================
package com.baomidou.mybatisplus.test;

import lombok.Data;
import org.apache.ibatis.scripting.xmltags.OgnlCache;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * @author nieqiuqiu
 */
class OgnlTest {

    @Data
    private static class Bean {
        private String name;
        private Map<String, Object> properties;
    }

    /**
     * size keys keySet values isEmpty 这五个key值需要注意一下.
     *
     * @see org.apache.ibatis.ognl.MapPropertyAccessor#getProperty
     */
    @Test
    void test() {
        Map<String, Object> propertiesMap = new HashMap<>();
        propertiesMap.put("color", "yellow");
        propertiesMap.put("size", "xxxL");
        Assertions.assertEquals("yellow", OgnlCache.getValue("color", propertiesMap));
        Assertions.assertEquals(2, OgnlCache.getValue("size", propertiesMap));
        Assertions.assertFalse((Boolean) OgnlCache.getValue("isEmpty", propertiesMap));
        Assertions.assertNull(OgnlCache.getValue("['isEmpty']", propertiesMap));
        Assertions.assertEquals("xxxL", OgnlCache.getValue("['size']", propertiesMap));
        Assertions.assertEquals("yellow", OgnlCache.getValue("['color']", propertiesMap));
        Bean bean = new Bean();
        bean.setName("靓仔");
        bean.setProperties(propertiesMap);
        Assertions.assertEquals("靓仔", OgnlCache.getValue("name", bean));
        Assertions.assertEquals("靓仔", OgnlCache.getValue("['name']", bean));
        Assertions.assertEquals(2, OgnlCache.getValue("properties.size", bean));
        Assertions.assertEquals("xxxL", OgnlCache.getValue("properties['size']", bean));
        Assertions.assertEquals("yellow", OgnlCache.getValue("properties.color", bean));
        Assertions.assertEquals("yellow", OgnlCache.getValue("properties['color']", bean));
        Assertions.assertFalse((Boolean) OgnlCache.getValue("properties.isEmpty", bean));
        Assertions.assertNull(OgnlCache.getValue("properties['isEmpty']", bean));
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/PageTest.java
================================================
package com.baomidou.mybatisplus.test;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONB;
import com.alibaba.fastjson2.JSONReader;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import org.apache.ibatis.reflection.property.PropertyCopier;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnJre;
import org.junit.jupiter.api.condition.JRE;
import org.springframework.beans.BeanUtils;
import org.springframework.cglib.beans.BeanCopier;

import java.util.Collections;
import java.util.List;

/**
 * @author nieqiurong 2020/3/20.
 */
class PageTest {

    private final ObjectMapper objectMapper = new ObjectMapper();

    private final Gson gson = new Gson();

    @Test
    @EnabledOnJre(JRE.JAVA_8)
    void testCopy() {
        Page<?> page1 = new Page<>(2, 10, 100, false);
        page1.setOptimizeCountSql(false);
        page1.setOrders(Collections.singletonList(OrderItem.asc("test")));

        Page<?> page2 = new Page<>();
        PropertyCopier.copyBeanProperties(Page.class, page1, page2);
        Assertions.assertEquals(page1.getCurrent(), page2.getCurrent());
        Assertions.assertEquals(page1.getTotal(), page2.getTotal());
        Assertions.assertEquals(page1.getSize(), page2.getSize());
        Assertions.assertEquals(page1.optimizeCountSql(), page2.optimizeCountSql());
        Assertions.assertEquals(page1.searchCount(), page2.searchCount());
        Assertions.assertEquals(page1.orders().size(), page2.orders().size());

        Page<?> page3 = new Page<>();
        BeanUtils.copyProperties(page1, page3);
        Assertions.assertEquals(page1.getCurrent(), page3.getCurrent());
        Assertions.assertEquals(page1.getTotal(), page3.getTotal());
        Assertions.assertEquals(page1.getSize(), page3.getSize());
        Assertions.assertEquals(page1.optimizeCountSql(), page3.optimizeCountSql());
        Assertions.assertEquals(page1.searchCount(), page3.searchCount());
        Assertions.assertEquals(page1.orders().size(), page3.orders().size());

        Page<?> page4 = new Page<>();
        BeanCopier.create(page1.getClass(), page4.getClass(), false).copy(page1, page4, null);
        //链式的set方法会导致属性BeanCopier的拷贝方法失败  https://github.com/cglib/cglib/issues/108.
        Assertions.assertTrue(page4.optimizeCountSql());
        Assertions.assertTrue(page4.searchCount());
        Assertions.assertEquals(1, page4.getCurrent());
        Assertions.assertEquals(1, page4.orders().size());
        Assertions.assertEquals(10, page4.getSize());
    }

    @Test
    void testPageToJson() throws JsonProcessingException {
        var page = new Page<>(1, 10, 2000);
        page.setOrders(List.of(OrderItem.asc("a")));
        //page无法序列化排序等其他属性 {"records":[],"total":2000,"size":10,"current":1,"pages":200}
        assertPage(page);
    }


    @Test
    void testPageDtoToJson() throws JsonProcessingException {
        var page = new PageDTO<>(1, 10, 100);
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setOptimizeCountSql(false);
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setSearchCount(false);
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setOptimizeJoinOfCountSql(false);
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setRecords(List.of("1", "2", "3"));
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setRecords(List.of("1", "2", "3"));
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setMaxLimit(1000L);
        page.setRecords(List.of("1", "2", "3"));
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setRecords(List.of("1", "2", "3"));
        page.setCountId("123");
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setOrders(OrderItem.descs("a","b"));
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setOrders(OrderItem.ascs("a","b"));
        assertPageDto(page);

        page = new PageDTO<>(1, 10, 100);
        page.setRecords(List.of("1", "2", "3"));
        page.setOrders(OrderItem.ascs("a","b"));
        assertPageDto(page);

    }

    private void assertPage(Page<?> source) throws JsonProcessingException {
        toConvert(source, Page.class).forEach(target -> {
            Assertions.assertEquals(source.getCurrent(), target.getCurrent());
            Assertions.assertEquals(source.getTotal(), target.getTotal());
            Assertions.assertEquals(source.getSize(), target.getSize());
            Assertions.assertEquals(source.countId(), target.countId());
            Assertions.assertEquals(source.getRecords().size(), target.getRecords().size());
            Assertions.assertEquals(source.getPages(), target.getPages());
        });
    }

    private <T extends IPage<?>> List<T> toConvert(T source, Class<T> tClass) throws JsonProcessingException {
        return List.of(
            objectMapper.readValue(objectMapper.writeValueAsString(source), tClass),
            gson.fromJson(gson.toJson(source), tClass),
            JSON.parseObject(JSON.toJSONString(source), tClass),
            // dubbo 反序列化下出现问题  https://github.com/alibaba/fastjson2/issues/2734
            JSONB.parseObject(JSONB.toBytes(source), tClass,
                JSONReader.Feature.FieldBased
            ),
            com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson.JSON.toJSONString(source), tClass)
        );
    }

    private void assertPageDto(PageDTO<?> source) throws JsonProcessingException {
        toConvert(source, PageDTO.class).forEach(target -> {
            Assertions.assertEquals(source.toString(), target.toString());
            Assertions.assertEquals(source.getCurrent(), target.getCurrent());
            Assertions.assertEquals(source.getTotal(), target.getTotal());
            Assertions.assertEquals(source.getSize(), target.getSize());
            Assertions.assertEquals(source.countId(), target.getCountId());
            Assertions.assertEquals(source.countId(), target.countId());
            Assertions.assertEquals(source.searchCount(), target.isSearchCount());
            Assertions.assertEquals(source.searchCount(), target.searchCount());
            Assertions.assertEquals(source.optimizeCountSql(), target.isOptimizeCountSql());
            Assertions.assertEquals(source.optimizeCountSql(), target.optimizeCountSql());
            Assertions.assertEquals(source.optimizeJoinOfCountSql(), target.optimizeJoinOfCountSql());
            Assertions.assertEquals(source.optimizeJoinOfCountSql(), target.isOptimizeJoinOfCountSql());
            Assertions.assertEquals(source.getRecords().size(), target.getRecords().size());
            Assertions.assertEquals(source.maxLimit(), target.getMaxLimit());
            Assertions.assertEquals(source.maxLimit(), target.maxLimit());
            Assertions.assertEquals(source.getOrders().size(), target.getOrders().size());
            Assertions.assertEquals(source.getOrders().size(), target.orders().size());
            Assertions.assertEquals(source.getPages(), target.getPages());
        });
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/autoresultmap/AutoResultMapTest.java
================================================
package com.baomidou.mybatisplus.test.autoresultmap;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.test.BaseDbTest;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * @author miemie
 * @since 2020-06-23
 */
public class AutoResultMapTest extends BaseDbTest<EntityMapper> {

    @Test
    void test() {
        doTestAutoCommit(m -> m.insert(new Entity().setName("老王").setGg(new Entity.Gg("老王"))));
        doTest(m -> {
            Entity entity = m.selectOne(null);
            assertThat(entity).as("插入正常").isNotNull();
            assertThat(entity.getName()).as("名称不一致正常").isNotNull();
            assertThat(entity.getGg()).as("typeHandler正常").isNotNull();
            assertThat(entity.getGg().getName()).as("是老王").isEqualTo("老王");
        });
        doTest(m -> {
            Entity entity = new Entity().setName("老王");
            m.selectOne(Wrappers.lambdaQuery(entity).ne(Entity::getId, 1));
        });
    }

    @Override
    protected List<String> tableSql() {
        return Arrays.asList("drop table if exists entity",
            "CREATE TABLE IF NOT EXISTS entity (\n" +
                "id BIGINT(20) NOT NULL,\n" +
                "x_name VARCHAR(20) NOT NULL,\n" +
                "gg VARCHAR(255) NULL DEFAULT NULL,\n" +
                "PRIMARY KEY (id)" +
                ")");
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/autoresultmap/Entity.java
================================================
package com.baomidou.mybatisplus.test.autoresultmap;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.GsonTypeHandler;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author miemie
 * @since 2020-06-23
 */
@Data
@Accessors(chain = true)
@TableName(autoResultMap = true)
public class Entity implements Serializable {
    private static final long serialVersionUID = 6962439201546719734L;

    private Long id;

    @TableField("x_name")
    private String name;

    @TableField(typeHandler = GsonTypeHandler.class)
    private Gg gg;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Gg {
        private String name;
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/autoresultmap/EntityMapper.java
================================================
package com.baomidou.mybatisplus.test.autoresultmap;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * @author miemie
 * @since 2020-06-23
 */
public interface EntityMapper extends BaseMapper<Entity> {
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/batch/BatchTest.java
================================================
package com.baomidou.mybatisplus.test.batch;

import com.baomidou.mybatisplus.test.BaseDbTest;
import org.apache.ibatis.executor.BatchExecutor;
import org.apache.ibatis.session.ExecutorType;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * @author miemie
 * @since 2021-01-06
 */
class BatchTest extends BaseDbTest<EntityMapper> {

    @Test
    void save() {
        doTestAutoCommit(sqlSession(ExecutorType.BATCH), i -> {
            int i1 = i.insert(new Entity("老王"));
            assertThat(i1).isEqualTo(BatchExecutor.BATCH_UPDATE_RETURN_VALUE);
            int i2 = i.insert(new Entity("老李"));
            assertThat(i2).isEqualTo(BatchExecutor.BATCH_UPDATE_RETURN_VALUE);
        });

        doTest(i -> {
            assertThat(i.selectCount(null)).isEqualTo(2);
        });
    }

    @Override
    protected List<String> tableSql() {
        return Arrays.asList("drop table if exists entity", "CREATE TABLE IF NOT EXISTS entity (" +
            "id BIGINT NOT NULL," +
            "name VARCHAR(30) NULL DEFAULT NULL," +
            "PRIMARY KEY (id))");
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/batch/Entity.java
================================================
package com.baomidou.mybatisplus.test.batch;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @author miemie
 * @since 2020-06-23
 */
@Data
@NoArgsConstructor
public class Entity implements Serializable {
    private static final long serialVersionUID = 6962439201546719734L;

    private Long id;

    private String name;

    public Entity(String name) {
        this.name = name;
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/batch/EntityMapper.java
================================================
package com.baomidou.mybatisplus.test.batch;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * @author miemie
 * @since 2020-06-23
 */
public interface EntityMapper extends BaseMapper<Entity> {
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/page/PageCache.java
================================================
package com.baomidou.mybatisplus.test.cache.page;

import lombok.Data;

import java.io.Serializable;

/**
 * @author miemie
 * @since 2020-06-23
 */
@Data
public class PageCache implements Serializable {
    private static final long serialVersionUID = 6962439201546719734L;
    private Long id;
    private String name;
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/page/PageCacheMapper.java
================================================
package com.baomidou.mybatisplus.test.cache.page;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.session.ResultHandler;

/**
 * @author miemie
 * @since 2020-06-23
 */
@CacheNamespace
public interface PageCacheMapper extends BaseMapper<PageCache> {

    @Select("<script>select * from page_cache where <if test=\"tj.name\">name is not null</if></script>")
    Page<PageCache> otherPage(Page<?> page, PageCacheTest.Tj tj);

    @ResultType(PageCache.class)
    @Select("<script>select * from page_cache where <if test=\"tj.name\">name is not null</if></script>")
    void otherPageHandler(Page<?> page, PageCacheTest.Tj tj, ResultHandler handler);

    @Select("<script>select count(0) from page_cache where <if test=\"tj.name\">name is not null</if></script>")
    Long otherCount(PageCacheTest.Tj tj);
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/page/PageCacheTest.java
================================================
package com.baomidou.mybatisplus.test.cache.page;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.test.BaseDbTest;
import lombok.Data;
import org.apache.ibatis.cache.Cache;
import org.apache.ibatis.executor.result.DefaultResultHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * @author miemie
 * @since 2020-06-23
 */
class PageCacheTest extends BaseDbTest<PageCacheMapper> {

    @Test
    void page() {
        Cache cache = sqlSessionFactory.getConfiguration().getCache(PageCacheMapper.class.getName());
        assertThat(cache).as("使用 @CacheNamespace 指定了使用缓存").isNotNull();
        final long total = 5;
        final long size = 3;
        doTestAutoCommit(m -> {
            Page<PageCache> page = new Page<>(1, size);
            IPage<PageCache> result = m.selectPage(page, null);
            assertThat(page).as("对象是同一个").isEqualTo(result);
            assertThat(result.getTotal()).isEqualTo(total);
            assertThat(result.getRecords().size()).isEqualTo(size);
        });
        assertThat(cache.getSize()).as("一条count缓存一条分页缓存").isEqualTo(2);


        doTestAutoCommit(m -> {
            Page<PageCache> page = new Page<>(1, size);
            IPage<PageCache> result = m.selectPage(page, null);
            assertThat(page).isEqualTo(result);
            assertThat(result.getTotal()).isEqualTo(total);
            assertThat(result.getRecords().size()).isEqualTo(size);
        });
        assertThat(cache.getSize()).as("因为命中缓存了所以还是2条").isEqualTo(2);

        doTestAutoCommit(m -> {
            Page<PageCache> page = new Page<>(1, size);
            page.addOrder(OrderItem.asc("id"));
            IPage<PageCache> result = m.selectPage(page, null);
            assertThat(page).isEqualTo(result);
            assertThat(result.getTotal()).isEqualTo(total);
            assertThat(result.getRecords().size()).isEqualTo(size);
        });
        assertThat(cache.getSize()).as("条件不一样了,缓存变为3条").isEqualTo(3);


        doTestAutoCommit(m -> m.insert(new PageCache()));
        assertThat(cache.getSize()).as("update 操作清除了所有缓存").isEqualTo(0);


        doTestAutoCommit(m -> {
            Page<PageCache> page = new Page<>(1, size);
            IPage<PageCache> result = m.selectPage(page, null);
            assertThat(page).isEqualTo(result);
            assertThat(result.getTotal()).isEqualTo(total + 1);
            assertThat(result.getRecords().size()).isEqualTo(size);
        });
        assertThat(cache.getSize()).as("一条count缓存一条分页缓存").isEqualTo(2);

        doTest(i -> {
            Page<?> page = new Page<>(1, size);
            page.setCountId("otherCount");
            i.otherPage(page, new Tj());
        });
    }

    @Test
    void handlerTest() {
        doTest(i -> {
            Page<PageCache> page = new Page<>(1, 2);
            i.otherPageHandler(page, new Tj(), new DefaultResultHandler());
            System.out.println(page);
        });
    }

    @Override
    protected List<Interceptor> interceptors() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return Collections.singletonList(interceptor);
    }

    @Override
    protected String tableDataSql() {
        return "insert into page_cache(id,name) values(1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5');";
    }

    @Override
    protected List<String> tableSql() {
        return Arrays.asList("drop table if exists page_cache", "CREATE TABLE IF NOT EXISTS page_cache (" +
            "id BIGINT NOT NULL," +
            "name VARCHAR(30) NULL DEFAULT NULL," +
            "PRIMARY KEY (id))");
    }

    @Data
    public static class Tj {
        private boolean name = true;
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/xml/XmlCache.java
================================================
package com.baomidou.mybatisplus.test.cache.xml;

import lombok.Data;

import java.io.Serializable;

/**
 * @author miemie
 * @since 2022-03-07
 */
@Data
public class XmlCache implements Serializable {
    private static final long serialVersionUID = 907016853109330217L;
    private Long id;
    private String name;
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/xml/XmlCacheMapper.java
================================================
package com.baomidou.mybatisplus.test.cache.xml;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.CacheNamespaceRef;

/**
 * @author miemie
 * @since 2020-06-23
 */
@CacheNamespaceRef(XmlCacheMapper.class)
public interface XmlCacheMapper extends BaseMapper<XmlCache> {
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/xml/XmlCacheTest.java
================================================
package com.baomidou.mybatisplus.test.cache.xml;

import com.baomidou.mybatisplus.test.BaseDbTest;
import org.apache.ibatis.cache.Cache;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * @author miemie
 * @since 2020-06-23
 */
class XmlCacheTest extends BaseDbTest<XmlCacheMapper> {

    @Test
    void page() {
        Cache cache = sqlSessionFactory.getConfiguration().getCache(XmlCacheMapper.class.getName());
        assertThat(cache).as("使用 xml-cache 指定了使用缓存").isNotNull();
        final long total = 5;
        doTestAutoCommit(m -> {
            List<XmlCache> result = m.selectList(null);
            assertThat(result).isNotNull();
            assertThat(result.size()).isEqualTo(total);
        });
        assertThat(cache.getSize()).as("一条缓存").isEqualTo(1);
    }

    @Override
    protected String tableDataSql() {
        return "insert into xml_cache(id,name) values(1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5');";
    }

    @Override
    protected List<String> tableSql() {
        return Arrays.asList("drop table if exists xml_cache", "CREATE TABLE IF NOT EXISTS xml_cache (" +
            "id BIGINT NOT NULL," +
            "name VARCHAR(30) NULL DEFAULT NULL," +
            "PRIMARY KEY (id))");
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/chainwrapper/ChainWrapperTest.java
================================================
package com.baomidou.mybatisplus.test.chainwrapper;

import com.baomidou.mybatisplus.test.BaseDbTest;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

/**
 * @author miemie
 * @since 2020-06-23
 */
public class ChainWrapperTest extends BaseDbTest<EntityMapper> {

    @Test
    void test() {
        final String id = "id";
        Entity entity = new Entity();
        doTest(i -> i.queryChain()
            .func(j -> j.isNotNull(id))
            .func(entity.getId() != null, j -> j.eq("id", entity.getId()))// 不会npe,也不会加入sql
            .and(j -> j.isNotNull(id))
            .or(j -> j.isNotNull(id))
            .nested(j -> j.isNotNull(id))
            .not(j -> j.isNull(id))
            .list());
        doTest(i -> i.queryChain().groupBy("id").list());
        doTest(i -> i.queryChain().groupBy(List.of("id")).list());
        doTest(i -> i.queryChain().groupBy(List.of("id", "name")).list());
    }

    @Override
    protected String tableDataSql() {
        return "insert into entity(id,name) values(1,'1'),(2,'2');";
    }

    @Override
    protected List<String> tableSql() {
        return Arrays.asList("drop table if exists entity", "CREATE TABLE IF NOT EXISTS entity (" +
            "id BIGINT NOT NULL," +
            "name VARCHAR(30) NULL DEFAULT NULL," +
            "PRIMARY KEY (id))");
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/chainwrapper/ChainWrappersTest.java
================================================
package com.baomidou.mybatisplus.test.chainwrapper;

import java.util.Arrays;
import java.util.List;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers;
import com.baomidou.mybatisplus.test.BaseDbTest;

/**
 * @author VampireAchao
 * @since 2022-04-18
 */
public class ChainWrappersTest extends BaseDbTest<EntityMapper> {

    @Test
    void test() {
        final String id = "id";
        Entity entity = new Entity();
        Assertions.assertAll(() -> ChainWrappers.queryChain(entity.getClass())
            .func(j -> j.isNotNull(id))
            .func(entity.getId() != null, j -> j.eq("id", entity.getId()))// 不会npe,也不会加入sql
            .and(j -> j.isNotNull(id))
            .or(j -> j.isNotNull(id))
            .nested(j -> j.isNotNull(id))
            .not(j -> j.isNull(id))
            .list());

    }

    @Override
    protected String tableDataSql() {
        return "insert into entity(id,name) values(1,'1'),(2,'2');";
    }

    @Override
    protected List<String> tableSql() {
        return Arrays.asList("drop table if exists entity", "CREATE TABLE IF NOT EXISTS entity (" +
            "id BIGINT NOT NULL," +
            "name VARCHAR(30) NULL DEFAULT NULL," +
            "PRIMARY KEY (id))");
    }
}



================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/chainwrapper/Entity.java
================================================
package com.baomidou.mybatisplus.test.chainwrapper;

import lombok.Data;

import java.io.Serializable;

/**
 * @author miemie
 * @since 2020-06-23
 */
@Data
public class Entity implements Serializable {
    private static final long serialVersionUID = 6962439201546719734L;

    private Long id;

    private String name;
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/chainwrapper/EntityMapper.java
================================================
package com.baomidou.mybatisplus.test.chainwrapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers;

/**
 * @author miemie
 * @since 2020-06-23
 */
public interface EntityMapper extends BaseMapper<Entity> {

    default QueryChainWrapper<Entity> queryChain() {
        return ChainWrappers.queryChain(this);
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/Entity.java
================================================
package com.baomidou.mybatisplus.test.enums;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author miemie
 * @since 2020-06-23
 */
@Data
@Accessors(chain = true)
@TableName(autoResultMap = true)
public class Entity implements Serializable {
    private static final long serialVersionUID = 5094767605376915138L;

    private Long id;

    private EnumStr enumStr;

    private EnumInt enumInt;
    /**
     * 使用 EnumOrdinalTypeHandler
     */
    private EnumOrdinal enumOrdinal;
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EntityMapper.java
================================================
package com.baomidou.mybatisplus.test.enums;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * @author miemie
 * @since 2020-06-23
 */
public interface EntityMapper extends BaseMapper<Entity> {

    Entity findById(Long id);
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EnumInt.java
================================================
package com.baomidou.mybatisplus.test.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author miemie
 * @since 2020-06-23
 */
@Getter
@AllArgsConstructor
public enum EnumInt {
    ONE(1),
    TWO(2);

    @EnumValue
    private final int value;
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EnumOrdinal.java
================================================
package com.baomidou.mybatisplus.test.enums;

import lombok.Getter;

/**
 * @author miemie
 * @since 2020-07-21
 */
@Getter
public enum EnumOrdinal {
    ONE,
    TWO,
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EnumStr.java
================================================
package com.baomidou.mybatisplus.test.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author miemie
 * @since 2020-06-23
 */
@Getter
@AllArgsConstructor
public enum EnumStr {
    ONE("1"),
    TWO("2");

    @EnumValue
    private final String value;
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EnumTest.java
================================================
package com.baomidou.mybatisplus.test.enums;

import com.baomidou.mybatisplus.test.BaseDbTest;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.type.EnumOrdinalTypeHandler;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * @author miemie
 * @since 2020-06-23
 */
class EnumTest extends BaseDbTest<EntityMapper> {

    @Test
    void test() {
        Long id = 1L;
        doTestAutoCommit(m -> {
            Entity entity = new Entity().setId(id).setEnumInt(EnumInt.ONE).setEnumStr(EnumStr.TWO).setEnumOrdinal(EnumOrdinal.TWO);
            int insert = m.insert(entity);
            assertThat(insert).as("插入成功").isEqualTo(1);
        });

        doTestAutoCommit(m -> {
            Entity entity = m.selectById(id);
            assertThat(entity).as("查出刚刚插入的数据").isNotNull();
            assertThat(entity.getEnumInt()).as("枚举正确").isEqualTo(EnumInt.ONE);
            assertThat(entity.getEnumStr()).as("枚举正确").isEqualTo(EnumStr.TWO);
            assertThat(entity.getEnumOrdinal()).as("枚举正确").isEqualTo(EnumOrdinal.TWO);
            entity.setEnumOrdinal(EnumOrdinal.ONE);
            m.updateById(entity);
        });

        doTest(m -> {
            Entity entity = m.findById(id);
            assertThat(entity).as("查出刚刚插入的数据").isNotNull();
            assertThat(entity.getEnumInt()).as("枚举正确").isEqualTo(EnumInt.ONE);
            assertThat(entity.getEnumStr()).as("枚举正确").isEqualTo(EnumStr.TWO);
            assertThat(entity.getEnumOrdinal()).as("枚举正确").isEqualTo(EnumOrdinal.ONE);
        });
    }

    @Override
    protected Consumer<Configuration> consumer() {
        return i -> i.setDefaultEnumTypeHandler(EnumOrdinalTypeHandler.class);
    }

    @Override
    protected List<String> tableSql() {
        return Arrays.asList("drop table if exists entity",
            "CREATE TABLE IF NOT EXISTS entity (\n" +
                "id BIGINT(20) NOT NULL,\n" +
                "enum_int integer NULL DEFAULT NULL,\n" +
                "enum_str VARCHAR(30) NULL DEFAULT NULL,\n" +
                "enum_ordinal integer NULL DEFAULT NULL,\n" +
                "PRIMARY KEY (id)" +
                ")");
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/fill/FillEntity.java
================================================
package com.baomidou.mybatisplus.test.fill;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
 * @author nieqiurong 2023年9月29日
 */
@Data
@TableName(value = "t_fill")
public class FillEntity {

    private Long id;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String name;

    private transient int seq;

    public FillEntity() {
    }

    public FillEntity(Long id) {
        this.id = id;
    }

    public FillEntity(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    void addSeq(){
        this.seq ++;
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/fill/FillMapper.java
================================================
package com.baomidou.mybatisplus.test.fill;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author nieqiurong 2023年9月29日
 */
public interface FillMapper extends BaseMapper<FillEntity> {

    void insertBatch1(List<FillEntity> entityList);

    void insertBatch2(@Param("mpList") List<FillEntity> entityList);

    void insertBatch3(@Param("mybatisList") List<FillEntity> entityList);

    void insertBatch4(@Param("list") List<FillEntity> entityList, String a, String b, String c);

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/fill/FillTest.java
================================================
package com.baomidou.mybatisplus.test.fill;

import com.baomidou.mybatisplus.core.batch.MybatisBatch;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.toolkit.MybatisBatchUtils;
import com.baomidou.mybatisplus.test.BaseDbTest;
import org.apache.ibatis.reflection.MetaObject;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author nieqiurong 2023年9月29日
 */
public class FillTest extends BaseDbTest<FillMapper> {

    @Test
    void testInsert() {
        doTest(mapper -> {
            var entity = new FillEntity();
            mapper.insert(entity);
            assertEntity(entity, "insertAdmin", 1);
        });
    }

    @Test
    void testInsertBatch1() {
        doTest(mapper -> {
            var entityList = new ArrayList<>(Arrays.asList(new FillEntity(), new FillEntity()));
            mapper.insertBatch1(entityList);
            for (FillEntity entity : entityList) {
                assertEntity(entity, "insertAdmin", 1);
            }
        });
    }

    @Test
    void testInsertBatch2() {
        doTest(mapper -> {
            var entityList = new ArrayList<>(Arrays.asList(new FillEntity(), new FillEntity()));
            mapper.insertBatch2(entityList);
            for (FillEntity entity : entityList) {
                assertEntity(entity, "insertAdmin", 1);
            }
        });
    }

    @Test
    void testInsertBatch3() {
        doTest(mapper -> {
            var entityList = new ArrayList<>(Arrays.asList(new FillEntity(), new FillEntity()));
            mapper.insertBatch3(entityList);
            for (FillEntity entity : entityList) {
                assertEntity(entity, "insertAdmin", 1);
            }
        });
    }

    @Test
    void testInsertBatch4() {
        doTest(mapper -> {
            var entityList = new ArrayList<>(Arrays.asList(new FillEntity(), new FillEntity()));
            mapper.insertBatch4(entityList, "", "", "");
            for (FillEntity entity : entityList) {
                assertEntity(entity, "insertAdmin", 1);
            }
        });
    }

    @Test
    void testBatch() {
        var entityList = new ArrayList<>(Arrays.asList(new FillEntity(), new FillEntity()));
        var method = new MybatisBatch.Method<FillEntity>(FillMapper.class);
        MybatisBatchUtils.execute(sqlSessionFactory, entityList, method.insert());
        for (FillEntity entity : entityList) {
            assertEntity(entity, "insertAdmin", 1);
        }
    }

    void assertEntity(FillEntity entity, String name, int seq) {
        Assertions.assertEquals(entity.getName(), name);
        Assertions.assertEquals(entity.getSeq(), seq);
    }

    @Override
    protected GlobalConfig globalConfig() {
        GlobalConfig globalConfig = super.globalConfig();
        globalConfig.setMetaObjectHandler(new MetaObjectHandler() {
            @Override
            public void insertFill(MetaObject metaObject) {
                var entity = (FillEntity) metaObject.getOriginalObject();
                entity.setName("insertAdmin");
                entity.addSeq();
            }

            @Override
            public void updateFill(MetaObject metaObject) {
                var entity = (FillEntity) metaObject.getOriginalObject();
                entity.setName("updateAdmin");
                entity.addSeq();

            }
        });
        return globalConfig;
    }

    @Override
    protected List<String> tableSql() {
        return Arrays.asList("drop table if exists t_fill", "CREATE TABLE IF NOT EXISTS t_fill (" +
            "id BIGINT NOT NULL," +
            "name VARCHAR(30) NULL DEFAULT NULL," +
            "PRIMARY KEY (id))");
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/gaussdb/Demo.java
================================================
package com.baomidou.mybatisplus.test.gaussdb;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.ToString;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * @author nieqiurong
 * @since 3.5.13
 */
@Data
@ToString
public class Demo {

    @TableId(type = IdType.AUTO)
    private Long id;

    private String name;

    private Integer age;

    private LocalDate birthday;

    private LocalDateTime createTime;
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/gaussdb/DemoMapper.java
================================================
package com.baomidou.mybatisplus.test.gaussdb;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author nieqiurong
 * @since 3.5.13
 */
@Mapper
public interface DemoMapper extends BaseMapper<Demo> {

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/gaussdb/GaussdbTest.java
================================================
package com.baomidou.mybatisplus.test.gaussdb;

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.huawei.gaussdb.jdbc.Driver;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.jdbc.SqlRunner;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.sql.DataSource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * @author nieqiurong
 * @since 3.5.13
 */
public class GaussdbTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(GaussdbTest.class);

    private static final String CREATE_TABLE = """

        DROP TABLE IF EXISTS "demo";

        CREATE TABLE "demo" (
          "id" bigserial,
          "name" varchar(255),
          "age" int4,
          "birthday" date,
          "create_time" timestamp,
          PRIMARY KEY ("id")
        )
        ;

        COMMENT ON COLUMN "demo"."id" IS '主键';

        COMMENT ON COLUMN "demo"."name" IS '姓名';

        COMMENT ON COLUMN "demo"."age" IS '年龄';

        COMMENT ON COLUMN "demo"."birthday" IS '生日';

        COMMENT ON COLUMN "demo"."create_time" IS '创建时间';
        """;

    private static SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.addMapper(DemoMapper.class);
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        sqlSessionFactory.setPlugins(mybatisPlusInterceptor);
        sqlSessionFactory.setConfiguration(configuration);
        return sqlSessionFactory.getObject();
    }

    private static Stream<DbConfig> dataSource() {
        String host = "127.0.0.1";
        int port = 8000;
        String user = "root";
        String dbPassword = "123456";
        return Stream.of(
            new DbConfig("mysql", new PooledDataSource(Driver.class.getName(), "jdbc:gaussdb://" + host + ":" + port + "/test_mysql", user, dbPassword)),
            new DbConfig("oracle", new PooledDataSource(Driver.class.getName(), "jdbc:gaussdb://" + host + ":" + port + "/test_oracle", user, dbPassword))
        );
    }

    @Data
    @AllArgsConstructor
    private static class DbConfig {

        private final String name;

        private final DataSource dataSource;

        @Override
        public String toString() {
            return name;
        }

    }


    @ParameterizedTest
    @MethodSource("dataSource")
    void test(DbConfig dbConfig) throws Exception {
        DataSource dataSource = dbConfig.getDataSource();
        new SqlRunner(dataSource.getConnection()).run(CREATE_TABLE);
        try (SqlSession sqlSession = sqlSessionFactory(dataSource).openSession(true)) {
            DemoMapper demoMapper = sqlSession.getMapper(DemoMapper.class);
            LOGGER.info("delete all data:{}", demoMapper.delete(Wrappers.emptyWrapper()));

            Demo demo = new Demo();
            demo.setAge(12);
            demo.setName("12岁的用户");
            demo.setBirthday(LocalDate.of(2013, 1, 1));
            demo.setCreateTime(LocalDateTime.now());
            LOGGER.info("insert data:{}", demoMapper.insert(demo));

            Demo selectDemo = demoMapper.selectById(demo.getId());
            Assertions.assertNotNull(selectDemo);
            LOGGER.info("select data:{}", selectDemo);

            Demo updateDemo = new Demo();
            updateDemo.setAge(23);
            updateDemo.setId(selectDemo.getId());
            Assertions.assertEquals(1, demoMapper.updateById(updateDemo));

            LOGGER.info("delete by id:{}", demoMapper.deleteById(demo));

            List<Demo> demoList = new ArrayList<>();
            for (int i = 0; i < 50; i++) {
                demo = new Demo();
                demo.setAge(1);
                demo.setName("demo" + (i + 1));
                demo.setBirthday(LocalDate.of(2020, 12, 1));
                demo.setCreateTime(LocalDateTime.now());
                demoList.add(demo);
            }
            LOGGER.info("insert data on batch:{}", demoMapper.insert(demoList));

            Long count = demoMapper.selectCount(Wrappers.emptyWrapper());
            LOGGER.info("select count:{}", count);
            Assertions.assertEquals(50L, count);

            Page<Demo> page = demoMapper.selectPage(new Page<>(1, 10), Wrappers.emptyWrapper());
            Assertions.assertEquals(50, page.getTotal());
            Assertions.assertEquals(10, page.getSize());
            for (Demo record : page.getRecords()) {
                LOGGER.info("record:{}", record);
            }
            LOGGER.info("next page .");
            page = demoMapper.selectPage(new Page<>(2, 10), Wrappers.emptyWrapper());
            Assertions.assertEquals(50, page.getTotal());
            Assertions.assertEquals(10, page.getSize());
            for (Demo record : page.getRecords()) {
                LOGGER.info("record:{}", record);
            }
        }
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/ActiveRecordTest.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.test.h2.entity.H2Student;
import com.baomidou.mybatisplus.test.h2.service.IH2StudentService;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;


/**
 * ActiveRecord 测试
 *
 * @author nieqiurong 2018/7/27.
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:h2/spring-test-h2.xml"})
class ActiveRecordTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(ActiveRecordTest.class);

    @Autowired
    private IH2StudentService h2StudentService;

    @Test
    @Transactional
    @Order(1)
    void testInsert() {
        H2Student student = new H2Student(3L, "测试学生", 2);
        assertThat(student.insert()).isTrue();
        System.out.println(student.getId());
        assertThat(student.getId()).isEqualTo(3);
        student.setId(null);
        assertThat(student.insert()).isTrue();
        System.out.println(student.getId());
    }

    @Test
    @Order(2)
    void testUpdate() {
        H2Student student = new H2Student(1L, "Tom长大了", 2);
        Assertions.assertTrue(student.updateById());
        student.setName("不听话的学生");
        Assertions.assertTrue(student.update(new QueryWrapper<H2Student>().gt("id", 10)));
    }

    @Test
    @Order(3)
    void testSelect() {
        H2Student student = new H2Student();
        student.setId(1L);
        Assertions.assertNotNull(student.selectById());
        Assertions.assertNotNull(student.selectById(1L));
    }

    @Test
    @Order(4)
    void testSelectList() {
        H2Student student = new H2Student();
        List<H2Student> students = student.selectList(new QueryWrapper<>(student));
        students.forEach($this -> LOGGER.info("用户信息:{}", $this));
        Assertions.assertTrue(students.size() > 1);
    }

    @Test
    @Order(5)
    void testSelectPage() {
        IPage<H2Student> page = new Page<>(1, 10);
        H2Student student = new H2Student();
        page = student.selectPage(page, new QueryWrapper<>(student));
        List<H2Student> records = page.getRecords();
        LOGGER.info("总数:{}", page.getTotal());
        records.forEach($this -> LOGGER.info("用户信息:{}", $this));
        Assertions.assertTrue(page.getTotal() > 1);
    }

    @Test
    @Order(6)
    void testSelectCount() {
        H2Student student = new H2Student();
        long count = new H2Student().selectCount(new QueryWrapper<>(student));
        LOGGER.info("count:{}", count);
        Assertions.assertTrue(count > 1);
    }

    @Test
    @Order(7)
    void testInsertOrUpdate() {
        H2Student student = new H2Student(2L, "Jerry也长大了", 2);
        Assertions.assertTrue(student.insertOrUpdate());
        student.setId(null);
        Assertions.assertTrue(student.insertOrUpdate());
    }

    @Test
    @Order(8)
    void testSelectAll() {
        H2Student student = new H2Student();
        List<H2Student> students = student.selectAll();
        Assertions.assertNotNull(students);
        students.forEach($this -> LOGGER.info("用户信息:{}", $this));
    }

    @Test
    @Order(9)
    void testSelectOne() {
        H2Student student = new H2Student();
        Assertions.assertNotNull(student.selectOne(new QueryWrapper<>()));
    }

    @Test
    @Order(10)
    void testTransactional() {
        try {
            h2StudentService.testTransactional();
        } catch (MybatisPlusException e) {
            List<H2Student> students = new H2Student().selectList(new QueryWrapper<H2Student>().lambda().like(H2Student::getName, "tx"));
            Assertions.assertTrue(CollectionUtils.isEmpty(students));
        }
    }

    @Test
    @Order(11)
    void testDelete() {
        H2Student student = new H2Student();
        student.setId(2L);
        Assertions.assertTrue(student.deleteById());
        Assertions.assertTrue(student.deleteById(12L));
        Assertions.assertTrue(student.delete(new QueryWrapper<H2Student>().gt("id", 10)));
    }

    @Test
    @Order(12)
    void sqlCommentTest() {
        String name = "name1", nameNew = "name1New";
        H2Student student = new H2Student().setName(name).setAge(2);
        student.delete(new QueryWrapper<H2Student>().comment("deleteAllStu"));
        Assertions.assertTrue(student.insert());
        boolean updated = new H2Student().setName(nameNew).update(new QueryWrapper<H2Student>().comment("updateStuName1").lambda()
            .eq(H2Student::getName, name)
        );
        Assertions.assertTrue(updated);
        H2Student h2Student = student.selectOne(
            new QueryWrapper<H2Student>().lambda().comment("getStuByUniqueName")
                .eq(H2Student::getName, nameNew)
        );
        Assertions.assertNotNull(h2Student);
        LambdaQueryWrapper<H2Student> queryWrapper = new QueryWrapper<H2Student>().lambda().ge(H2Student::getAge, 1);
        long userCount = student.selectCount(queryWrapper.comment("getStuCount"));
        Assertions.assertEquals(1, userCount);
        List<H2Student> h2StudentList = student.selectList(queryWrapper.comment("getStuList"));
        Assertions.assertEquals(1, h2StudentList.size());
        IPage<H2Student> h2StudentIPage = student.selectPage(new Page<>(1, 10), queryWrapper.comment("getStuPage"));
        Assertions.assertEquals(1, h2StudentIPage.getRecords().size());
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/BaseTest.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.test.h2.entity.H2User;
import com.baomidou.mybatisplus.test.h2.enums.AgeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.annotation.DirtiesContext;

import java.util.List;

@DirtiesContext
public class BaseTest {

    @Autowired
    protected JdbcTemplate jdbcTemplate;

    protected static final String NQQ = "聂秋秋";

    protected void log(Object object) {
        System.out.println(object);
    }

    protected List<H2User> queryByName(String name) {
        String sql = "select TEST_ID, NAME, AGE,LAST_UPDATED_DT from h2user ";
        if (name != null) {
            sql += "where name='" + name + "'";
        }
        return jdbcTemplate.query(sql, (rs, rowNum) -> {
            H2User u = new H2User();
            u.setTestId(rs.getLong("TEST_ID"));
            u.setName(rs.getString("NAME"));
            u.setAge(AgeEnum.parseValue(rs.getInt("AGE")));
            u.setLastUpdatedDt(rs.getDate("LAST_UPDATED_DT"));
            return u;
        });
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/CustomFillTest.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.test.h2.customfill.mapper.TestModelMapper;
import com.baomidou.mybatisplus.test.h2.customfill.model.TestModel;
import org.apache.ibatis.builder.MapperBuilderAssistant;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:h2/spring-custom-fill-test-h2.xml"})
public class CustomFillTest {

    @Autowired
    private TestModelMapper testModelMapper;

    @BeforeAll
    public static void before(){
        TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), TestModel.class);
    }

    @Test
    public void testInsert() {

        TestModel testModel = new TestModel();
        testModelMapper.insert(testModel);
        Assertions.assertNotNull(testModel.getA());
        Assertions.assertNotNull(testModel.getB());
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/FillPerformanceTest.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.test.h2.fillperformance.model.PerformanceModel;
import com.baomidou.mybatisplus.test.h2.fillperformance.service.IPerformanceModelService;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import java.util.ArrayList;
import java.util.List;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:h2/spring-fill-performance-h2.xml"})
class FillPerformanceTest {

    @Autowired
    private IPerformanceModelService performanceModelService;

    @Test
    void test(){
        List<PerformanceModel> list = new ArrayList<>();
        for (int i = 0; i < 5000; i++) {
            list.add(new PerformanceModel());
        }
        System.out.println("-------------------------");
        long start = System.currentTimeMillis();
        performanceModelService.saveBatch(list);
        long end = System.currentTimeMillis();
        System.out.println(end - start);
        System.out.println("-------------------------");
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2Delete1Eq1Test.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.test.h2.entity.H2Student;
import com.baomidou.mybatisplus.test.h2.entity.H2User;
import com.baomidou.mybatisplus.test.h2.enums.AgeEnum;
import com.baomidou.mybatisplus.test.h2.mapper.H2StudentMapper;
import com.baomidou.mybatisplus.test.h2.mapper.H2UserMapper;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import java.util.List;

/**
 * Mybatis Plus H2 Junit Test
 *
 * @author hubin
 * @since 2018-06-05
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:h2/spring-test-h2.xml"})
class H2Delete1Eq1Test extends BaseTest {

    @Autowired
    protected H2UserMapper logicDeleteMapper;
    @Autowired
    protected H2StudentMapper defaultMapper;

    @Test
    @Order(1)
    void crudTest() {
        for (int i = 0; i < 10; i++) {
            logicDeleteMapper.insert(new H2User("mp" + i, AgeEnum.ONE));
        }
        log(logicDeleteMapper.selectList(new QueryWrapper<H2User>().orderByAsc("`desc`")));
        log(logicDeleteMapper.selectOne(new QueryWrapper<H2User>().last("limit 1")));

        H2User h2User = new H2User();
        h2User.setDesc("1");
        h2User.setName("2");
        log(logicDeleteMapper.selectList(new QueryWrapper<>(h2User).orderByAsc("name")));

        for (long i = 30; i < 50L; i++) {
            defaultMapper.insert(new H2Student(i, "Tom长大了", 1));
        }
        log(logicDeleteMapper.selectList(new QueryWrapper<>(h2User).eq("name", "2").orderByAsc("name")));
        log(defaultMapper.selectList(new QueryWrapper<H2Student>().orderByAsc("id")));
        log(defaultMapper.selectOne(new QueryWrapper<H2Student>().last("limit 1")));

        H2Student h2Student = new H2Student();
        h2Student.setId(1L);
        h2Student.setAge(2);
        log(defaultMapper.selectList(new QueryWrapper<>(h2Student).orderByAsc("id")));
    }

    @Test
    @Order(Integer.MAX_VALUE)
    void delete() {
        logicDeleteMapper.delete(new QueryWrapper<>());
        defaultMapper.delete(new QueryWrapper<>());
        Assertions.assertEquals(0, logicDeleteMapper.selectCount(new QueryWrapper<>()));
        List<H2User> userList = queryByName(null);
        System.out.println(userList.size());
        Assertions.assertNotEquals(0, userList.size());
    }
}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2KeyGeneratorTest.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.test.h2.keygenerator.mapper.*;
import com.baomidou.mybatisplus.test.h2.keygenerator.model.*;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:h2/spring-keygenerator-h2.xml"})
class H2KeyGeneratorTest {

    @Autowired
    private KeyGeneratorMapper keyGeneratorMapper;

    @Autowired
    private LongKeyGeneratorMapper longKeyGeneratorMapper;

    @Autowired
    private StringKeyGeneratorMapper stringKeyGeneratorMapper;

    @Autowired
    private ExtendKeyGeneratorMapper extendKeyGeneratorMapper;

    @Autowired
    private IntegerKeyGeneratorMapper integerKeyGeneratorMapper;

    @Test
    void test() {
        KeyGeneratorModel keyGeneratorModel = new KeyGeneratorModel();
        keyGeneratorModel.setName("我举起了咩咩");
        keyGeneratorMapper.insert(keyGeneratorModel);
        Assertions.assertNotNull(keyGeneratorModel.getUid());
        Assertions.assertEquals(1L, keyGeneratorModel.getUid());

        LongKeyGeneratorModel longKeyGeneratorModel = new LongKeyGeneratorModel();
        longKeyGeneratorModel.setName("我举起了个栗子");
        longKeyGeneratorMapper.insert(longKeyGeneratorModel);
        Assertions.assertNotNull(longKeyGeneratorModel.getId());
        Assertions.assertEquals(2L, longKeyGeneratorModel.getId());

        StringKeyGeneratorModel stringKeyGeneratorModel = new StringKeyGeneratorModel();
        stringKeyGeneratorModel.setName("我举起了个锤子");
        stringKeyGeneratorMapper.insert(stringKeyGeneratorModel);
        Assertions.assertNotNull(stringKeyGeneratorModel.getId());
        Assertions.assertEquals("3", stringKeyGeneratorModel.getId());

        ExtendKeyGeneratorModel extendKeyGeneratorModel = new ExtendKeyGeneratorModel();
        extendKeyGeneratorModel.setName("我举起了句号");
        extendKeyGeneratorMapper.insert(extendKeyGeneratorModel);
        Assertions.assertNotNull(extendKeyGeneratorModel.getUid());
        Assertions.assertEquals(4L, extendKeyGeneratorModel.getUid());

        //这个受限数据库,如果返回是long的话,那就救不了.
        IntegerKeyGeneratorModel integerKeyGeneratorModel = new IntegerKeyGeneratorModel();
        integerKeyGeneratorModel.setName("我举起了K神");
        integerKeyGeneratorMapper.insert(integerKeyGeneratorModel);
        Assertions.assertNotNull(integerKeyGeneratorModel.getUid());
        Assertions.assertEquals(5, integerKeyGeneratorModel.getUid());
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2LogicDeleteTest.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.test.h2.entity.H2User;
import com.baomidou.mybatisplus.test.h2.entity.H2UserLogicDelete;
import com.baomidou.mybatisplus.test.h2.enums.AgeEnum;
import com.baomidou.mybatisplus.test.h2.mapper.H2UserLogicDeleteMapper;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import java.util.List;

/**
 * Mybatis Plus H2 Junit Test
 *
 * @author hubin
 * @since 2018-06-05
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:h2/spring-logic-delete-h2.xml"})
class H2LogicDeleteTest extends BaseTest {

    @Autowired
    protected H2UserLogicDeleteMapper logicDeleteMapper;

    @Test
    @Order(1)
    void crudTest() {
        String name = "LogicDelete4Date";
        H2UserLogicDelete user = new H2UserLogicDelete();
        user.setAge(AgeEnum.ONE);
        user.setName(name);
        logicDeleteMapper.insert(user);
        Assertions.assertNotNull(user.getTestId(), "id should not be null");
        Assertions.assertNull(user.getLastUpdatedDt());

        logicDeleteMapper.deleteById(user.getTestId());

        List<H2User> userList = queryByName(name);
        Assertions.assertTrue(userList!=null && !userList.isEmpty());
        Assertions.assertNotNull(userList.get(0).getLastUpdatedDt(),"lastUpdateDt should not be null after logic delete");

    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2MetaObjectHandler.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;

import java.sql.Timestamp;
import java.util.Date;


/**
 * 测试,自定义元对象字段填充控制器,实现公共字段自动写入
 *
 * @author hubin
 * @since 2017-06-25
 */
public class H2MetaObjectHandler implements MetaObjectHandler {

    /**
     * 测试 user 表 name 字段为空自动填充
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // System.out.println("*************************");
        // System.out.println("insert fill");
        // System.out.println("*************************");

        // 测试下划线
        Object testType = this.getFieldValByName("testType", metaObject);
        // System.out.println("testType=" + testType);
        if (testType == null) {
            //测试实体没有的字段,配置在公共填充,不应该set到实体里面
            this.strictInsertFill(metaObject, "testType1", Integer.class, 3);
            this.strictInsertFill(metaObject, "testType", Integer.class, 3);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // System.out.println("*************************");
        // System.out.println("update fill");
        // System.out.println("*************************");
        //测试实体没有的字段,配置在公共填充,不应该set到实体里面
        this.strictUpdateFill(metaObject, "lastUpdatedDt1", Date.class, new Timestamp(System.currentTimeMillis()));
        this.strictUpdateFill(metaObject, "lastUpdatedDt", Date.class, new Timestamp(System.currentTimeMillis()));
    }
}



================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2StudentMapperTest.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.test.h2.entity.H2Student;
import com.baomidou.mybatisplus.test.h2.enums.GenderEnum;
import com.baomidou.mybatisplus.test.h2.enums.GradeEnum;
import com.baomidou.mybatisplus.test.h2.mapper.H2StudentMapper;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * Mybatis Plus H2 Junit Test
 *
 * @author hubin
 * @since 2018-06-05
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:h2/spring-test-h2.xml"})
class H2StudentMapperTest extends BaseTest {

    @Autowired
    protected H2StudentMapper studentMapper;

    @Test
    @Order(1)
    void crudTest() {
//        H2Student stu = new H2Student();
//        stu.setGrade(GradeEnum.HIGH);
//        studentMapper.update(stu, null);
        H2Student student = new H2Student();
        Long id = 10086L;
        student.setId(id);
        student.setAge(188);
        student.setGender(GenderEnum.MALE);
        student.setGrade(GradeEnum.PRIMARY);
        studentMapper.insert(student);

        List<H2Student> list = studentMapper.selectList(new QueryWrapper<>());
        for (H2Student s : list) {
            System.out.println(s.getGrade());
            if (Objects.equals(s.getId(), id)) {
                Assert.notNull(s.getGrade(), "id=" + id + " should have grade");
                Assert.notNull(s.getGender(), "id=" + id + " should have gender");
            }
        }
        H2Student updateStu = new H2Student();
        updateStu.setId(15L);
        updateStu.setGrade(GradeEnum.HIGH);
        updateStu.setGender(GenderEnum.FEMALE);
        Assert.isTrue(studentMapper.updateById(updateStu) == 1, "should update success");
        updateStu = studentMapper.selectById(15L);
        Assert.notNull(updateStu.getGrade(), "grade should updated");
        Assert.notNull(updateStu.getGender(), "gender should updated");

    }

    @Test
    @Order(Integer.MAX_VALUE)
    void pageCountZeroTest() {
        IPage<H2Student> page = studentMapper.selectPage(new Page<>(), Wrappers.<H2Student>query().eq("name", "无"));
        if (null != page) {
            System.out.println("total: " + page.getTotal());
        }
    }

    /**
     * group 或者 order 测试
     */
    @Test
    void groupByOrderBy() {
        LambdaQueryWrapper<H2Student> wrapper = Wrappers.<H2Student>lambdaQuery().groupBy(H2Student::getAge);
        LambdaQueryWrapper<H2Student> wrapper2 = Wrappers.<H2Student>lambdaQuery().orderByAsc(H2Student::getAge);
        System.out.println(wrapper.getSqlSegment());
        Assertions.assertEquals(" GROUP BY age", wrapper.getSqlSegment());
        Assertions.assertEquals(" ORDER BY age ASC", wrapper2.getSqlSegment());
    }

    @Test
    void testDeleteByIdWithEntity() {
        H2Student h2Student = new H2Student(111L, "测试根据实体删除", 12);
        studentMapper.insert(h2Student);
        Assertions.assertEquals(1, studentMapper.deleteById(h2Student));
    }

    @Test
    void testIn() {
        LambdaQueryWrapper<H2Student> wrapper = Wrappers.<H2Student>lambdaQuery().in(H2Student::getName, Arrays.asList("a", "b"));
        studentMapper.selectList(wrapper);
    }

}


================================================
FILE: mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserMapperTest.java
================================================
package com.baomidou.mybatisplus.test.h2;

import com.baomidou.mybatisplus.core.batch.MybatisBatch;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.MybatisBatchUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.baomidou.mybatisplus.test.h2.entity.H2User;
import com.baomidou.mybatisplus.test.h2.entity.SuperEntity;
import com.baomidou.mybatisplus.test.h2.enums.AgeEnum;
import com.baomidou.mybatisplus.test.h2.mapper.H2UserMapper;
import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.executor.BatchResult;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;

import static java.util.stream.Collectors.toList;

/**
 * Mybatis Plus H2 Junit Test
 *
 * @author hubin
 * @since 2018-06-05
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:h2/spring-test-h2.xml"})
class H2UserMapperTest extends BaseTest {

    @Autowired
    protected H2UserMapper userMapper;

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    @Autowired
    private TransactionTemplate transactionTemplate;

    @Test
    void testMapperSaveBatch() {
        var list = List.of(new H2User("秋秋1"), new H2User("秋秋2"));
        List<BatchResult> batchResults = userMapper.insert(list);
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        Assertions.assertEquals(2, batchResults.getFirst().getUpdateCounts().length);
    }

    @Test
    void testMapperUpdateBatch() {
        var list = List.of(new H2User("秋秋1"), new H2User("秋秋2"));
        userMapper.insert(list);
        for (H2User h2User : list) {
            h2User.setName("test" + 1);
        }
        List<BatchResult> batchResults = userMapper.updateById(list);
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        Assertions.assertEquals(2, batchResults.getFirst().getUpdateCounts().length);
    }


    @Test
    void testBatchTransaction() {
        List<H2User> h2UserList = Arrays.asList(new H2User(1000036L, "测试12323232"), new H2User(10000367L, "测试3323232"));
        try {
            transactionTemplate.execute((TransactionCallback<List<BatchResult>>) status -> {
                MybatisBatch.Method<H2User> mapperMethod = new MybatisBatch.Method<>(H2UserMapper.class);
                // 执行批量插入
                MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, mapperMethod.insert());
                throw new RuntimeException("出错了");
            });
        } catch (Exception exception) {
            for (H2User h2User : h2UserList) {
                Assertions.assertNull(userMapper.selectById(h2User.getTestId()));
            }
        }
        transactionTemplate.execute(status -> {
            MybatisBatch.Method<H2User> mapperMethod = new MybatisBatch.Method<>(H2UserMapper.class);
            // 执行批量插入
            return MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, mapperMethod.insert());
        });
        for (H2User h2User : h2UserList) {
            Assertions.assertNotNull(userMapper.selectById(h2User.getTestId()));
        }
    }

    @Test
    void testInsertBatch() {
        int batchSize = 1000;
        List<H2User> h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User("test" + i));
        }
        MybatisBatch.Method<H2User> mapperMethod = new MybatisBatch.Method<>(H2UserMapper.class);
        // 执行批量插入
        List<BatchResult> batchResults = MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, mapperMethod.insert());
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        int[] updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);
        List<Long> ids = Arrays.asList(120000L, 120001L);
        MybatisBatch.Method<H2User> method = new MybatisBatch.Method<>(H2UserMapper.class);
        Assertions.assertTrue(SqlHelper.retBool(MybatisBatchUtils.execute(sqlSessionFactory, ids, method.insert(H2User::ofId))));
    }

    @Test
    void testInsertBatchByCustomMethod() {
        int batchSize = 1000;
        List<BatchResult> batchResults;
        int[] updateCounts;
        List<H2User> h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User("myInsertWithoutParam" + i));
        }
        MybatisBatch.Method<H2User> method = new MybatisBatch.Method<>(H2UserMapper.class);
        // 执行批量插入
        batchResults = MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, method.get("myInsertWithoutParam"));
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);
        h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User("myInsertWithParam" + i));
        }
        // 执行批量插入
        batchResults = MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, method.get("myInsertWithParam", parameter -> Map.of("user1", parameter)));
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);
        h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User("myInsertWithParam" + i));
        }
        batchResults = MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, method.get("myInsertWithParam", parameter -> Map.of("user1", parameter)));
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);
    }

    @Test
    void testDeleteByIds() {
        List<BatchResult> batchResults;
        int batchSize = 1000;
        List<Long> ids = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            ids.add((long) 7120000 + i);
        }
        List<H2User> userList = new ArrayList<>();
        MybatisBatch.Method<H2User> method = new MybatisBatch.Method<>(H2UserMapper.class);
        // 转换成实体进行逻辑删除
        batchResults = MybatisBatchUtils.execute(sqlSessionFactory, ids, method.deleteById(id -> {
            H2User h2User = H2User.ofId(id);
            userList.add(h2User);
            return h2User;
        }));
        Assertions.assertFalse(SqlHelper.retBool(batchResults));
        int[] updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);
        for (H2User h2User : userList) {
            Assertions.assertNotNull(h2User.getLastUpdatedDt());
        }
        // 不能走填充
        batchResults = MybatisBatchUtils.execute(sqlSessionFactory, ids, method.deleteById());
        Assertions.assertFalse(SqlHelper.retBool(batchResults));
        updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);
    }

    @Test
    void testUpdateBatch() {
        int batchSize = 1000;
        List<H2User> h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User(Long.valueOf(30000 + i), "test" + i));
        }
        MybatisBatch.Method<H2User> mapperMethod = new MybatisBatch.Method<>(H2UserMapper.class);
        // 执行批量更新
        List<BatchResult> batchResults = MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, mapperMethod.updateById());
        Assertions.assertFalse(SqlHelper.retBool(batchResults));
        int[] updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);

        List<Long> ids = Arrays.asList(120000L, 120001L);
        MybatisBatch.Method<H2User> method = new MybatisBatch.Method<>(H2UserMapper.class);

        Assertions.assertFalse(SqlHelper.retBool(MybatisBatchUtils.execute(sqlSessionFactory, ids, method.update(id -> Wrappers.<H2User>lambdaUpdate().set(H2User::getName, "updateTest").eq(H2User::getTestId, id)))));
        Assertions.assertFalse(SqlHelper.retBool(MybatisBatchUtils.execute(sqlSessionFactory, ids, method.update(id -> new H2User().setName("updateTest2"), id -> Wrappers.<H2User>lambdaUpdate().eq(H2User::getTestId, id)))));

        Assertions.assertFalse(SqlHelper.retBool(MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, method.update(user -> Wrappers.<H2User>update().set("name", "updateTest3").eq("test_id", user.getTestId())))));
        Assertions.assertFalse(SqlHelper.retBool(MybatisBatchUtils.execute(sqlSessionFactory, h2UserList, method.update(user -> new H2User("updateTests4"), p -> Wrappers.<H2User>update().eq("test_id", p.getTestId())))));
    }

    @Test
    void testSaveOrUpdateBatch1() {
        int batchSize = 10;
        List<H2User> h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User(Long.valueOf(40000 + i), "test" + i));
        }
        MybatisBatch.Method<H2User> mapperMethod = new MybatisBatch.Method<>(H2UserMapper.class);
        List<BatchResult> batchResults = MybatisBatchUtils.saveOrUpdate(sqlSessionFactory, h2UserList,
                mapperMethod.insert(),
                ((sqlSession, h2User) -> userMapper.selectById(h2User.getTestId()) == null),
                mapperMethod.updateById());
        // 没有使用共享的sqlSession,由于都是新增返回还是一个批次
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        int[] updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);
    }

    @Test
    void testSaveOrUpdateBatchMapper1() {
        int batchSize = 10;
        List<H2User> h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User(Long.valueOf(140000 + i), "test" + i));
        }
        List<BatchResult> batchResults = userMapper.insertOrUpdate(h2UserList);
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        Assertions.assertEquals(batchSize, batchResults.size());
        // 使用共享的sqlSession,等于每次都是刷新了,批次总结果集就等于数据大小了
        for (BatchResult batchResult : batchResults) {
            Assertions.assertEquals(1, batchResult.getUpdateCounts().length);
            Assertions.assertEquals(1, batchResult.getUpdateCounts()[0]);
        }
    }

    @Test
    void testSaveOrUpdateBatchMapper2() {
        int batchSize = 10;
        List<H2User> h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User(Long.valueOf(40000 + i), "test" + i));
        }
        List<BatchResult> batchResults = userMapper.insertOrUpdate(h2UserList,((sqlSession, h2User) -> userMapper.selectById(h2User.getTestId()) == null));
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        // 没有使用共享的sqlSession,由于都是新增返回还是一个批次
        int[] updateCounts = batchResults.getFirst().getUpdateCounts();
        Assertions.assertEquals(batchSize, updateCounts.length);
    }

    @Test
    void testSaveOrUpdateBatchMapper3() {
        var id = IdWorker.getId();
        var h2UserList = List.of(new H2User(id, "testSaveOrUpdateBatchMapper3"), new H2User(id, "testSaveOrUpdateBatchMapper3-1"));
        // 由于没有共享一个sqlSession,第二条记录selectById的时候第一个sqlSession的数据还没提交,会执行插入导致主键冲突.
        Assertions.assertThrowsExactly(PersistenceException.class, () -> userMapper.insertOrUpdate(h2UserList, ((sqlSession, h2User) -> userMapper.selectById(h2User.getTestId()) == null)));
    }

    @Test
    void testSaveOrUpdateBatchMapper4() {
        var id = IdWorker.getId();
        var h2UserList = List.of(new H2User(id, "testSaveOrUpdateBatchMapper4"), new H2User(id, "testSaveOrUpdateBatchMapper4-1"));
        var mapperMethod = new MybatisBatch.Method<H2User>(H2UserMapper.class);
        // 共享一个sqlSession,每次selectById都会刷新一下,第二条记录为update.
        var batchResults = userMapper.insertOrUpdate(h2UserList,
            ((sqlSession, h2User) -> sqlSession.selectList(mapperMethod.get("selectById").getStatementId(), h2User.getTestId()).isEmpty()));
        Assertions.assertTrue(SqlHelper.retBool(batchResults));
        Assertions.assertEquals(h2UserList.size(), batchResults.stream().flatMapToInt(r -> IntStream.of(r.getUpdateCounts())).count());
        Assertions.assertEquals("testSaveOrUpdateBatchMapper4-1", userMapper.selectById(id).getName());
    }

    @Test
    void testRemoveByIds() {
        Assertions.assertEquals(userMapper.deleteByIds(List.of(666666661, "2")), userMapper.deleteByIds(List.of(666666661, "2"), false));
        H2User h2User = new H2User("testRemoveByIds");
        Assertions.assertEquals(1, userMapper.insert(h2User));
        Assertions.assertEquals(1, userMapper.deleteByIds(List.of(h2User)));
        Assertions.assertNotNull(userMapper.getById(h2User.getTestId()).getLastUpdatedDt());
        h2User = new H2User("testRemoveByIds");
        Assertions.assertEquals(1, userMapper.insert(h2User));
        Assertions.assertEquals(1, userMapper.deleteByIds(List.of(h2User), false));
        Assertions.assertNull(userMapper.getById(h2User.getTestId()).getLastUpdatedDt());
    }

    @Test
    void testSaveOrUpdateBatch2() {
        int batchSize = 10;
        List<H2User> h2UserList = new ArrayList<>();
        for (int i = 0; i < batchSize; i++) {
            h2UserList.add(new H2User(Long.valueOf(50000 + i), "test" + i));
        }
        MybatisBatch.Method<H2User> mapperMethod = new MybatisBatch.Method<>(H2UserMapper.class);
        List<BatchResult> batchResults = MybatisBatchUtils.saveOrUpdate(sqlSessionFactory, h2UserList,
                mapperMethod.insert(),
                ((sqlSession, h2User) -> sqlSession.selectList(H2UserMapper.class.getName() + ".selectById", h2User.getTestId()).isEmpty()),
                mapperMethod.updateById());
        // 使用共享的sqlSession,等于每次都是刷新了,批次总结果集就等于数据大小了
        Assertions.assertEquals(batchSize, batchResults.size());
        for (BatchResult batchResult : batchResults) {
            Assertions.assertEquals(1, batchResult.getUpdateCounts().length);
            Assertions.assertEquals(1, batchResult.getUpdateCounts()[0]);
        }
    }

    @Test
    void testSaveOrUpdateBatch3() {
        var id = IdWorker.getId();
        var h2UserList = List.of(new H2User(id, "testSaveOrUpdateBatch3"), new H2User(id, "testSaveOrUpdateBatch3-1"));
        var mapperMethod = new MybatisBatch.Method<H2User>(H2UserMapper.class);
        // 由于没有共享一个sqlSession,第二条记录selectById的时候第一个sqlSession的数据还没提交,会执行插入导致主键冲突.
        Assertions.assertThrowsExactly(PersistenceException.class, () -> MybatisBatchUtils.saveOrUpdate(sqlSessionFactory, h2UserList,
            mapperMethod.insert(),
            ((sqlSession, h2User) -> userMapper.selectById(h2User.getTestId()) == null),
            mapperMethod.updateById()));

    }

    @Test
    void testSaveOrUpdateBatch4() {
        var id = IdWorker.getId();
        var h2UserList = List.of(new H2User(id, "testSaveOrUpdateBatch4"), new H2User(id, "testSaveOrUpdateBatch4-1"));
        var mapperMethod = new MybatisBatch.Method<H2User>(H2UserMapper.class);
        // 共享一个sqlSession,每次selectById都会刷新一下,第二条记录为update.
        var batchResults = MybatisBatchUtils.saveOrUpdate(sqlSessionFactory, h2UserList,
            mapperMethod.insert(),
            ((sqlSession, h2User) -> sqlSession.selectList(mapperMethod.get("selectById").getStatementId(), h2User.getTestId()).isEmpty()),
            mapperMethod.updateById());
        var updateCounts = batchResults.getFirst().getUpdateCounts();
        for (int updateCount : updateCounts) {
            Assertions.assertEquals(1, updateCount);
        }
        Assertions.assertEquals("testSaveOrUpdateBatch4-1", userMapper.selectById(id).getName());
    }


    @Test
    @Order(1)
    void crudTest() {
        H2User h2User = new H2User();
        h2User.setName(NQQ);
        h2User.setAge(AgeEnum.ONE);
        h2User.setDeleted(0);
        h2User.setDesc("这是一个不错的小伙子");
        h2User.setTestType(1);
        Assertions.assertEquals(1, userMapper.insert(h2User));

        log(h2User.getTestId());

        // 新增一条自定义 ID = 1 的测试删除数据
        h2User.setTestId(1L);
        h2User.setName("测试");
        userMapper.insert(h2User);
        for (int i = 0; i < 10; i++) {
            userMapper.insert(new H2User("mp" + i, AgeEnum.ONE));
        }
        Assertions.assertEquals(1, userMapper.deleteById(1L));

        Map<String, Object> map = new HashMap<>();
        map.put("name", "mp0");
        map.put("age", AgeEnum.ONE);

        // 根据 map 查询
        h2User = userMapper.selectByMap(map).getFirst();
        Assertions.assertSame(AgeEnum.ONE, h2User.getAge());

        // 根据 map 删除
        Assertions.assertEquals(1, userMapper.deleteByMap(map));

        // 查询列表
        LambdaQueryWrapper<H2User> wrapper = new QueryWrapper<H2User>().lambda().like(H2User::getName, "mp");
        log(wrapper.getSqlSegment());

        List<H2User> h2UserList = userMapper.selectList(wrapper);
        Assertions.assertTrue(CollectionUtils.isNotEmpty(h2UserList));

        // 查询总数
        long count = userMapper.selectCount(wrapper.clone());
        Assertions.assertTrue(count > 1);

        // 批量删除
        Assertions.assertEquals(count, userMapper.deleteByIds(h2UserList.stream().map(SuperEntity::getTestId).collect(toList())));

        // 更新
        h2User = new H2User();
        h2User.setAge(AgeEnum.TWO);
        h2User.setDesc("测试置空");
        Assertions.assertEquals(1, userMapper.update(h2User, new QueryWrapper<H2User>().eq("name", NQQ)));

        log(userMapper.selectOne(new QueryWrapper<>(new H2User().setName(NQQ).setAge(AgeEnum.TWO))));

        h2User.setAge(AgeEnum.THREE);
        h2User.setDesc(null);
        Assertions.assertTrue(userMapper.update(h2User,
                new UpdateWrapper<H2User>().lambda()
                        .set(H2User::getDesc, "")
                        .eq(H2User::getName, "Jerry")) > 0);

        log(userMapper.selectOne(new QueryWrapper<>(new H2User().setName(NQQ).setAge(AgeEnum.THREE))));

        Assertions.assertEquals(1, userMapper.insert(h2User));
        // 根据主键更新 age = 18
        h2User.setAge(AgeEnum.TWO);
        Assertions.assertEquals(1, userMapper.updateById(h2User));
        long testId = h2User.getTestId();
        // https://github.com/baomidou/mybatis-plus/issues/299
        Assertions.assertEquals(1, userMapper.updateById(new H2User() {{
            setTestId(testId);
            setAge(AgeEnum.TWO);
        }}));
        // 查询一条记录
        Assertions.assertNotNull(userMapper.selectOne(new QueryWrapper<>(new H2User().setName("Joe").setTestType(1))));

        log(h2User.toString());

        // 分页查询
        IPage<H2User> h2UserPage = userMapper.selectPage(new Page<>(1, 10), null);
        if (null != h2UserPage) {
            System.out.println(h2UserPage.getTotal());
            System.out.println(h2UserPage.getSize());
        }
        Assertions.assertNotNull(userMapper.selectPage(new Page<>(1, 10), new QueryWrapper<H2User>().orderByAsc("name")));

        // 查询结果集,测试 lambda 对象后 QueryWrapper 是否参数继续传递
        QueryWrapper<H2User> qw = new QueryWrapper<>();
        qw.lambda().eq(H2User::getName, NQQ);
        List<Map<String, Object>> mapList = userMapper.selectMaps(qw);
        if (CollectionUtils.isNotEmpty(mapList)) {
            for (Map<String, Object> m : mapList) {
                System.out.println(m);
            }
        }
        Assert
Download .txt
gitextract_7cwa3873/

├── .editorconfig
├── .gitee/
│   ├── ISSUE_TEMPLATE.zh-CN.md
│   └── PULL_REQUEST_TEMPLATE.zh-CN.md
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── gradle.yml
│       └── publish.yml
├── CHANGELOG.md
├── LICENSE
├── MPCodeStyle.xml
├── README-zh.md
├── README.md
├── build.gradle
├── changelog-temp.md
├── gradle.properties
├── libs/
│   └── jdbcDriver-18.jar
├── license.txt
├── mybatis-plus/
│   ├── build.gradle
│   └── src/
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               └── test/
│           │                   ├── BaseDbTest.java
│           │                   ├── DbTypeTest.java
│           │                   ├── MybatisTest.java
│           │                   ├── OgnlTest.java
│           │                   ├── PageTest.java
│           │                   ├── autoresultmap/
│           │                   │   ├── AutoResultMapTest.java
│           │                   │   ├── Entity.java
│           │                   │   └── EntityMapper.java
│           │                   ├── batch/
│           │                   │   ├── BatchTest.java
│           │                   │   ├── Entity.java
│           │                   │   └── EntityMapper.java
│           │                   ├── cache/
│           │                   │   ├── page/
│           │                   │   │   ├── PageCache.java
│           │                   │   │   ├── PageCacheMapper.java
│           │                   │   │   └── PageCacheTest.java
│           │                   │   └── xml/
│           │                   │       ├── XmlCache.java
│           │                   │       ├── XmlCacheMapper.java
│           │                   │       └── XmlCacheTest.java
│           │                   ├── chainwrapper/
│           │                   │   ├── ChainWrapperTest.java
│           │                   │   ├── ChainWrappersTest.java
│           │                   │   ├── Entity.java
│           │                   │   └── EntityMapper.java
│           │                   ├── enums/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   ├── EnumInt.java
│           │                   │   ├── EnumOrdinal.java
│           │                   │   ├── EnumStr.java
│           │                   │   └── EnumTest.java
│           │                   ├── fill/
│           │                   │   ├── FillEntity.java
│           │                   │   ├── FillMapper.java
│           │                   │   └── FillTest.java
│           │                   ├── gaussdb/
│           │                   │   ├── Demo.java
│           │                   │   ├── DemoMapper.java
│           │                   │   └── GaussdbTest.java
│           │                   ├── h2/
│           │                   │   ├── ActiveRecordTest.java
│           │                   │   ├── BaseTest.java
│           │                   │   ├── CustomFillTest.java
│           │                   │   ├── FillPerformanceTest.java
│           │                   │   ├── H2Delete1Eq1Test.java
│           │                   │   ├── H2KeyGeneratorTest.java
│           │                   │   ├── H2LogicDeleteTest.java
│           │                   │   ├── H2MetaObjectHandler.java
│           │                   │   ├── H2StudentMapperTest.java
│           │                   │   ├── H2UserMapperTest.java
│           │                   │   ├── H2UserStrategyTest.java
│           │                   │   ├── H2UserTest.java
│           │                   │   ├── H2userNameJsonTypeHandler.java
│           │                   │   ├── LastSqlTest.java
│           │                   │   ├── MybatisMapperRegistryTest.java
│           │                   │   ├── SqlRunnerTest.java
│           │                   │   ├── TestXmlConfig.java
│           │                   │   ├── cache/
│           │                   │   │   ├── CacheConfig.java
│           │                   │   │   ├── CacheTest.java
│           │                   │   │   ├── CustomCache.java
│           │                   │   │   ├── CustomPage.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   └── CacheMapper.java
│           │                   │   │   ├── model/
│           │                   │   │   │   └── CacheModel.java
│           │                   │   │   └── service/
│           │                   │   │       ├── ICacheService.java
│           │                   │   │       └── impl/
│           │                   │   │           └── CacheServiceImpl.java
│           │                   │   ├── config/
│           │                   │   │   ├── DBConfig.java
│           │                   │   │   ├── MybatisPlusConfig.java
│           │                   │   │   ├── MybatisPlusConfigLogicDelete.java
│           │                   │   │   └── MybatisXmlConfig.java
│           │                   │   ├── customfill/
│           │                   │   │   ├── CustomFillConfig.java
│           │                   │   │   ├── annotation/
│           │                   │   │   │   └── InsertUpdateFill.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   └── TestModelMapper.java
│           │                   │   │   └── model/
│           │                   │   │       └── TestModel.java
│           │                   │   ├── entity/
│           │                   │   │   ├── H2Addr.java
│           │                   │   │   ├── H2Student.java
│           │                   │   │   ├── H2User.java
│           │                   │   │   ├── H2UserLogicDelete.java
│           │                   │   │   ├── H2UserStrategy.java
│           │                   │   │   ├── SuSuperEntity.java
│           │                   │   │   ├── SuSuperEntityCamel.java
│           │                   │   │   ├── SuperEntity.java
│           │                   │   │   └── SuperEntityCamel.java
│           │                   │   ├── enums/
│           │                   │   │   ├── AgeEnum.java
│           │                   │   │   ├── GenderEnum.java
│           │                   │   │   └── GradeEnum.java
│           │                   │   ├── fillperformance/
│           │                   │   │   ├── FillPerformanceConfig.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   └── PerformanceModelMapper.java
│           │                   │   │   ├── model/
│           │                   │   │   │   └── PerformanceModel.java
│           │                   │   │   └── service/
│           │                   │   │       ├── IPerformanceModelService.java
│           │                   │   │       └── impl/
│           │                   │   │           └── PerformanceModelServiceImpl.java
│           │                   │   ├── idgenerator/
│           │                   │   │   ├── CustomIdGenerator.java
│           │                   │   │   ├── IdGeneratorConfig.java
│           │                   │   │   ├── IdentifierGeneratorTest.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   ├── BigDecimalIdGeneratorMapper.java
│           │                   │   │   │   ├── BigIntegerIdGeneratorMapper.java
│           │                   │   │   │   ├── IntegerIdGeneratorMapper.java
│           │                   │   │   │   ├── IntegerStringIdGeneratorMapper.java
│           │                   │   │   │   ├── LongIdGeneratorMapper.java
│           │                   │   │   │   ├── LongStringIdGeneratorMapper.java
│           │                   │   │   │   └── StringIdGeneratorMapper.java
│           │                   │   │   └── model/
│           │                   │   │       ├── BigDecimalIdGeneratorModel.java
│           │                   │   │       ├── BigIntegerIdGeneratorModel.java
│           │                   │   │       ├── IntegerIdGeneratorModel.java
│           │                   │   │       ├── IntegerStringIdGeneratorModel.java
│           │                   │   │       ├── LongIdGeneratorModel.java
│           │                   │   │       ├── LongStringIdGeneratorModel.java
│           │                   │   │       └── StringIdGeneratorModel.java
│           │                   │   ├── issues/
│           │                   │   │   ├── aop/
│           │                   │   │   │   ├── AopConfig1.java
│           │                   │   │   │   ├── AopConfig2.java
│           │                   │   │   │   ├── AppConfig.java
│           │                   │   │   │   ├── MultiAopTest.java
│           │                   │   │   │   ├── NoAopTest.java
│           │                   │   │   │   ├── SingleAopTest.java
│           │                   │   │   │   ├── entity/
│           │                   │   │   │   │   └── Demo.java
│           │                   │   │   │   ├── mapper/
│           │                   │   │   │   │   └── DemoMapper.java
│           │                   │   │   │   └── service/
│           │                   │   │   │       ├── IDemoService.java
│           │                   │   │   │       └── impl/
│           │                   │   │   │           └── DemoServiceImpl.java
│           │                   │   │   ├── genericid/
│           │                   │   │   │   ├── GenericIdTest.java
│           │                   │   │   │   ├── MybatisPlusConfig.java
│           │                   │   │   │   ├── entity/
│           │                   │   │   │   │   ├── LongEntity.java
│           │                   │   │   │   │   ├── StringEntity.java
│           │                   │   │   │   │   └── SuperEntity.java
│           │                   │   │   │   └── mapper/
│           │                   │   │   │       ├── LongEntityMapper.java
│           │                   │   │   │       └── StringEntityMapper.java
│           │                   │   │   └── repositoryscan/
│           │                   │   │       ├── AppConfig.java
│           │                   │   │       ├── AppConfigWithMapperScan.java
│           │                   │   │       ├── RepositoryDefaultScanTest.java
│           │                   │   │       ├── RepositoryMapperScanTest.java
│           │                   │   │       ├── entity/
│           │                   │   │       │   └── Demo.java
│           │                   │   │       ├── mapper/
│           │                   │   │       │   └── DemoRepositoryMapper.java
│           │                   │   │       └── service/
│           │                   │   │           ├── IDemoRepositoryService.java
│           │                   │   │           └── impl/
│           │                   │   │               └── DemoRepositoryServiceImpl.java
│           │                   │   ├── keygenerator/
│           │                   │   │   ├── KeyGeneratorConfig.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   ├── ExtendKeyGeneratorMapper.java
│           │                   │   │   │   ├── IntegerKeyGeneratorMapper.java
│           │                   │   │   │   ├── KeyGeneratorMapper.java
│           │                   │   │   │   ├── LongKeyGeneratorMapper.java
│           │                   │   │   │   └── StringKeyGeneratorMapper.java
│           │                   │   │   └── model/
│           │                   │   │       ├── BaseMode.java
│           │                   │   │       ├── ExtendKeyGeneratorModel.java
│           │                   │   │       ├── IntegerKeyGeneratorModel.java
│           │                   │   │       ├── KeyGeneratorModel.java
│           │                   │   │       ├── LongKeyGeneratorModel.java
│           │                   │   │       └── StringKeyGeneratorModel.java
│           │                   │   ├── mapper/
│           │                   │   │   ├── H2StudentMapper.java
│           │                   │   │   ├── H2UserLogicDeleteMapper.java
│           │                   │   │   ├── H2UserMapper.java
│           │                   │   │   ├── H2UserStrategyMapper.java
│           │                   │   │   └── SuperMapper.java
│           │                   │   ├── service/
│           │                   │   │   ├── IH2StudentService.java
│           │                   │   │   ├── IH2UserService.java
│           │                   │   │   └── impl/
│           │                   │   │       ├── H2StudentServiceImpl.java
│           │                   │   │       └── H2UserServiceImpl.java
│           │                   │   └── tenant/
│           │                   │       ├── CustomCacheExecutor.java
│           │                   │       ├── TenantConfig.java
│           │                   │       ├── TenantTest.java
│           │                   │       ├── mapper/
│           │                   │       │   └── StudentMapper.java
│           │                   │       ├── model/
│           │                   │       │   └── Student.java
│           │                   │       └── service/
│           │                   │           ├── IStudentService.java
│           │                   │           └── impl/
│           │                   │               └── StudentServiceImpl.java
│           │                   ├── json/
│           │                   │   ├── FastJson2Entity.java
│           │                   │   ├── FastJson2EntityMapper.java
│           │                   │   ├── FastJsonEntity.java
│           │                   │   ├── FastJsonEntityMapper.java
│           │                   │   ├── Fastjson2Test.java
│           │                   │   ├── FastjsonTest.java
│           │                   │   ├── GsonEntity.java
│           │                   │   ├── GsonEntityMapper.java
│           │                   │   ├── GsonTest.java
│           │                   │   ├── JackJsonEntity.java
│           │                   │   ├── JackJsonEntityMapper.java
│           │                   │   └── JacksonTest.java
│           │                   ├── logicdel/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── LogicDelTest.java
│           │                   ├── multisqlsessionfactory/
│           │                   │   ├── AppConfig.java
│           │                   │   ├── MultiSqlSessionFactoryTest.java
│           │                   │   ├── a/
│           │                   │   │   ├── entity/
│           │                   │   │   │   └── AEntity.java
│           │                   │   │   ├── mapper/
│           │                   │   │   │   └── AEntityMapper.java
│           │                   │   │   └── service/
│           │                   │   │       ├── AEntityService.java
│           │                   │   │       └── impl/
│           │                   │   │           └── AEntityServiceImpl.java
│           │                   │   └── b/
│           │                   │       ├── entity/
│           │                   │       │   └── BEntity.java
│           │                   │       ├── mapper/
│           │                   │       │   └── BEntityMapper.java
│           │                   │       └── service/
│           │                   │           ├── BEntityService.java
│           │                   │           └── impl/
│           │                   │               └── BEntityServiceImpl.java
│           │                   ├── non/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── NonTest.java
│           │                   ├── optimisticlocker/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── OptimisticLockerTest.java
│           │                   ├── orderby/
│           │                   │   ├── OrderByEntity.java
│           │                   │   ├── OrderByMapper.java
│           │                   │   └── OrderByMapperTest.java
│           │                   ├── phoenix/
│           │                   │   ├── PhoenixBaseMapper.java
│           │                   │   ├── PhoenixTest.java
│           │                   │   ├── config/
│           │                   │   │   ├── DBConfig.java
│           │                   │   │   └── MybatisPlusConfig.java
│           │                   │   ├── entity/
│           │                   │   │   └── PhoenixTestInfo.java
│           │                   │   └── mapper/
│           │                   │       └── PhoenixTestInfoMapper.java
│           │                   ├── pom/
│           │                   │   └── GeneratePomTest.java
│           │                   ├── postgresql/
│           │                   │   ├── PostgresqlTest.java
│           │                   │   ├── config/
│           │                   │   │   └── PostgresqlConfig.java
│           │                   │   ├── entity/
│           │                   │   │   └── Pgtable.java
│           │                   │   ├── mapper/
│           │                   │   │   └── PgtableMappper.java
│           │                   │   └── service/
│           │                   │       ├── IPgtableService.java
│           │                   │       └── impl/
│           │                   │           └── PgtableServiceImpl.java
│           │                   ├── puginsome/
│           │                   │   ├── A.java
│           │                   │   ├── AMapper.java
│           │                   │   ├── B.java
│           │                   │   ├── BMapper.java
│           │                   │   └── PluginSomeTest.java
│           │                   ├── record/
│           │                   │   ├── RecordEntity.java
│           │                   │   ├── RecordEntityMapper.java
│           │                   │   └── RecordEntityTest.java
│           │                   ├── reflection/
│           │                   │   └── ExampleObjectFactory.java
│           │                   ├── replaceplaceholder/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   ├── EntitySubMapper.java
│           │                   │   └── ReplacePlaceholderTest.java
│           │                   ├── resultmap/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── ResultMapTest.java
│           │                   ├── rewrite/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── RewriteTest.java
│           │                   ├── scheam/
│           │                   │   ├── SchemaEntity.java
│           │                   │   ├── SchemaEntityMapper.java
│           │                   │   └── SchemaEntityTest.java
│           │                   ├── sqlrunner/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── SqlRunnerTest.java
│           │                   ├── strategy/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── StrategyTest.java
│           │                   ├── tenant/
│           │                   │   ├── Entity.java
│           │                   │   ├── EntityMapper.java
│           │                   │   └── TenantTest.java
│           │                   ├── toolkit/
│           │                   │   ├── DbTest.java
│           │                   │   ├── JdbcUtilsTest.java
│           │                   │   ├── SimpleQueryTest.java
│           │                   │   ├── SqlHelperTest.java
│           │                   │   └── StringUtilsTest.java
│           │                   ├── uuid/
│           │                   │   ├── DeleteByIdDto.java
│           │                   │   ├── UUIDEntity.java
│           │                   │   ├── UUIDEntityMapper.java
│           │                   │   ├── UUIDEntityTest.java
│           │                   │   ├── UUIDLogicEntity.java
│           │                   │   ├── UUIDLogicEntityMapper.java
│           │                   │   ├── UUIDLogicEntityTest.java
│           │                   │   └── UUIDTypeHandler.java
│           │                   └── version/
│           │                       ├── Entity.java
│           │                       ├── EntityMapper.java
│           │                       └── VersionTest.java
│           ├── kotlin/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               └── test/
│           │                   └── h2/
│           │                       ├── KtTestConfig.kt
│           │                       ├── MetaObjectHandlerTest.kt
│           │                       ├── MyMetaObjectHandler.kt
│           │                       └── kotlin/
│           │                           ├── KtH2UserTest.kt
│           │                           ├── entity/
│           │                           │   └── KtH2User.kt
│           │                           ├── mapper/
│           │                           │   └── KtUserMapper.kt
│           │                           └── service/
│           │                               ├── KtH2UserService.kt
│           │                               └── impl/
│           │                                   └── KtH2UserServiceImpl.kt
│           └── resources/
│               ├── cache/
│               │   └── init.ddl.sql
│               ├── com/
│               │   └── baomidou/
│               │       └── mybatisplus/
│               │           └── test/
│               │               ├── cache/
│               │               │   ├── package-info.java
│               │               │   └── xml/
│               │               │       └── XmlCacheMapper.xml
│               │               ├── enums/
│               │               │   └── EntityMapper.xml
│               │               ├── fill/
│               │               │   └── FillMapper.xml
│               │               ├── h2/
│               │               │   └── mapper/
│               │               │       └── H2StudentMapper.xml
│               │               ├── puginsome/
│               │               │   ├── AMapper.xml
│               │               │   └── BMapper.xml
│               │               ├── resultmap/
│               │               │   └── EntityMapper.xml
│               │               └── rewrite/
│               │                   └── EntityMapper.xml
│               ├── customfilltest/
│               │   └── init.ddl.sql
│               ├── fillperformance/
│               │   └── init.ddl.sql
│               ├── h2/
│               │   ├── spring-cache-h2.xml
│               │   ├── spring-custom-fill-test-h2.xml
│               │   ├── spring-fill-performance-h2.xml
│               │   ├── spring-id-generator-h2.xml
│               │   ├── spring-keygenerator-h2.xml
│               │   ├── spring-logic-delete-h2.xml
│               │   ├── spring-sharding-h2.xml
│               │   ├── spring-tenant-h2.xml
│               │   ├── spring-test-h2.xml
│               │   ├── spring-test-xml-h2.xml
│               │   ├── student.ddl.sql
│               │   ├── student.insert.sql
│               │   ├── user.ddl.sql
│               │   └── user.insert.sql
│               ├── hbase-site.xml
│               ├── idgenerator/
│               │   └── init.ddl.sql
│               ├── issues/
│               │   └── genericid/
│               │       ├── spring.xml
│               │       └── sql/
│               │           └── init.ddl.sql
│               ├── keygenerator/
│               │   └── init.ddl.sql
│               ├── logback.xml
│               ├── mybatis-config-object-factory.xml
│               ├── mybatis-config.xml
│               ├── phoenix/
│               │   ├── spring-test-phoenix.xml
│               │   └── test_info.ddl.sql
│               ├── postgresql/
│               │   └── spring-test-postgresql.xml
│               └── tenant/
│                   └── init.ddl.sql
├── mybatis-plus-annotation/
│   ├── build.gradle
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── baomidou/
│                       └── mybatisplus/
│                           └── annotation/
│                               ├── DbType.java
│                               ├── EnumValue.java
│                               ├── FieldFill.java
│                               ├── FieldStrategy.java
│                               ├── IEnum.java
│                               ├── IdType.java
│                               ├── InterceptorIgnore.java
│                               ├── KeySequence.java
│                               ├── OrderBy.java
│                               ├── SqlCondition.java
│                               ├── TableField.java
│                               ├── TableId.java
│                               ├── TableLogic.java
│                               ├── TableName.java
│                               ├── Version.java
│                               └── package-info.java
├── mybatis-plus-bom/
│   └── build.gradle
├── mybatis-plus-core/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── baomidou/
│       │   │           └── mybatisplus/
│       │   │               └── core/
│       │   │                   ├── InjectorResolver.java
│       │   │                   ├── MybatisConfiguration.java
│       │   │                   ├── MybatisMapperAnnotationBuilder.java
│       │   │                   ├── MybatisMapperBuilderAssistant.java
│       │   │                   ├── MybatisMapperRegistry.java
│       │   │                   ├── MybatisMethodResolver.java
│       │   │                   ├── MybatisParameterHandler.java
│       │   │                   ├── MybatisPlusVersion.java
│       │   │                   ├── MybatisSqlSessionFactoryBuilder.java
│       │   │                   ├── MybatisXMLConfigBuilder.java
│       │   │                   ├── MybatisXMLLanguageDriver.java
│       │   │                   ├── MybatisXMLMapperBuilder.java
│       │   │                   ├── MybatisXMLScriptBuilder.java
│       │   │                   ├── assist/
│       │   │                   │   ├── AbstractSqlRunner.java
│       │   │                   │   ├── ISqlRunner.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── batch/
│       │   │                   │   ├── BatchMethod.java
│       │   │                   │   ├── BatchSqlSession.java
│       │   │                   │   ├── MybatisBatch.java
│       │   │                   │   └── ParameterConvert.java
│       │   │                   ├── conditions/
│       │   │                   │   ├── AbstractLambdaWrapper.java
│       │   │                   │   ├── AbstractWrapper.java
│       │   │                   │   ├── ISqlSegment.java
│       │   │                   │   ├── SharedString.java
│       │   │                   │   ├── Wrapper.java
│       │   │                   │   ├── interfaces/
│       │   │                   │   │   ├── Compare.java
│       │   │                   │   │   ├── Func.java
│       │   │                   │   │   ├── Join.java
│       │   │                   │   │   ├── Nested.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   ├── package-info.java
│       │   │                   │   ├── query/
│       │   │                   │   │   ├── LambdaQueryWrapper.java
│       │   │                   │   │   ├── Query.java
│       │   │                   │   │   ├── QueryWrapper.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   ├── segments/
│       │   │                   │   │   ├── AbstractISegmentList.java
│       │   │                   │   │   ├── ColumnSegment.java
│       │   │                   │   │   ├── GroupBySegmentList.java
│       │   │                   │   │   ├── HavingSegmentList.java
│       │   │                   │   │   ├── MatchSegment.java
│       │   │                   │   │   ├── MergeSegments.java
│       │   │                   │   │   ├── NormalSegmentList.java
│       │   │                   │   │   ├── OrderBySegmentList.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── update/
│       │   │                   │       ├── LambdaUpdateWrapper.java
│       │   │                   │       ├── Update.java
│       │   │                   │       ├── UpdateWrapper.java
│       │   │                   │       └── package-info.java
│       │   │                   ├── config/
│       │   │                   │   ├── GlobalConfig.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── enums/
│       │   │                   │   ├── SqlKeyword.java
│       │   │                   │   ├── SqlLike.java
│       │   │                   │   ├── SqlMethod.java
│       │   │                   │   ├── WrapperKeyword.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── exceptions/
│       │   │                   │   ├── MybatisPlusException.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── handlers/
│       │   │                   │   ├── AnnotationHandler.java
│       │   │                   │   ├── CompositeEnumTypeHandler.java
│       │   │                   │   ├── IJsonTypeHandler.java
│       │   │                   │   ├── MetaObjectHandler.java
│       │   │                   │   ├── MybatisEnumTypeHandler.java
│       │   │                   │   ├── PostInitTableInfoHandler.java
│       │   │                   │   ├── StrictFill.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── incrementer/
│       │   │                   │   ├── DefaultIdentifierGenerator.java
│       │   │                   │   ├── IKeyGenerator.java
│       │   │                   │   ├── IdentifierGenerator.java
│       │   │                   │   ├── ImadcnIdentifierGenerator.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── injector/
│       │   │                   │   ├── AbstractMethod.java
│       │   │                   │   ├── AbstractSqlInjector.java
│       │   │                   │   ├── DefaultSqlInjector.java
│       │   │                   │   ├── ISqlInjector.java
│       │   │                   │   ├── SqlRunnerInjector.java
│       │   │                   │   ├── methods/
│       │   │                   │   │   ├── Delete.java
│       │   │                   │   │   ├── DeleteBatchByIds.java
│       │   │                   │   │   ├── DeleteById.java
│       │   │                   │   │   ├── DeleteByIds.java
│       │   │                   │   │   ├── DeleteByMap.java
│       │   │                   │   │   ├── Insert.java
│       │   │                   │   │   ├── SelectBatchByIds.java
│       │   │                   │   │   ├── SelectById.java
│       │   │                   │   │   ├── SelectByIds.java
│       │   │                   │   │   ├── SelectByMap.java
│       │   │                   │   │   ├── SelectCount.java
│       │   │                   │   │   ├── SelectList.java
│       │   │                   │   │   ├── SelectMaps.java
│       │   │                   │   │   ├── SelectMapsPage.java
│       │   │                   │   │   ├── SelectObjs.java
│       │   │                   │   │   ├── SelectOne.java
│       │   │                   │   │   ├── SelectPage.java
│       │   │                   │   │   ├── Update.java
│       │   │                   │   │   ├── UpdateById.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── mapper/
│       │   │                   │   ├── BaseMapper.java
│       │   │                   │   ├── Mapper.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── metadata/
│       │   │                   │   ├── IPage.java
│       │   │                   │   ├── MapperProxyMetadata.java
│       │   │                   │   ├── OrderFieldInfo.java
│       │   │                   │   ├── OrderItem.java
│       │   │                   │   ├── TableFieldInfo.java
│       │   │                   │   ├── TableInfo.java
│       │   │                   │   ├── TableInfoHelper.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── override/
│       │   │                   │   ├── MybatisMapperMethod.java
│       │   │                   │   ├── MybatisMapperProxy.java
│       │   │                   │   ├── MybatisMapperProxyFactory.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── package-info.java
│       │   │                   ├── plugins/
│       │   │                   │   ├── IgnoreStrategy.java
│       │   │                   │   └── InterceptorIgnoreHelper.java
│       │   │                   ├── spi/
│       │   │                   │   ├── CompatibleHelper.java
│       │   │                   │   └── CompatibleSet.java
│       │   │                   └── toolkit/
│       │   │                       ├── AES.java
│       │   │                       ├── AnnotationUtils.java
│       │   │                       ├── AopUtils.java
│       │   │                       ├── ArrayUtils.java
│       │   │                       ├── Assert.java
│       │   │                       ├── BeanUtils.java
│       │   │                       ├── ClassUtils.java
│       │   │                       ├── CollectionUtils.java
│       │   │                       ├── Constants.java
│       │   │                       ├── EncryptUtils.java
│       │   │                       ├── ExceptionUtils.java
│       │   │                       ├── GlobalConfigUtils.java
│       │   │                       ├── IdWorker.java
│       │   │                       ├── LambdaUtils.java
│       │   │                       ├── MybatisBatchUtils.java
│       │   │                       ├── MybatisUtils.java
│       │   │                       ├── NetUtils.java
│       │   │                       ├── ObjectUtils.java
│       │   │                       ├── ParameterUtils.java
│       │   │                       ├── PluginUtils.java
│       │   │                       ├── ReflectionKit.java
│       │   │                       ├── Sequence.java
│       │   │                       ├── SerializationUtils.java
│       │   │                       ├── SetAccessibleAction.java
│       │   │                       ├── StringPool.java
│       │   │                       ├── StringUtils.java
│       │   │                       ├── SystemClock.java
│       │   │                       ├── TableNameParser.java
│       │   │                       ├── Wrappers.java
│       │   │                       ├── package-info.java
│       │   │                       ├── reflect/
│       │   │                       │   ├── GenericTypeUtils.java
│       │   │                       │   ├── IGenericTypeResolver.java
│       │   │                       │   ├── SpringReflectionHelper.java
│       │   │                       │   └── TypeParameterResolver.java
│       │   │                       ├── sql/
│       │   │                       │   ├── SqlInjectionUtils.java
│       │   │                       │   ├── SqlScriptUtils.java
│       │   │                       │   ├── SqlUtils.java
│       │   │                       │   ├── StringEscape.java
│       │   │                       │   └── package-info.java
│       │   │                       └── support/
│       │   │                           ├── BiIntFunction.java
│       │   │                           ├── ColumnCache.java
│       │   │                           ├── IdeaProxyLambdaMeta.java
│       │   │                           ├── LambdaMeta.java
│       │   │                           ├── ReflectLambdaMeta.java
│       │   │                           ├── SFunction.java
│       │   │                           ├── SerializedLambda.java
│       │   │                           └── ShadowLambdaMeta.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── spring-devtools.properties
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               ├── code/
│           │               │   ├── Overwrite.java
│           │               │   ├── OverwriteFile.java
│           │               │   ├── OverwriteRunner.java
│           │               │   └── sub/
│           │               │       └── MapperMethod.java
│           │               ├── core/
│           │               │   ├── MethodTest.java
│           │               │   ├── MybatisMapperAnnotationBuilderTest.java
│           │               │   ├── MybatisXMLConfigBuilderTest.java
│           │               │   ├── MybatisXMLLanguageDriverTest.java
│           │               │   ├── MybatisXMLScriptBuilderTest.java
│           │               │   ├── conditions/
│           │               │   │   ├── AbstractWrapperTest.java
│           │               │   │   ├── BaseWrapperTest.java
│           │               │   │   ├── LambdaQueryWrapperTest.java
│           │               │   │   ├── QueryWrapperTest.java
│           │               │   │   ├── UpdateWrapperIncrDecrTest.java
│           │               │   │   └── UpdateWrapperTest.java
│           │               │   ├── handlers/
│           │               │   │   └── MetaObjectHandlerTest.java
│           │               │   ├── incrementer/
│           │               │   │   └── ImadcnIdentifierGeneratorTest.java
│           │               │   ├── metadata/
│           │               │   │   └── TableInfoTest.java
│           │               │   ├── plugins/
│           │               │   │   └── InterceptorIgnoreHelperTest.java
│           │               │   └── toolkit/
│           │               │       ├── MybatisUtilsTest.java
│           │               │       ├── SequenceTest.java
│           │               │       ├── reflect/
│           │               │       │   └── TypeParameterResolverTest.java
│           │               │       ├── sql/
│           │               │       │   ├── SqlInjectionUtilsTest.java
│           │               │       │   ├── SqlScriptUtilsTest.java
│           │               │       │   └── SqlUtilsTest.java
│           │               │       └── support/
│           │               │           └── IdeaProxyLambdaMetaTest.java
│           │               └── test/
│           │                   ├── EncryptTest.java
│           │                   ├── MybatisConfigurationTest.java
│           │                   ├── MybatisMapperAnnotationBuilderTest.java
│           │                   ├── MybatisParameterHandlerTest.java
│           │                   ├── Role.java
│           │                   ├── User.java
│           │                   ├── entity/
│           │                   │   ├── AEntity.java
│           │                   │   └── BEntity.java
│           │                   ├── mapper/
│           │                   │   ├── AMapper.java
│           │                   │   └── BMapper.java
│           │                   ├── metadata/
│           │                   │   └── TableInfoHelperTest.java
│           │                   ├── override/
│           │                   │   └── MybatisMapperMethodTest.java
│           │                   ├── pom/
│           │                   │   ├── GeneratePomTest.java
│           │                   │   └── ReflectionKitTest.java
│           │                   └── toolkit/
│           │                       ├── AESTest.java
│           │                       ├── AnnotationUtilsTest.java
│           │                       ├── BeanUtilsTest.java
│           │                       ├── ClassUtilsTest.java
│           │                       ├── CollectionUtilsTest.java
│           │                       ├── LambdaUtilsTest.java
│           │                       ├── ParameterUtilsTest.java
│           │                       ├── PluginUtilsTest.java
│           │                       ├── ReflectionKitTest.java
│           │                       ├── StringUtilsTest.java
│           │                       └── TableNameParserTest.java
│           └── resources/
│               ├── MybatisXMLConfigBuilderTest.xml
│               ├── com/
│               │   └── baomidou/
│               │       └── mybatisplus/
│               │           └── test/
│               │               └── mapper/
│               │                   ├── AMapper.xml
│               │                   └── BMapper.xml
│               └── mybatis-config-empty.xml
├── mybatis-plus-extension/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── baomidou/
│       │   │           └── mybatisplus/
│       │   │               └── extension/
│       │   │                   ├── MybatisMapWrapperFactory.java
│       │   │                   ├── activerecord/
│       │   │                   │   ├── AbstractModel.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── conditions/
│       │   │                   │   ├── AbstractChainWrapper.java
│       │   │                   │   ├── ChainWrapper.java
│       │   │                   │   ├── query/
│       │   │                   │   │   ├── ChainQuery.java
│       │   │                   │   │   ├── LambdaQueryChainWrapper.java
│       │   │                   │   │   └── QueryChainWrapper.java
│       │   │                   │   └── update/
│       │   │                   │       ├── ChainUpdate.java
│       │   │                   │       ├── LambdaUpdateChainWrapper.java
│       │   │                   │       └── UpdateChainWrapper.java
│       │   │                   ├── ddl/
│       │   │                   │   ├── DdlHelper.java
│       │   │                   │   ├── DdlScript.java
│       │   │                   │   ├── DdlScriptErrorHandler.java
│       │   │                   │   ├── IDdl.java
│       │   │                   │   └── history/
│       │   │                   │       ├── IDdlGenerator.java
│       │   │                   │       ├── MysqlDdlGenerator.java
│       │   │                   │       ├── OracleDdlGenerator.java
│       │   │                   │       ├── PostgreDdlGenerator.java
│       │   │                   │       └── SQLiteDdlGenerator.java
│       │   │                   ├── handlers/
│       │   │                   │   ├── AbstractJsonTypeHandler.java
│       │   │                   │   ├── Fastjson2TypeHandler.java
│       │   │                   │   ├── FastjsonTypeHandler.java
│       │   │                   │   ├── GsonTypeHandler.java
│       │   │                   │   ├── Jackson3TypeHandler.java
│       │   │                   │   ├── JacksonTypeHandler.java
│       │   │                   │   ├── MybatisMapWrapper.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── incrementer/
│       │   │                   │   ├── DB2KeyGenerator.java
│       │   │                   │   ├── DmKeyGenerator.java
│       │   │                   │   ├── FirebirdKeyGenerator.java
│       │   │                   │   ├── H2KeyGenerator.java
│       │   │                   │   ├── KingbaseKeyGenerator.java
│       │   │                   │   ├── LealoneKeyGenerator.java
│       │   │                   │   ├── OracleKeyGenerator.java
│       │   │                   │   ├── PostgreKeyGenerator.java
│       │   │                   │   ├── SapHanaKeyGenerator.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── injector/
│       │   │                   │   ├── methods/
│       │   │                   │   │   ├── AlwaysUpdateSomeColumnById.java
│       │   │                   │   │   ├── InsertBatchSomeColumn.java
│       │   │                   │   │   ├── LogicDeleteBatchByIds.java
│       │   │                   │   │   ├── LogicDeleteByIdWithFill.java
│       │   │                   │   │   ├── Upsert.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── p6spy/
│       │   │                   │   ├── MybatisPlusLogFactory.java
│       │   │                   │   ├── MybatisPlusLoggingEventListener.java
│       │   │                   │   ├── P6SpyLogger.java
│       │   │                   │   └── StdoutLogger.java
│       │   │                   ├── package-info.java
│       │   │                   ├── plugins/
│       │   │                   │   ├── MybatisPlusInterceptor.java
│       │   │                   │   ├── handler/
│       │   │                   │   │   └── TableNameHandler.java
│       │   │                   │   ├── inner/
│       │   │                   │   │   ├── DynamicTableNameInnerInterceptor.java
│       │   │                   │   │   ├── InnerInterceptor.java
│       │   │                   │   │   ├── OptimisticLockerInnerInterceptor.java
│       │   │                   │   │   └── ReplacePlaceholderInnerInterceptor.java
│       │   │                   │   ├── package-info.java
│       │   │                   │   └── pagination/
│       │   │                   │       ├── DialectFactory.java
│       │   │                   │       ├── DialectModel.java
│       │   │                   │       ├── Page.java
│       │   │                   │       ├── PageDTO.java
│       │   │                   │       ├── dialects/
│       │   │                   │       │   ├── DB2Dialect.java
│       │   │                   │       │   ├── GBase8sDialect.java
│       │   │                   │       │   ├── GaussDBDialect.java
│       │   │                   │       │   ├── Hive2Dialect.java
│       │   │                   │       │   ├── IDialect.java
│       │   │                   │       │   ├── InformixDialect.java
│       │   │                   │       │   ├── MySqlDialect.java
│       │   │                   │       │   ├── Oracle12cDialect.java
│       │   │                   │       │   ├── OracleDialect.java
│       │   │                   │       │   ├── PostgreDialect.java
│       │   │                   │       │   ├── SQLServer2005Dialect.java
│       │   │                   │       │   ├── SQLServerDialect.java
│       │   │                   │       │   ├── SybaseDialect.java
│       │   │                   │       │   ├── TrinoDialect.java
│       │   │                   │       │   ├── XCloudDialect.java
│       │   │                   │       │   └── package-info.java
│       │   │                   │       └── package-info.java
│       │   │                   ├── repository/
│       │   │                   │   ├── AbstractRepository.java
│       │   │                   │   └── IRepository.java
│       │   │                   ├── scripting/
│       │   │                   │   ├── MybatisFreeMarkerLanguageDriver.java
│       │   │                   │   ├── MybatisThymeleafLanguageDriver.java
│       │   │                   │   └── MybatisVelocityLanguageDriver.java
│       │   │                   ├── spi/
│       │   │                   │   ├── CompatibleHelper.java
│       │   │                   │   └── CompatibleSet.java
│       │   │                   └── toolkit/
│       │   │                       ├── ChainWrappers.java
│       │   │                       ├── Db.java
│       │   │                       ├── JdbcUtils.java
│       │   │                       ├── PropertyMapper.java
│       │   │                       ├── SimpleQuery.java
│       │   │                       ├── SqlHelper.java
│       │   │                       ├── SqlParserUtils.java
│       │   │                       └── package-info.java
│       │   └── kotlin/
│       │       └── com/
│       │           └── baomidou/
│       │               └── mybatisplus/
│       │                   └── extension/
│       │                       └── kotlin/
│       │                           ├── AbstractKtWrapper.kt
│       │                           ├── KtQueryChainWrapper.kt
│       │                           ├── KtQueryWrapper.kt
│       │                           ├── KtUpdateChainWrapper.kt
│       │                           └── KtUpdateWrapper.kt
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               └── test/
│           │                   ├── DdlHelperTest.java
│           │                   ├── DdlScriptTest.java
│           │                   ├── SqlParserUtilsTest.java
│           │                   ├── extension/
│           │                   │   ├── parsers/
│           │                   │   │   └── DynamicTableNameParserTest.java
│           │                   │   └── plugins/
│           │                   │       └── pagination/
│           │                   │           └── dialects/
│           │                   │               └── IDialectTest.java
│           │                   ├── handlers/
│           │                   │   ├── BaseTypeHandlerTest.java
│           │                   │   ├── FastJson2TypeHandlerTest.java
│           │                   │   ├── FastJsonTypeHandlerTest.java
│           │                   │   ├── GsonTypeHandlerTest.java
│           │                   │   ├── Jackson3TypeHandlerTest.java
│           │                   │   ├── JacksonTypeHandlerTest.java
│           │                   │   ├── MybatisEnumTypeHandlerTest.java
│           │                   │   └── MybatisMapWrapperTest.java
│           │                   ├── model/
│           │                   │   └── UserBean.java
│           │                   ├── plugins/
│           │                   │   └── pagination/
│           │                   │       ├── DialectFactoryTest.java
│           │                   │       └── SQLServer2005DialectTest.java
│           │                   └── pom/
│           │                       └── GeneratePomTest.java
│           └── resources/
│               ├── ddl/
│               │   └── test.sql
│               └── logback.xml
├── mybatis-plus-generator/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── baomidou/
│       │   │           └── mybatisplus/
│       │   │               └── generator/
│       │   │                   ├── AutoGenerator.java
│       │   │                   ├── DefaultTableAnnotationHandler.java
│       │   │                   ├── DefaultTableFieldAnnotationHandler.java
│       │   │                   ├── FastAutoGenerator.java
│       │   │                   ├── IFill.java
│       │   │                   ├── IGenerateMapperMethodHandler.java
│       │   │                   ├── ITableAnnotationHandler.java
│       │   │                   ├── ITableFieldAnnotationHandler.java
│       │   │                   ├── ITemplate.java
│       │   │                   ├── config/
│       │   │                   │   ├── ConstVal.java
│       │   │                   │   ├── DataSourceConfig.java
│       │   │                   │   ├── GlobalConfig.java
│       │   │                   │   ├── IConfigBuilder.java
│       │   │                   │   ├── IDbQuery.java
│       │   │                   │   ├── IKeyWordsHandler.java
│       │   │                   │   ├── INameConvert.java
│       │   │                   │   ├── IOutputFile.java
│       │   │                   │   ├── ITypeConvert.java
│       │   │                   │   ├── InjectionConfig.java
│       │   │                   │   ├── OutputFile.java
│       │   │                   │   ├── PackageConfig.java
│       │   │                   │   ├── StrategyConfig.java
│       │   │                   │   ├── TemplateConfig.java
│       │   │                   │   ├── TemplateLoadWay.java
│       │   │                   │   ├── TemplateType.java
│       │   │                   │   ├── builder/
│       │   │                   │   │   ├── BaseBuilder.java
│       │   │                   │   │   ├── ConfigBuilder.java
│       │   │                   │   │   ├── Controller.java
│       │   │                   │   │   ├── CustomFile.java
│       │   │                   │   │   ├── Entity.java
│       │   │                   │   │   ├── GeneratorBuilder.java
│       │   │                   │   │   ├── Mapper.java
│       │   │                   │   │   ├── PathInfoHandler.java
│       │   │                   │   │   ├── Service.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   ├── converts/
│       │   │                   │   │   ├── ClickHouseTypeConvert.java
│       │   │                   │   │   ├── DB2TypeConvert.java
│       │   │                   │   │   ├── DmTypeConvert.java
│       │   │                   │   │   ├── FirebirdTypeConvert.java
│       │   │                   │   │   ├── GaussDBSqlTypeConvert.java
│       │   │                   │   │   ├── KingbaseESTypeConvert.java
│       │   │                   │   │   ├── MySqlTypeConvert.java
│       │   │                   │   │   ├── OracleTypeConvert.java
│       │   │                   │   │   ├── OscarTypeConvert.java
│       │   │                   │   │   ├── PostgreSqlTypeConvert.java
│       │   │                   │   │   ├── SqlServerTypeConvert.java
│       │   │                   │   │   ├── SqliteTypeConvert.java
│       │   │                   │   │   ├── TypeConverts.java
│       │   │                   │   │   ├── package-info.java
│       │   │                   │   │   └── select/
│       │   │                   │   │       ├── Branch.java
│       │   │                   │   │       ├── BranchBuilder.java
│       │   │                   │   │       └── Selector.java
│       │   │                   │   ├── package-info.java
│       │   │                   │   ├── po/
│       │   │                   │   │   ├── LikeTable.java
│       │   │                   │   │   ├── TableField.java
│       │   │                   │   │   ├── TableInfo.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   ├── querys/
│       │   │                   │   │   ├── AbstractDbQuery.java
│       │   │                   │   │   ├── ClickHouseQuery.java
│       │   │                   │   │   ├── DB2Query.java
│       │   │                   │   │   ├── DMQuery.java
│       │   │                   │   │   ├── DbQueryDecorator.java
│       │   │                   │   │   ├── DbQueryRegistry.java
│       │   │                   │   │   ├── FirebirdQuery.java
│       │   │                   │   │   ├── GaussDBSqlQuery.java
│       │   │                   │   │   ├── GaussQuery.java
│       │   │                   │   │   ├── GbaseQuery.java
│       │   │                   │   │   ├── H2Query.java
│       │   │                   │   │   ├── KingbaseESQuery.java
│       │   │                   │   │   ├── MariadbQuery.java
│       │   │                   │   │   ├── MySqlQuery.java
│       │   │                   │   │   ├── OracleQuery.java
│       │   │                   │   │   ├── OscarQuery.java
│       │   │                   │   │   ├── PostgreSqlQuery.java
│       │   │                   │   │   ├── SqlServerQuery.java
│       │   │                   │   │   ├── SqliteQuery.java
│       │   │                   │   │   ├── SybaseQuery.java
│       │   │                   │   │   ├── XuguQuery.java
│       │   │                   │   │   ├── ZenithQuery.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── rules/
│       │   │                   │       ├── DateType.java
│       │   │                   │       ├── DbColumnType.java
│       │   │                   │       ├── IColumnType.java
│       │   │                   │       ├── NamingStrategy.java
│       │   │                   │       └── package-info.java
│       │   │                   ├── engine/
│       │   │                   │   ├── AbstractTemplateEngine.java
│       │   │                   │   ├── BeetlTemplateEngine.java
│       │   │                   │   ├── EnjoyTemplateEngine.java
│       │   │                   │   ├── FreemarkerTemplateEngine.java
│       │   │                   │   └── VelocityTemplateEngine.java
│       │   │                   ├── fill/
│       │   │                   │   ├── Column.java
│       │   │                   │   └── Property.java
│       │   │                   ├── function/
│       │   │                   │   └── ConverterFileName.java
│       │   │                   ├── index/
│       │   │                   │   ├── AbstractMapperMethodHandler.java
│       │   │                   │   ├── DefaultGenerateMapperLambdaMethodHandler.java
│       │   │                   │   └── DefaultGenerateMapperMethodHandler.java
│       │   │                   ├── jdbc/
│       │   │                   │   └── DatabaseMetaDataWrapper.java
│       │   │                   ├── keywords/
│       │   │                   │   ├── BaseKeyWordsHandler.java
│       │   │                   │   ├── H2KeyWordsHandler.java
│       │   │                   │   ├── MySqlKeyWordsHandler.java
│       │   │                   │   ├── PostgreSqlKeyWordsHandler.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── model/
│       │   │                   │   ├── AnnotationAttributes.java
│       │   │                   │   ├── ClassAnnotationAttributes.java
│       │   │                   │   └── MapperMethod.java
│       │   │                   ├── package-info.java
│       │   │                   ├── query/
│       │   │                   │   ├── AbstractDatabaseQuery.java
│       │   │                   │   ├── DefaultQuery.java
│       │   │                   │   ├── IDatabaseQuery.java
│       │   │                   │   └── SQLQuery.java
│       │   │                   ├── type/
│       │   │                   │   ├── ITypeConvertHandler.java
│       │   │                   │   └── TypeRegistry.java
│       │   │                   └── util/
│       │   │                       ├── ClassUtils.java
│       │   │                       ├── FileUtils.java
│       │   │                       ├── KotlinTypeUtils.java
│       │   │                       └── RuntimeUtils.java
│       │   └── resources/
│       │       └── templates/
│       │           ├── controller.java.btl
│       │           ├── controller.java.ej
│       │           ├── controller.java.ftl
│       │           ├── controller.java.vm
│       │           ├── entity.java.btl
│       │           ├── entity.java.ej
│       │           ├── entity.java.ftl
│       │           ├── entity.java.vm
│       │           ├── entity.kt.btl
│       │           ├── entity.kt.ej
│       │           ├── entity.kt.ftl
│       │           ├── entity.kt.vm
│       │           ├── mapper.java.btl
│       │           ├── mapper.java.ej
│       │           ├── mapper.java.ftl
│       │           ├── mapper.java.vm
│       │           ├── mapper.xml.btl
│       │           ├── mapper.xml.ej
│       │           ├── mapper.xml.ftl
│       │           ├── mapper.xml.vm
│       │           ├── service.java.btl
│       │           ├── service.java.ej
│       │           ├── service.java.ftl
│       │           ├── service.java.vm
│       │           ├── serviceImpl.java.btl
│       │           ├── serviceImpl.java.ej
│       │           ├── serviceImpl.java.ftl
│       │           └── serviceImpl.java.vm
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           ├── demo/
│           │           │   ├── beetl/
│           │           │   │   ├── controller/
│           │           │   │   │   └── SimpleController.java
│           │           │   │   ├── entity/
│           │           │   │   │   └── Simple.java
│           │           │   │   ├── mapper/
│           │           │   │   │   ├── SimpleMapper.java
│           │           │   │   │   └── xml/
│           │           │   │   │       └── SimpleMapper.xml
│           │           │   │   └── service/
│           │           │   │       ├── ISimpleService.java
│           │           │   │       └── impl/
│           │           │   │           └── SimpleServiceImpl.java
│           │           │   ├── enjoy/
│           │           │   │   ├── controller/
│           │           │   │   │   └── SimpleController.java
│           │           │   │   ├── entity/
│           │           │   │   │   └── Simple.java
│           │           │   │   ├── mapper/
│           │           │   │   │   ├── SimpleMapper.java
│           │           │   │   │   └── xml/
│           │           │   │   │       └── SimpleMapper.xml
│           │           │   │   └── service/
│           │           │   │       ├── ISimpleService.java
│           │           │   │       └── impl/
│           │           │   │           └── SimpleServiceImpl.java
│           │           │   ├── freemarker/
│           │           │   │   ├── controller/
│           │           │   │   │   └── SimpleController.java
│           │           │   │   ├── entity/
│           │           │   │   │   └── Simple.java
│           │           │   │   ├── mapper/
│           │           │   │   │   ├── SimpleMapper.java
│           │           │   │   │   └── xml/
│           │           │   │   │       └── SimpleMapper.xml
│           │           │   │   └── service/
│           │           │   │       ├── ISimpleService.java
│           │           │   │       └── impl/
│           │           │   │           └── SimpleServiceImpl.java
│           │           │   └── velocity/
│           │           │       ├── controller/
│           │           │       │   └── SimpleController.java
│           │           │       ├── entity/
│           │           │       │   └── Simple.java
│           │           │       ├── mapper/
│           │           │       │   ├── SimpleMapper.java
│           │           │       │   └── xml/
│           │           │       │       └── SimpleMapper.xml
│           │           │       └── service/
│           │           │           ├── ISimpleService.java
│           │           │           └── impl/
│           │           │               └── SimpleServiceImpl.java
│           │           └── mybatisplus/
│           │               └── generator/
│           │                   ├── config/
│           │                   │   ├── DataSourceConfigTest.java
│           │                   │   ├── DbQueryRegistryTest.java
│           │                   │   ├── GlobalConfigTest.java
│           │                   │   ├── InjectionConfigTest.java
│           │                   │   ├── PackageConfigTest.java
│           │                   │   ├── StrategyConfigTest.java
│           │                   │   ├── TemplateConfigTest.java
│           │                   │   ├── builder/
│           │                   │   │   └── ConfigBuilderTest.java
│           │                   │   ├── converts/
│           │                   │   │   ├── GaussDBSqlTypeConvertTest.java
│           │                   │   │   ├── SqlServerTypeConvertTest.java
│           │                   │   │   ├── TypeConvertsTest.java
│           │                   │   │   └── select/
│           │                   │   │       └── SelectorTest.java
│           │                   │   ├── po/
│           │                   │   │   ├── TableFieldTest.java
│           │                   │   │   └── TableInfoTest.java
│           │                   │   └── rules/
│           │                   │       └── NamingStrategyTest.java
│           │                   ├── engine/
│           │                   │   └── TemplateEngineTest.java
│           │                   ├── entity/
│           │                   │   ├── BaseEntity.java
│           │                   │   └── SuperEntity.java
│           │                   ├── index/
│           │                   │   └── MapperMethodHandlerTest.java
│           │                   ├── jdbc/
│           │                   │   └── DatabaseMetaDataWrapperTest.java
│           │                   ├── keywords/
│           │                   │   ├── H2KeyWordsHandlerTest.java
│           │                   │   ├── MySqlKeyWordsHandlerTest.java
│           │                   │   └── PostgreSqlKeyWordsHandlerTest.java
│           │                   ├── model/
│           │                   │   └── ClassAnnotationAttributesTest.java
│           │                   └── samples/
│           │                       ├── BaseGeneratorTest.java
│           │                       ├── DMGeneratorTest.java
│           │                       ├── FastAutoGeneratorTest.java
│           │                       ├── GaussDBGeneratorTest.java
│           │                       ├── H2CodeGeneratorTest.java
│           │                       ├── MySQLGeneratorTest.java
│           │                       ├── OracleGeneratorTest.java
│           │                       └── PostgreSQLGeneratorTest.java
│           ├── kotlin/
│           │   └── com/
│           │       └── baomidou/
│           │           ├── beetl/
│           │           │   ├── controller/
│           │           │   │   └── SimpleController.kt
│           │           │   ├── entity/
│           │           │   │   └── Simple.kt
│           │           │   ├── mapper/
│           │           │   │   ├── SimpleMapper.kt
│           │           │   │   └── xml/
│           │           │   │       └── SimpleMapper.xml
│           │           │   └── service/
│           │           │       ├── ISimpleService.kt
│           │           │       └── impl/
│           │           │           └── SimpleServiceImpl.kt
│           │           ├── enjoy/
│           │           │   ├── controller/
│           │           │   │   └── SimpleController.kt
│           │           │   ├── entity/
│           │           │   │   └── Simple.kt
│           │           │   ├── mapper/
│           │           │   │   ├── SimpleMapper.kt
│           │           │   │   └── xml/
│           │           │   │       └── SimpleMapper.xml
│           │           │   └── service/
│           │           │       ├── ISimpleService.kt
│           │           │       └── impl/
│           │           │           └── SimpleServiceImpl.kt
│           │           ├── freemarker/
│           │           │   ├── controller/
│           │           │   │   └── SimpleController.kt
│           │           │   ├── entity/
│           │           │   │   └── Simple.kt
│           │           │   ├── mapper/
│           │           │   │   ├── SimpleMapper.kt
│           │           │   │   └── xml/
│           │           │   │       └── SimpleMapper.xml
│           │           │   └── service/
│           │           │       ├── ISimpleService.kt
│           │           │       └── impl/
│           │           │           └── SimpleServiceImpl.kt
│           │           └── velocity/
│           │               ├── controller/
│           │               │   └── SimpleController.kt
│           │               ├── entity/
│           │               │   └── Simple.kt
│           │               ├── mapper/
│           │               │   ├── SimpleMapper.kt
│           │               │   └── xml/
│           │               │       └── SimpleMapper.xml
│           │               └── service/
│           │                   ├── ISimpleService.kt
│           │                   └── impl/
│           │                       └── SimpleServiceImpl.kt
│           └── resources/
│               ├── sql/
│               │   └── init.sql
│               └── templates/
│                   ├── dto.java.ftl
│                   ├── dto.java.vm
│                   ├── entity1.java.ftl
│                   ├── entity1.java.vm
│                   ├── test.vm
│                   ├── vo.java.ftl
│                   └── vo.java.vm
├── mybatis-plus-jsqlparser-support/
│   ├── build.gradle
│   ├── mybatis-plus-jsqlparser/
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── baomidou/
│   │       │               └── mybatisplus/
│   │       │                   └── extension/
│   │       │                       ├── DynamicTableNameHandler.java
│   │       │                       ├── parser/
│   │       │                       │   ├── JsqlParserFunction.java
│   │       │                       │   ├── JsqlParserGlobal.java
│   │       │                       │   ├── JsqlParserSupport.java
│   │       │                       │   └── cache/
│   │       │                       │       ├── AbstractCaffeineJsqlParseCache.java
│   │       │                       │       ├── FstFactory.java
│   │       │                       │       ├── FstSerialCaffeineJsqlParseCache.java
│   │       │                       │       ├── FuryFactory.java
│   │       │                       │       ├── FurySerialCaffeineJsqlParseCache.java
│   │       │                       │       ├── JdkSerialCaffeineJsqlParseCache.java
│   │       │                       │       └── JsqlParseCache.java
│   │       │                       └── plugins/
│   │       │                           ├── handler/
│   │       │                           │   ├── DataPermissionHandler.java
│   │       │                           │   ├── MultiDataPermissionHandler.java
│   │       │                           │   └── TenantLineHandler.java
│   │       │                           └── inner/
│   │       │                               ├── BaseMultiTableInnerInterceptor.java
│   │       │                               ├── BlockAttackInnerInterceptor.java
│   │       │                               ├── DataChangeRecorderInnerInterceptor.java
│   │       │                               ├── DataPermissionInterceptor.java
│   │       │                               ├── DynamicTableNameJsqlParserInnerInterceptor.java
│   │       │                               ├── IllegalSQLInnerInterceptor.java
│   │       │                               ├── PaginationInnerInterceptor.java
│   │       │                               └── TenantLineInnerInterceptor.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── baomidou/
│   │                       └── mybatisplus/
│   │                           └── test/
│   │                               ├── JSqlParserTest.java
│   │                               ├── extension/
│   │                               │   ├── parser/
│   │                               │   │   ├── JsqlParserSimpleSerialTest.java
│   │                               │   │   └── cache/
│   │                               │   │       └── FstFactoryTest.java
│   │                               │   └── plugins/
│   │                               │       ├── MybatisPlusInterceptorTest.java
│   │                               │       └── inner/
│   │                               │           ├── BlockAttackInnerInterceptorTest.java
│   │                               │           ├── DataChangeRecorderInnerInterceptorTest.java
│   │                               │           ├── DataPermissionInterceptorTest.java
│   │                               │           ├── DynamicTableNameInnerInterceptorTest.java
│   │                               │           ├── DynamicTableNameJsqlParserInnerInterceptorTest.java
│   │                               │           ├── IllegalSQLInnerInterceptorTest.java
│   │                               │           ├── MultiDataPermissionInterceptorTest.java
│   │                               │           ├── PaginationInnerInterceptorTest.java
│   │                               │           └── TenantLineInnerInterceptorTest.java
│   │                               └── pagination/
│   │                                   └── SelectBodyToPlainSelectTest.java
│   ├── mybatis-plus-jsqlparser-4.9/
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── baomidou/
│   │       │               └── mybatisplus/
│   │       │                   └── extension/
│   │       │                       ├── DynamicTableNameHandler.java
│   │       │                       ├── parser/
│   │       │                       │   ├── JsqlParserFunction.java
│   │       │                       │   ├── JsqlParserGlobal.java
│   │       │                       │   ├── JsqlParserSupport.java
│   │       │                       │   └── cache/
│   │       │                       │       ├── AbstractCaffeineJsqlParseCache.java
│   │       │                       │       ├── FstFactory.java
│   │       │                       │       ├── FstSerialCaffeineJsqlParseCache.java
│   │       │                       │       ├── JdkSerialCaffeineJsqlParseCache.java
│   │       │                       │       └── JsqlParseCache.java
│   │       │                       └── plugins/
│   │       │                           ├── handler/
│   │       │                           │   ├── DataPermissionHandler.java
│   │       │                           │   ├── MultiDataPermissionHandler.java
│   │       │                           │   └── TenantLineHandler.java
│   │       │                           └── inner/
│   │       │                               ├── BaseMultiTableInnerInterceptor.java
│   │       │                               ├── BlockAttackInnerInterceptor.java
│   │       │                               ├── DataChangeRecorderInnerInterceptor.java
│   │       │                               ├── DataPermissionInterceptor.java
│   │       │                               ├── DynamicTableNameJsqlParserInnerInterceptor.java
│   │       │                               ├── IllegalSQLInnerInterceptor.java
│   │       │                               ├── PaginationInnerInterceptor.java
│   │       │                               └── TenantLineInnerInterceptor.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── baomidou/
│   │                       └── mybatisplus/
│   │                           └── test/
│   │                               ├── JSqlParserTest.java
│   │                               ├── extension/
│   │                               │   ├── parser/
│   │                               │   │   ├── JsqlParserSimpleSerialTest.java
│   │                               │   │   └── cache/
│   │                               │   │       └── FstFactoryTest.java
│   │                               │   └── plugins/
│   │                               │       ├── MybatisPlusInterceptorTest.java
│   │                               │       └── inner/
│   │                               │           ├── BlockAttackInnerInterceptorTest.java
│   │                               │           ├── DataChangeRecorderInnerInterceptorTest.java
│   │                               │           ├── DataPermissionInterceptorTest.java
│   │                               │           ├── DynamicTableNameInnerInterceptorTest.java
│   │                               │           ├── DynamicTableNameJsqlParserInnerInterceptorTest.java
│   │                               │           ├── IllegalSQLInnerInterceptorTest.java
│   │                               │           ├── MultiDataPermissionInterceptorTest.java
│   │                               │           ├── PaginationInnerInterceptorTest.java
│   │                               │           └── TenantLineInnerInterceptorTest.java
│   │                               └── plugins/
│   │                                   └── pagination/
│   │                                       └── SelectBodyToPlainSelectTest.java
│   ├── mybatis-plus-jsqlparser-5.0/
│   │   ├── build.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── baomidou/
│   │       │               └── mybatisplus/
│   │       │                   └── extension/
│   │       │                       ├── DynamicTableNameHandler.java
│   │       │                       ├── parser/
│   │       │                       │   ├── JsqlParserFunction.java
│   │       │                       │   ├── JsqlParserGlobal.java
│   │       │                       │   ├── JsqlParserSupport.java
│   │       │                       │   └── cache/
│   │       │                       │       ├── AbstractCaffeineJsqlParseCache.java
│   │       │                       │       ├── FstFactory.java
│   │       │                       │       ├── FstSerialCaffeineJsqlParseCache.java
│   │       │                       │       ├── JdkSerialCaffeineJsqlParseCache.java
│   │       │                       │       └── JsqlParseCache.java
│   │       │                       └── plugins/
│   │       │                           ├── handler/
│   │       │                           │   ├── DataPermissionHandler.java
│   │       │                           │   ├── MultiDataPermissionHandler.java
│   │       │                           │   └── TenantLineHandler.java
│   │       │                           └── inner/
│   │       │                               ├── BaseMultiTableInnerInterceptor.java
│   │       │                               ├── BlockAttackInnerInterceptor.java
│   │       │                               ├── DataChangeRecorderInnerInterceptor.java
│   │       │                               ├── DataPermissionInterceptor.java
│   │       │                               ├── DynamicTableNameJsqlParserInnerInterceptor.java
│   │       │                               ├── IllegalSQLInnerInterceptor.java
│   │       │                               ├── PaginationInnerInterceptor.java
│   │       │                               └── TenantLineInnerInterceptor.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── baomidou/
│   │                       └── mybatisplus/
│   │                           └── test/
│   │                               ├── JSqlParserTest.java
│   │                               ├── extension/
│   │                               │   ├── parser/
│   │                               │   │   ├── JsqlParserSimpleSerialTest.java
│   │                               │   │   └── cache/
│   │                               │   │       └── FstFactoryTest.java
│   │                               │   └── plugins/
│   │                               │       ├── MybatisPlusInterceptorTest.java
│   │                               │       └── inner/
│   │                               │           ├── BlockAttackInnerInterceptorTest.java
│   │                               │           ├── DataChangeRecorderInnerInterceptorTest.java
│   │                               │           ├── DataPermissionInterceptorTest.java
│   │                               │           ├── DynamicTableNameInnerInterceptorTest.java
│   │                               │           ├── DynamicTableNameJsqlParserInnerInterceptorTest.java
│   │                               │           ├── IllegalSQLInnerInterceptorTest.java
│   │                               │           ├── MultiDataPermissionInterceptorTest.java
│   │                               │           ├── PaginationInnerInterceptorTest.java
│   │                               │           └── TenantLineInnerInterceptorTest.java
│   │                               └── pagination/
│   │                                   └── SelectBodyToPlainSelectTest.java
│   └── mybatis-plus-jsqlparser-common/
│       ├── build.gradle
│       └── src/
│           └── main/
│               └── java/
│                   └── com/
│                       └── baomidou/
│                           └── mybatisplus/
│                               └── jsqlparser/
│                                   ├── JsqlParserThreadPool.java
│                                   └── enums/
│                                       └── ExpressionAppendMode.java
├── mybatis-plus-spring/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── baomidou/
│       │   │           └── mybatisplus/
│       │   │               └── extension/
│       │   │                   ├── activerecord/
│       │   │                   │   └── Model.java
│       │   │                   ├── ddl/
│       │   │                   │   └── SimpleDdl.java
│       │   │                   ├── repository/
│       │   │                   │   └── CrudRepository.java
│       │   │                   ├── service/
│       │   │                   │   ├── IService.java
│       │   │                   │   ├── impl/
│       │   │                   │   │   ├── ServiceImpl.java
│       │   │                   │   │   └── package-info.java
│       │   │                   │   └── package-info.java
│       │   │                   ├── spi/
│       │   │                   │   └── SpringCompatibleSet.java
│       │   │                   ├── spring/
│       │   │                   │   ├── MybatisPlusApplicationContextAware.java
│       │   │                   │   └── MybatisSqlSessionFactoryBean.java
│       │   │                   └── toolkit/
│       │   │                       └── SqlRunner.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── com.baomidou.mybatisplus.core.spi.CompatibleSet
│       │               └── com.baomidou.mybatisplus.extension.spi.CompatibleSet
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── baomidou/
│           │           └── mybatisplus/
│           │               └── test/
│           │                   └── service/
│           │                       └── ServiceTest.java
│           └── kotlin/
│               └── com/
│                   └── baomidou/
│                       └── mybatisplus/
│                           └── test/
│                               ├── instance.kt
│                               └── kotlin/
│                                   ├── BaseDbTest.kt
│                                   ├── ChainWrappersTest.kt
│                                   ├── DbTest.kt
│                                   ├── FixIssue1986.kt
│                                   ├── User.kt
│                                   ├── UserMapper.kt
│                                   └── WrapperTest.kt
├── settings.gradle
└── spring-boot-starter/
    ├── build.gradle
    ├── mybatis-plus-boot-starter/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   ├── java/
    │       │   │   └── com/
    │       │   │       └── baomidou/
    │       │   │           └── mybatisplus/
    │       │   │               └── autoconfigure/
    │       │   │                   └── MybatisPlusAutoConfiguration.java
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── additional-spring-configuration-metadata.json
    │       │           ├── spring/
    │       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               ├── autoconfigure/
    │           │               │   └── ApplicationTestStartSuccess.java
    │           │               └── test/
    │           │                   ├── MetadataTest.java
    │           │                   ├── MybatisPlusPropertiesTest.java
    │           │                   ├── entity/
    │           │                   │   └── Test.java
    │           │                   ├── mapper/
    │           │                   │   └── TestMapper.java
    │           │                   └── pom/
    │           │                       └── GeneratePomTest.java
    │           └── resources/
    │               ├── application.yml
    │               └── mapper/
    │                   ├── modulea/
    │                   │   └── testa.xml
    │                   └── moduleb/
    │                       └── testb.xml
    ├── mybatis-plus-boot-starter-test/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── spring/
    │       │           │   └── com.baomidou.mybatisplus.test.autoconfigure.AutoConfigureMybatisPlus.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               └── test/
    │           │                   └── autoconfigure/
    │           │                       ├── MybatisPlusSampleTest.java
    │           │                       ├── MybatisPlusTestApplication.java
    │           │                       ├── Sample.java
    │           │                       └── SampleMapper.java
    │           └── resources/
    │               ├── application.yml
    │               └── schema.sql
    ├── mybatis-plus-spring-boot-autoconfigure/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   └── java/
    │       │       └── com/
    │       │           └── baomidou/
    │       │               └── mybatisplus/
    │       │                   └── autoconfigure/
    │       │                       ├── ConfigurationCustomizer.java
    │       │                       ├── DdlApplicationRunner.java
    │       │                       ├── DdlAutoConfiguration.java
    │       │                       ├── IdentifierGeneratorAutoConfiguration.java
    │       │                       ├── MybatisDependsOnDatabaseInitializationDetector.java
    │       │                       ├── MybatisPlusInnerInterceptorAutoConfiguration.java
    │       │                       ├── MybatisPlusLanguageDriverAutoConfiguration.java
    │       │                       ├── MybatisPlusProperties.java
    │       │                       ├── MybatisPlusPropertiesCustomizer.java
    │       │                       ├── SafetyEncryptProcessor.java
    │       │                       ├── SpringBootVFS.java
    │       │                       ├── SqlSessionFactoryBeanCustomizer.java
    │       │                       └── package-info.java
    │       └── test/
    │           └── java/
    │               └── com/
    │                   └── baomidou/
    │                       └── mybatisplus/
    │                           └── test/
    │                               ├── MetadataTest.java
    │                               └── MybatisPlusPropertiesTest.java
    ├── mybatis-plus-spring-boot-test-autoconfigure/
    │   ├── build.gradle
    │   └── src/
    │       └── main/
    │           └── java/
    │               └── com/
    │                   └── baomidou/
    │                       └── mybatisplus/
    │                           └── test/
    │                               └── autoconfigure/
    │                                   ├── AutoConfigureMybatisPlus.java
    │                                   ├── MybatisPlusTest.java
    │                                   ├── MybatisPlusTestContextBootstrapper.java
    │                                   └── MybatisPlusTypeExcludeFilter.java
    ├── mybatis-plus-spring-boot3-starter/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   ├── java/
    │       │   │   └── com/
    │       │   │       └── baomidou/
    │       │   │           └── mybatisplus/
    │       │   │               └── autoconfigure/
    │       │   │                   └── MybatisPlusAutoConfiguration.java
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── additional-spring-configuration-metadata.json
    │       │           ├── spring/
    │       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               ├── autoconfigure/
    │           │               │   └── ApplicationTestStartSuccess.java
    │           │               └── test/
    │           │                   ├── MetadataTest.java
    │           │                   ├── MybatisPlusPropertiesTest.java
    │           │                   ├── entity/
    │           │                   │   └── Test.java
    │           │                   ├── mapper/
    │           │                   │   └── TestMapper.java
    │           │                   └── pom/
    │           │                       └── GeneratePomTest.java
    │           └── resources/
    │               ├── application.yml
    │               └── mapper/
    │                   ├── modulea/
    │                   │   └── testa.xml
    │                   └── moduleb/
    │                       └── testb.xml
    ├── mybatis-plus-spring-boot3-starter-test/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── spring/
    │       │           │   └── com.baomidou.mybatisplus.test.autoconfigure.AutoConfigureMybatisPlus.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               └── test/
    │           │                   └── autoconfigure/
    │           │                       ├── MybatisPlusSampleTest.java
    │           │                       ├── MybatisPlusTestApplication.java
    │           │                       ├── Sample.java
    │           │                       └── SampleMapper.java
    │           └── resources/
    │               ├── application.yml
    │               └── schema.sql
    ├── mybatis-plus-spring-boot4-starter/
    │   ├── build.gradle
    │   └── src/
    │       ├── main/
    │       │   ├── java/
    │       │   │   └── com/
    │       │   │       └── baomidou/
    │       │   │           └── mybatisplus/
    │       │   │               └── autoconfigure/
    │       │   │                   └── MybatisPlusAutoConfiguration.java
    │       │   └── resources/
    │       │       └── META-INF/
    │       │           ├── additional-spring-configuration-metadata.json
    │       │           ├── spring/
    │       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
    │       │           └── spring.factories
    │       └── test/
    │           ├── java/
    │           │   └── com/
    │           │       └── baomidou/
    │           │           └── mybatisplus/
    │           │               ├── autoconfigure/
    │           │               │   └── ApplicationTestStartSuccess.java
    │           │               └── test/
    │           │                   ├── MetadataTest.java
    │           │                   ├── MybatisPlusPropertiesTest.java
    │           │                   ├── entity/
    │           │                   │   └── Test.java
    │           │                   ├── mapper/
    │           │                   │   └── TestMapper.java
    │           │                   └── pom/
    │           │                       └── GeneratePomTest.java
    │           └── resources/
    │               ├── application.yml
    │               └── mapper/
    │                   ├── modulea/
    │                   │   └── testa.xml
    │                   └── moduleb/
    │                       └── testb.xml
    └── mybatis-plus-spring-boot4-starter-test/
        ├── build.gradle
        └── src/
            ├── main/
            │   └── resources/
            │       └── META-INF/
            │           ├── spring/
            │           │   └── com.baomidou.mybatisplus.test.autoconfigure.AutoConfigureMybatisPlus.imports
            │           └── spring.factories
            └── test/
                ├── java/
                │   └── com/
                │       └── baomidou/
                │           └── mybatisplus/
                │               └── test/
                │                   └── autoconfigure/
                │                       ├── MybatisPlusSampleTest.java
                │                       ├── MybatisPlusTestApplication.java
                │                       ├── Sample.java
                │                       └── SampleMapper.java
                └── resources/
                    ├── application.yml
                    └── schema.sql
Download .txt
Showing preview only (532K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6019 symbols across 881 files)

FILE: mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/DbType.java
  type DbType (line 27) | @Getter
    method getDbType (line 265) | public static DbType getDbType(String dbType) {
    method mysqlSameType (line 274) | public boolean mysqlSameType() {
    method oracleSameType (line 288) | public boolean oracleSameType() {
    method postgresqlSameType (line 294) | public boolean postgresqlSameType() {

FILE: mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/FieldFill.java
  type FieldFill (line 30) | public enum FieldFill {

FILE: mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/FieldStrategy.java
  type FieldStrategy (line 26) | public enum FieldStrategy {

FILE: mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/IEnum.java
  type IEnum (line 26) | public interface IEnum<T extends Serializable> {
    method getValue (line 31) | T getValue();

FILE: mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/IdType.java
  type IdType (line 26) | @Getter
    method IdType (line 59) | IdType(int key) {

FILE: mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/SqlCondition.java
  class SqlCondition (line 24) | public class SqlCondition {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/InjectorResolver.java
  class InjectorResolver (line 26) | public class InjectorResolver extends MethodResolver {
    method InjectorResolver (line 30) | public InjectorResolver(MybatisMapperAnnotationBuilder annotationBuild...
    method resolve (line 35) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisConfiguration.java
  class MybatisConfiguration (line 58) | public class MybatisConfiguration extends Configuration {
    method MybatisConfiguration (line 82) | public MybatisConfiguration(Environment environment) {
    method MybatisConfiguration (line 90) | public MybatisConfiguration() {
    method addMappedStatement (line 104) | @Override
    method getMapperRegistry (line 119) | @Override
    method addMapper (line 127) | @Override
    method addNewMapper (line 138) | @Deprecated
    method removeMapper (line 150) | @Deprecated
    method addMappers (line 179) | @Override
    method addMappers (line 187) | @Override
    method getMapper (line 195) | @Override
    method hasMapper (line 203) | @Override
    method setDefaultScriptingLanguage (line 213) | @Override
    method setDefaultEnumTypeHandler (line 221) | @Override
    method addKeyGenerator (line 228) | @Override
    method getKeyGeneratorNames (line 233) | @Override
    method getKeyGenerators (line 238) | @Override
    method getKeyGenerator (line 243) | @Override
    method hasKeyGenerator (line 248) | @Override
    method addCache (line 253) | @Override
    method getCacheNames (line 258) | @Override
    method getCaches (line 263) | @Override
    method getCache (line 268) | @Override
    method hasCache (line 273) | @Override
    method addResultMap (line 278) | @Override
    method getResultMapNames (line 285) | @Override
    method getResultMaps (line 290) | @Override
    method getResultMap (line 295) | @Override
    method hasResultMap (line 300) | @Override
    method addParameterMap (line 305) | @Override
    method getParameterMapNames (line 310) | @Override
    method getParameterMaps (line 315) | @Override
    method getParameterMap (line 320) | @Override
    method hasParameterMap (line 325) | @Override
    method getSqlFragments (line 330) | @Override
    method getMappedStatementNames (line 335) | @Override
    method getMappedStatements (line 341) | @Override
    method getMappedStatement (line 347) | @Override
    method getMappedStatement (line 352) | @Override
    method hasStatement (line 360) | @Override
    method newExecutor (line 368) | @Override
    method checkGloballyForDiscriminatedNestedResultMaps (line 374) | @Override
    method checkLocallyForDiscriminatedNestedResultMaps (line 394) | @Override
    class StrictMap (line 409) | protected class StrictMap<V> extends ConcurrentHashMap<String, V> {
      method StrictMap (line 416) | public StrictMap(String name, int initialCapacity, float loadFactor) {
      method StrictMap (line 421) | public StrictMap(String name, int initialCapacity) {
      method StrictMap (line 426) | public StrictMap(String name) {
      method StrictMap (line 431) | public StrictMap(String name, Map<String, ? extends V> m) {
      method conflictMessageProducer (line 445) | public StrictMap<V> conflictMessageProducer(BiFunction<V, V, String>...
      method put (line 450) | @Override
      method containsKey (line 470) | @Override
      method get (line 478) | @Override
      method getShortName (line 491) | private String getShortName(String key) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisMapperAnnotationBuilder.java
  class MybatisMapperAnnotationBuilder (line 68) | public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuil...
    method MybatisMapperAnnotationBuilder (line 79) | public MybatisMapperAnnotationBuilder(Configuration configuration, Cla...
    method parse (line 87) | @Override
    method parserInjector (line 125) | void parserInjector() {
    method canHaveStatement (line 129) | private static boolean canHaveStatement(Method method) {
    method loadXmlResource (line 135) | private void loadXmlResource() {
    method parseCache (line 158) | private void parseCache() {
    method convertToProperties (line 169) | private Properties convertToProperties(Property[] properties) {
    method parseCacheRef (line 180) | private void parseCacheRef() {
    method parseResultMap (line 200) | private String parseResultMap(Method method) {
    method generateResultMapName (line 210) | private String generateResultMapName(Method method) {
    method applyResultMap (line 226) | private void applyResultMap(String resultMapId, Class<?> returnType, A...
    method createDiscriminatorResultMaps (line 237) | private void createDiscriminatorResultMaps(String resultMapId, Class<?...
    method applyDiscriminator (line 251) | private Discriminator applyDiscriminator(String resultMapId, Class<?> ...
    method parseStatement (line 271) | void parseStatement(Method method) {
    method getLanguageDriver (line 348) | private LanguageDriver getLanguageDriver(Method method) {
    method getParameterType (line 357) | private Class<?> getParameterType(Method method) {
    method getReturnType (line 374) | private static Class<?> getReturnType(Method method, Class<?> type) {
    method applyResults (line 440) | private void applyResults(Result[] results, Class<?> resultType, List<...
    method findColumnPrefix (line 460) | private String findColumnPrefix(Result result) {
    method nestedResultMapId (line 468) | private String nestedResultMapId(Result result) {
    method hasNestedResultMap (line 479) | private boolean hasNestedResultMap(Result result) {
    method nestedSelectId (line 486) | private String nestedSelectId(Result result) {
    method isLazy (line 497) | private boolean isLazy(Result result) {
    method hasNestedSelect (line 507) | private boolean hasNestedSelect(Result result) {
    method applyConstructorArgs (line 514) | private void applyConstructorArgs(Arg[] args, Class<?> resultType, Lis...
    method nullOrEmpty (line 532) | private String nullOrEmpty(String value) {
    method handleSelectKeyAnnotation (line 536) | private KeyGenerator handleSelectKeyAnnotation(SelectKey selectKeyAnno...
    method buildSqlSource (line 571) | private SqlSource buildSqlSource(Annotation annotation, Class<?> param...
    method buildSqlSourceFromStrings (line 588) | private SqlSource buildSqlSourceFromStrings(String[] strings, Class<?>...
    method getAnnotationWrapper (line 593) | @SafeVarargs
    method getAnnotationWrapper (line 599) | private Optional<AnnotationWrapper> getAnnotationWrapper(Method method...
    method getMethodReturnType (line 625) | public static Class<?> getMethodReturnType(String mapperFqn, String lo...
    class AnnotationWrapper (line 642) | private static class AnnotationWrapper {
      method AnnotationWrapper (line 648) | AnnotationWrapper(Annotation annotation) {
      method getAnnotation (line 688) | Annotation getAnnotation() {
      method getSqlCommandType (line 692) | SqlCommandType getSqlCommandType() {
      method getDatabaseId (line 696) | String getDatabaseId() {
      method isDirtySelect (line 700) | boolean isDirtySelect() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisMapperBuilderAssistant.java
  class MybatisMapperBuilderAssistant (line 44) | public class MybatisMapperBuilderAssistant extends MapperBuilderAssistant {
    method MybatisMapperBuilderAssistant (line 46) | public MybatisMapperBuilderAssistant(Configuration configuration, Stri...
    method buildResultMapping (line 50) | @Override
    method parseMultipleColumnNames (line 85) | private Set<String> parseMultipleColumnNames(String columnName) {
    method parseCompositeColumnName (line 102) | private List<ResultMapping> parseCompositeColumnName(String columnName) {
    method resolveResultJavaType (line 117) | private Class<?> resolveResultJavaType(Class<?> resultType, String pro...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisMapperRegistry.java
  class MybatisMapperRegistry (line 35) | public class MybatisMapperRegistry extends MapperRegistry {
    method MybatisMapperRegistry (line 41) | public MybatisMapperRegistry(Configuration config) {
    method getMapper (line 46) | @SuppressWarnings("unchecked")
    method hasMapper (line 63) | @Override
    method removeMapper (line 71) | protected <T> void removeMapper(Class<T> type) {
    method addMapper (line 76) | @Override
    method getMappers (line 103) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisMethodResolver.java
  class MybatisMethodResolver (line 28) | public class MybatisMethodResolver extends MethodResolver {
    method MybatisMethodResolver (line 33) | public MybatisMethodResolver(MybatisMapperAnnotationBuilder annotation...
    method resolve (line 39) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisParameterHandler.java
  class MybatisParameterHandler (line 50) | public class MybatisParameterHandler extends DefaultParameterHandler {
    method MybatisParameterHandler (line 66) | public MybatisParameterHandler(MappedStatement mappedStatement, Object...
    method processParameter (line 75) | public void processParameter(Object parameter) {
    method process (line 84) | private void process(Object parameter) {
    method populateKeys (line 118) | protected void populateKeys(TableInfo tableInfo, MetaObject metaObject...
    method insertFill (line 139) | protected void insertFill(MetaObject metaObject, TableInfo tableInfo) {
    method updateFill (line 147) | protected void updateFill(MetaObject metaObject, TableInfo tableInfo) {
    method getParameters (line 165) | @SuppressWarnings({"rawtypes", "unchecked"})
    method extractParameters (line 198) | @SuppressWarnings({"rawtypes", "unchecked"})
    method toCollection (line 220) | @SuppressWarnings("unchecked")

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisPlusVersion.java
  class MybatisPlusVersion (line 32) | public class MybatisPlusVersion {
    method MybatisPlusVersion (line 34) | private MybatisPlusVersion() {
    method getVersion (line 37) | public static String getVersion() {
    method determineSpringBootVersion (line 41) | private static String determineSpringBootVersion() {
    method getImplementationVersion (line 64) | private static String getImplementationVersion(JarFile jarFile) throws...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisSqlSessionFactoryBuilder.java
  class MybatisSqlSessionFactoryBuilder (line 44) | public class MybatisSqlSessionFactoryBuilder extends SqlSessionFactoryBu...
    method build (line 46) | @SuppressWarnings("Duplicates")
    method build (line 64) | @SuppressWarnings("Duplicates")
    method build (line 82) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisXMLConfigBuilder.java
  class MybatisXMLConfigBuilder (line 54) | public class MybatisXMLConfigBuilder extends BaseBuilder {
    method MybatisXMLConfigBuilder (line 62) | public MybatisXMLConfigBuilder(Reader reader) {
    method MybatisXMLConfigBuilder (line 66) | public MybatisXMLConfigBuilder(Reader reader, String environment) {
    method MybatisXMLConfigBuilder (line 70) | public MybatisXMLConfigBuilder(Reader reader, String environment, Prop...
    method MybatisXMLConfigBuilder (line 74) | public MybatisXMLConfigBuilder(Class<? extends Configuration> configCl...
    method MybatisXMLConfigBuilder (line 79) | public MybatisXMLConfigBuilder(InputStream inputStream) {
    method MybatisXMLConfigBuilder (line 83) | public MybatisXMLConfigBuilder(InputStream inputStream, String environ...
    method MybatisXMLConfigBuilder (line 87) | public MybatisXMLConfigBuilder(InputStream inputStream, String environ...
    method MybatisXMLConfigBuilder (line 91) | public MybatisXMLConfigBuilder(Class<? extends Configuration> configCl...
    method MybatisXMLConfigBuilder (line 96) | private MybatisXMLConfigBuilder(Class<? extends Configuration> configC...
    method parse (line 106) | public Configuration parse() {
    method parseConfiguration (line 115) | private void parseConfiguration(XNode root) {
    method settingsAsProperties (line 138) | private Properties settingsAsProperties(XNode context) {
    method loadCustomVfsImpl (line 154) | private void loadCustomVfsImpl(Properties props) throws ClassNotFoundE...
    method loadCustomLogImpl (line 169) | private void loadCustomLogImpl(Properties props) {
    method typeAliasesElement (line 174) | private void typeAliasesElement(XNode context) {
    method pluginsElement (line 199) | private void pluginsElement(XNode context) throws Exception {
    method objectFactoryElement (line 212) | private void objectFactoryElement(XNode context) throws Exception {
    method objectWrapperFactoryElement (line 222) | private void objectWrapperFactoryElement(XNode context) throws Excepti...
    method reflectorFactoryElement (line 230) | private void reflectorFactoryElement(XNode context) throws Exception {
    method propertiesElement (line 238) | private void propertiesElement(XNode context) throws Exception {
    method settingsElement (line 262) | private void settingsElement(Properties props) {
    method environmentsElement (line 297) | private void environmentsElement(XNode context) throws Exception {
    method databaseIdProviderElement (line 318) | private void databaseIdProviderElement(XNode context) throws Exception {
    method transactionManagerElement (line 338) | private TransactionFactory transactionManagerElement(XNode context) th...
    method dataSourceElement (line 349) | private DataSourceFactory dataSourceElement(XNode context) throws Exce...
    method typeHandlersElement (line 360) | private void typeHandlersElement(XNode context) {
    method mappersElement (line 388) | private void mappersElement(XNode context) throws Exception {
    method isSpecifiedEnvironment (line 425) | private boolean isSpecifiedEnvironment(String id) {
    method newConfig (line 435) | private static Configuration newConfig(Class<? extends Configuration> ...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisXMLLanguageDriver.java
  class MybatisXMLLanguageDriver (line 40) | public class MybatisXMLLanguageDriver extends XMLLanguageDriver {
    method createParameterHandler (line 42) | @Override
    method createSqlSource (line 49) | @Override
    method createSqlSource (line 55) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisXMLMapperBuilder.java
  class MybatisXMLMapperBuilder (line 58) | public class MybatisXMLMapperBuilder extends BaseBuilder {
    method MybatisXMLMapperBuilder (line 65) | @Deprecated
    method MybatisXMLMapperBuilder (line 72) | @Deprecated
    method MybatisXMLMapperBuilder (line 79) | public MybatisXMLMapperBuilder(InputStream inputStream, Configuration ...
    method MybatisXMLMapperBuilder (line 85) | public MybatisXMLMapperBuilder(InputStream inputStream, Configuration ...
    method MybatisXMLMapperBuilder (line 91) | private MybatisXMLMapperBuilder(XPathParser parser, Configuration conf...
    method parse (line 100) | public void parse() {
    method getSqlFragment (line 111) | public XNode getSqlFragment(String refid) {
    method configurationElement (line 115) | private void configurationElement(XNode context) {
    method buildStatementFromContext (line 133) | private void buildStatementFromContext(List<XNode> list) {
    method buildStatementFromContext (line 140) | private void buildStatementFromContext(List<XNode> list, String requir...
    method cacheRefElement (line 152) | private void cacheRefElement(XNode context) {
    method cacheElement (line 165) | private void cacheElement(XNode context) {
    method parameterMapElement (line 180) | private void parameterMapElement(List<XNode> list) {
    method resultMapElements (line 207) | private void resultMapElements(List<XNode> list) {
    method resultMapElement (line 217) | private ResultMap resultMapElement(XNode resultMapNode) {
    method resultMapElement (line 221) | private ResultMap resultMapElement(XNode resultMapNode, List<ResultMap...
    method inheritEnclosingType (line 259) | protected Class<?> inheritEnclosingType(XNode resultMapNode, Class<?> ...
    method processConstructorElement (line 272) | private void processConstructorElement(XNode resultChild, Class<?> res...
    method processDiscriminatorElement (line 284) | private Discriminator processDiscriminatorElement(XNode context, Class...
    method sqlElement (line 304) | private void sqlElement(List<XNode> list) {
    method sqlElement (line 311) | private void sqlElement(List<XNode> list, String requiredDatabaseId) {
    method databaseIdMatchesCurrent (line 322) | private boolean databaseIdMatchesCurrent(String id, String databaseId,...
    method buildResultMappingFromContext (line 337) | private ResultMapping buildResultMappingFromContext(XNode context, Cla...
    method processNestedResultMappings (line 364) | private String processNestedResultMappings(XNode context, List<ResultM...
    method validateCollection (line 375) | protected void validateCollection(XNode context, Class<?> enclosingTyp...
    method bindMapperForNamespace (line 387) | private void bindMapperForNamespace() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisXMLScriptBuilder.java
  class MybatisXMLScriptBuilder (line 73) | public class MybatisXMLScriptBuilder extends BaseBuilder {
    method MybatisXMLScriptBuilder (line 81) | public MybatisXMLScriptBuilder(Configuration configuration, XNode cont...
    method MybatisXMLScriptBuilder (line 85) | public MybatisXMLScriptBuilder(Configuration configuration, XNode cont...
    method initNodeHandlerMap (line 92) | private void initNodeHandlerMap() {
    method parseScriptNode (line 104) | public SqlSource parseScriptNode() {
    method cacheStr (line 118) | private synchronized static String cacheStr(String str) {
    method replaceLeadingAndTrailingWhitespace (line 143) | public static String replaceLeadingAndTrailingWhitespace(String str) {
    method parseDynamicTags (line 148) | protected MixedSqlNode parseDynamicTags(XNode node) {
    type NodeHandler (line 180) | private interface NodeHandler {
      method handleNode (line 181) | void handleNode(XNode nodeToHandle, List<SqlNode> targetContents);
    class BindHandler (line 184) | private class BindHandler implements NodeHandler {
      method BindHandler (line 185) | public BindHandler() {
      method handleNode (line 189) | @Override
    class TrimHandler (line 198) | private class TrimHandler implements NodeHandler {
      method TrimHandler (line 199) | public TrimHandler() {
      method handleNode (line 203) | @Override
    class WhereHandler (line 215) | private class WhereHandler implements NodeHandler {
      method WhereHandler (line 216) | public WhereHandler() {
      method handleNode (line 220) | @Override
    class SetHandler (line 228) | private class SetHandler implements NodeHandler {
      method SetHandler (line 229) | public SetHandler() {
      method handleNode (line 233) | @Override
    class ForEachHandler (line 241) | private class ForEachHandler implements NodeHandler {
      method ForEachHandler (line 242) | public ForEachHandler() {
      method handleNode (line 246) | @Override
    class IfHandler (line 261) | private class IfHandler implements NodeHandler {
      method IfHandler (line 262) | public IfHandler() {
      method handleNode (line 266) | @Override
    class OtherwiseHandler (line 275) | private class OtherwiseHandler implements NodeHandler {
      method OtherwiseHandler (line 276) | public OtherwiseHandler() {
      method handleNode (line 280) | @Override
    class ChooseHandler (line 287) | private class ChooseHandler implements NodeHandler {
      method ChooseHandler (line 288) | public ChooseHandler() {
      method handleNode (line 292) | @Override
      method handleWhenOtherwiseNodes (line 302) | private void handleWhenOtherwiseNodes(XNode chooseSqlNode, List<SqlN...
      method getDefaultSqlNode (line 315) | private SqlNode getDefaultSqlNode(List<SqlNode> defaultSqlNodes) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/assist/AbstractSqlRunner.java
  class AbstractSqlRunner (line 38) | public abstract class AbstractSqlRunner implements ISqlRunner {
    method parse (line 70) | protected String parse(String sql, Object... args) {
    method getParams (line 95) | protected Map<String, Object> getParams(Object... args) {
    method sqlMap (line 124) | protected Map<String, Object> sqlMap(String sql, Object... args) {
    method sqlMap (line 144) | protected Map<String, Object> sqlMap(String sql, IPage<?> page, Object...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/assist/ISqlRunner.java
  type ISqlRunner (line 37) | public interface ISqlRunner {
    method insert (line 94) | boolean insert(String sql, Object... args);
    method delete (line 103) | boolean delete(String sql, Object... args);
    method update (line 112) | boolean update(String sql, Object... args);
    method selectList (line 122) | List<Map<String, Object>> selectList(String sql, Object... args);
    method selectObjs (line 132) | List<Object> selectObjs(String sql, Object... args);
    method selectObj (line 142) | Object selectObj(String sql, Object... args);
    method selectCount (line 151) | long selectCount(String sql, Object... args);
    method selectOne (line 160) | Map<String, Object> selectOne(String sql, Object... args);
    method selectPage (line 171) | <E extends IPage<Map<String, Object>>> E selectPage(E page, String sql...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/batch/BatchMethod.java
  class BatchMethod (line 26) | public class BatchMethod<T> {
    method BatchMethod (line 38) | public BatchMethod(String statementId) {
    method BatchMethod (line 42) | public BatchMethod(String statementId, ParameterConvert<T> parameterCo...
    method getStatementId (line 47) | public String getStatementId() {
    method getParameterConvert (line 51) | public ParameterConvert<T> getParameterConvert() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/batch/BatchSqlSession.java
  class BatchSqlSession (line 32) | public class BatchSqlSession {
    method BatchSqlSession (line 38) | public BatchSqlSession(SqlSession sqlSession) {
    method selectOne (line 42) | public <T> T selectOne(String statement) {
    method selectOne (line 47) | public <T> T selectOne(String statement, Object parameter) {
    method selectList (line 52) | public <E> List<E> selectList(String statement) {
    method selectList (line 57) | public <E> List<E> selectList(String statement, Object parameter) {
    method selectList (line 62) | public <E> List<E> selectList(String statement, Object parameter, RowB...
    method selectMap (line 67) | public <K, V> Map<K, V> selectMap(String statement, String mapKey) {
    method selectMap (line 72) | public <K, V> Map<K, V> selectMap(String statement, Object parameter, ...
    method selectMap (line 77) | public <K, V> Map<K, V> selectMap(String statement, Object parameter, ...
    method getResultBatchList (line 82) | public List<BatchResult> getResultBatchList() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/batch/MybatisBatch.java
  class MybatisBatch (line 59) | public class MybatisBatch<T> {
    method MybatisBatch (line 67) | public MybatisBatch(SqlSessionFactory sqlSessionFactory, Collection<T>...
    method MybatisBatch (line 73) | public MybatisBatch(SqlSessionFactory sqlSessionFactory, Collection<T>...
    method execute (line 85) | public List<BatchResult> execute(String statement) {
    method execute (line 96) | public List<BatchResult> execute(String statement, ParameterConvert<T>...
    method execute (line 107) | public List<BatchResult> execute(boolean autoCommit, String statement) {
    method execute (line 117) | public List<BatchResult> execute(BatchMethod<T> batchMethod) {
    method execute (line 129) | public List<BatchResult> execute(boolean autoCommit, BatchMethod<T> ba...
    method execute (line 141) | public List<BatchResult> execute(boolean autoCommit, String statement,...
    method saveOrUpdate (line 170) | public List<BatchResult> saveOrUpdate(BatchMethod<T> insertMethod, BiP...
    method saveOrUpdate (line 187) | public List<BatchResult> saveOrUpdate(boolean autoCommit, BatchMethod<...
    method toParameter (line 214) | protected Object toParameter(ParameterConvert<T> parameterConvert, T d...
    class Method (line 223) | public static class Method<T> {
      method Method (line 230) | public Method(Class<?> mapperClass) {
      method insert (line 239) | public BatchMethod<T> insert() {
      method insert (line 250) | public <E> BatchMethod<E> insert(Function<E, T> function) {
      method updateById (line 259) | public BatchMethod<T> updateById() {
      method updateById (line 274) | public <E> BatchMethod<E> updateById(Function<E, T> etFunction) {
      method update (line 289) | public <E> BatchMethod<E> update(Function<E, Wrapper<T>> wrapperFunc...
      method update (line 305) | public <E> BatchMethod<E> update(Function<E, T> entityFunction, Func...
      method deleteById (line 321) | public <E> BatchMethod<E> deleteById(Function<E, T> function) {
      method deleteById (line 331) | @SuppressWarnings("TypeParameterHidesVisibleType")
      method get (line 336) | public <E> BatchMethod<E> get(String method) {
      method get (line 340) | public <E> BatchMethod<E> get(String method, ParameterConvert<E> par...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/batch/ParameterConvert.java
  type ParameterConvert (line 22) | @FunctionalInterface
    method convert (line 31) | Object convert(T parameter);

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractLambdaWrapper.java
  class AbstractLambdaWrapper (line 39) | public abstract class AbstractLambdaWrapper<T, Children extends Abstract...
    method columnsToString (line 45) | @Override
    method columnsToString (line 51) | @SafeVarargs
    method columnsToString (line 56) | protected final String columnsToString(boolean onlyColumn, List<SFunct...
    method columnToString (line 60) | @Override
    method columnToString (line 65) | protected String columnToString(SFunction<T, ?> column, boolean onlyCo...
    method groupBy (line 70) | @Override
    method orderBy (line 76) | @Override
    method groupBy (line 82) | @Override
    method groupBy (line 89) | @Override
    method orderByAsc (line 94) | @Override
    method orderByAsc (line 100) | @Override
    method orderByDesc (line 106) | @Override
    method orderByDesc (line 112) | @Override
    method getColumnCache (line 127) | protected ColumnCache getColumnCache(SFunction<T, ?> column) {
    method tryInitCache (line 135) | private void tryInitCache(Class<?> lambdaClass) {
    method getColumnCache (line 147) | private ColumnCache getColumnCache(String fieldName, Class<?> lambdaCl...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java
  class AbstractWrapper (line 49) | @SuppressWarnings({"unchecked"})
    method getEntity (line 86) | @Override
    method setEntity (line 91) | public Children setEntity(T entity) {
    method getEntityClass (line 96) | public Class<T> getEntityClass() {
    method setEntityClass (line 103) | public Children setEntityClass(Class<T> entityClass) {
    method allEq (line 110) | @Override
    method allEq (line 126) | @Override
    method eq (line 144) | @Override
    method ne (line 149) | @Override
    method gt (line 154) | @Override
    method ge (line 159) | @Override
    method lt (line 164) | @Override
    method le (line 169) | @Override
    method like (line 174) | @Override
    method notLike (line 179) | @Override
    method likeLeft (line 184) | @Override
    method likeRight (line 189) | @Override
    method notLikeLeft (line 194) | @Override
    method notLikeRight (line 199) | @Override
    method between (line 204) | @Override
    method notBetween (line 210) | @Override
    method and (line 216) | @Override
    method or (line 221) | @Override
    method nested (line 226) | @Override
    method not (line 231) | @Override
    method or (line 236) | @Override
    method apply (line 241) | @Override
    method last (line 246) | @Override
    method comment (line 254) | @Override
    method first (line 262) | @Override
    method exists (line 270) | @Override
    method notExists (line 276) | @Override
    method isNull (line 281) | @Override
    method isNotNull (line 286) | @Override
    method in (line 291) | @Override
    method in (line 296) | @Override
    method notIn (line 301) | @Override
    method notIn (line 306) | @Override
    method eqSql (line 311) | @Override
    method inSql (line 317) | @Override
    method gtSql (line 323) | @Override
    method geSql (line 329) | @Override
    method ltSql (line 335) | @Override
    method leSql (line 341) | @Override
    method notInSql (line 347) | @Override
    method groupBy (line 353) | @Override
    method groupBy (line 358) | @Override
    method doGroupBy (line 363) | public Children doGroupBy(boolean condition, R column, List<R> columns) {
    method doOrderBy (line 378) | public Children doOrderBy(boolean condition, boolean isAsc, R column, ...
    method orderBy (line 391) | @Override
    method orderBy (line 396) | @Override
    method groupBy (line 401) | @Override
    method groupBy (line 406) | @Override
    method orderBy (line 411) | @Override
    method orderBy (line 417) | @Override
    method having (line 423) | @Override
    method func (line 428) | @Override
    method not (line 437) | protected Children not(boolean condition) {
    method and (line 445) | protected Children and(boolean condition) {
    method likeValue (line 453) | protected Children likeValue(boolean condition, SqlKeyword keyword, R ...
    method addCondition (line 466) | protected Children addCondition(boolean condition, R column, SqlKeywor...
    method addNestedCondition (line 476) | protected Children addNestedCondition(boolean condition, Consumer<Chil...
    method instance (line 487) | protected abstract Children instance();
    method formatSqlMaybeWithParam (line 499) | @SuppressWarnings("SameParameterValue")
    method formatParam (line 529) | protected final String formatParam(String mapping, Object param) {
    method maybeDo (line 543) | protected final Children maybeDo(boolean condition, DoSomething someth...
    method inExpression (line 555) | protected ISqlSegment inExpression(Collection<?> value) {
    method inExpression (line 568) | protected ISqlSegment inExpression(Object[] values) {
    method initNeed (line 579) | protected void initNeed() {
    method clear (line 588) | @Override
    method appendSqlSegments (line 604) | protected void appendSqlSegments(ISqlSegment... sqlSegments) {
    method isUseAnnotationOrderBy (line 613) | public boolean isUseAnnotationOrderBy() {
    method getSqlSegment (line 622) | @Override
    method getSqlComment (line 627) | @Override
    method getSqlFirst (line 635) | @Override
    method getExpression (line 643) | @Override
    method getParamAlias (line 648) | public String getParamAlias() {
    method setParamAlias (line 658) | @SuppressWarnings("unused")
    method columnToSqlSegment (line 670) | protected final ColumnSegment columnToSqlSegment(R column) {
    method columnToString (line 677) | protected String columnToString(R column) {
    method columnsToString (line 684) | protected String columnsToString(R... columns) {
    method columnsToString (line 693) | protected String columnsToString(List<R> columns) {
    method clone (line 697) | @Override
    type DoSomething (line 706) | @FunctionalInterface
      method doIt (line 709) | void doIt();

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/ISqlSegment.java
  type ISqlSegment (line 27) | @FunctionalInterface
    method getSqlSegment (line 33) | String getSqlSegment();

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/SharedString.java
  class SharedString (line 32) | @Data
    method emptyString (line 47) | public static SharedString emptyString() {
    method toEmpty (line 56) | public void toEmpty() {
    method toNull (line 65) | public void toNull() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/Wrapper.java
  class Wrapper (line 36) | @SuppressWarnings("all")
    method getEntity (line 44) | public abstract T getEntity();
    method getSqlSelect (line 46) | public String getSqlSelect() {
    method getSqlSet (line 50) | public String getSqlSet() {
    method getSqlComment (line 54) | public String getSqlComment() {
    method getSqlFirst (line 58) | public String getSqlFirst() {
    method getExpression (line 65) | public abstract MergeSegments getExpression();
    method getCustomSqlSegment (line 78) | public String getCustomSqlSegment() {
    method isEmptyOfWhere (line 97) | public boolean isEmptyOfWhere() {
    method isNonEmptyOfWhere (line 104) | public boolean isNonEmptyOfWhere() {
    method nonEmptyOfWhere (line 108) | @Deprecated
    method isEmptyOfNormal (line 116) | public boolean isEmptyOfNormal() {
    method isNonEmptyOfNormal (line 123) | public boolean isNonEmptyOfNormal() {
    method nonEmptyOfNormal (line 127) | @Deprecated
    method isNonEmptyOfEntity (line 137) | public boolean isNonEmptyOfEntity() {
    method nonEmptyOfEntity (line 152) | @Deprecated
    method fieldStrategyMatch (line 160) | private boolean fieldStrategyMatch(TableInfo tableInfo, T entity, Tabl...
    method isEmptyOfEntity (line 180) | public boolean isEmptyOfEntity() {
    method getTargetSql (line 190) | public String getTargetSql() {
    method clear (line 199) | abstract public void clear();

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Compare.java
  type Compare (line 29) | public interface Compare<Children, R> extends Serializable {
    method allEq (line 37) | default <V> Children allEq(Map<R, V> params) {
    method allEq (line 48) | default <V> Children allEq(Map<R, V> params, boolean null2IsNull) {
    method allEq (line 60) | <V> Children allEq(boolean condition, Map<R, V> params, boolean null2I...
    method allEq (line 69) | default <V> Children allEq(BiPredicate<R, V> filter, Map<R, V> params) {
    method allEq (line 81) | default <V> Children allEq(BiPredicate<R, V> filter, Map<R, V> params,...
    method allEq (line 94) | <V> Children allEq(boolean condition, BiPredicate<R, V> filter, Map<R,...
    method eq (line 103) | default Children eq(R column, Object val) {
    method eq (line 115) | Children eq(boolean condition, R column, Object val);
    method ne (line 124) | default Children ne(R column, Object val) {
    method ne (line 136) | Children ne(boolean condition, R column, Object val);
    method gt (line 145) | default Children gt(R column, Object val) {
    method gt (line 157) | Children gt(boolean condition, R column, Object val);
    method ge (line 166) | default Children ge(R column, Object val) {
    method ge (line 178) | Children ge(boolean condition, R column, Object val);
    method lt (line 187) | default Children lt(R column, Object val) {
    method lt (line 199) | Children lt(boolean condition, R column, Object val);
    method le (line 208) | default Children le(R column, Object val) {
    method le (line 220) | Children le(boolean condition, R column, Object val);
    method between (line 231) | default Children between(R column, Object val1, Object val2) {
    method between (line 244) | Children between(boolean condition, R column, Object val1, Object val2);
    method notBetween (line 254) | default Children notBetween(R column, Object val1, Object val2) {
    method notBetween (line 267) | Children notBetween(boolean condition, R column, Object val1, Object v...
    method like (line 276) | default Children like(R column, Object val) {
    method like (line 288) | Children like(boolean condition, R column, Object val);
    method notLike (line 297) | default Children notLike(R column, Object val) {
    method notLike (line 309) | Children notLike(boolean condition, R column, Object val);
    method notLikeLeft (line 318) | default Children notLikeLeft(R column, Object val) {
    method notLikeLeft (line 330) | Children notLikeLeft(boolean condition, R column, Object val);
    method notLikeRight (line 339) | default Children notLikeRight(R column, Object val) {
    method notLikeRight (line 351) | Children notLikeRight(boolean condition, R column, Object val);
    method likeLeft (line 360) | default Children likeLeft(R column, Object val) {
    method likeLeft (line 372) | Children likeLeft(boolean condition, R column, Object val);
    method likeRight (line 381) | default Children likeRight(R column, Object val) {
    method likeRight (line 393) | Children likeRight(boolean condition, R column, Object val);

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Func.java
  type Func (line 31) | @SuppressWarnings("unchecked")
    method isNull (line 41) | default Children isNull(R column) {
    method isNull (line 53) | Children isNull(boolean condition, R column);
    method isNotNull (line 62) | default Children isNotNull(R column) {
    method isNotNull (line 74) | Children isNotNull(boolean condition, R column);
    method in (line 87) | default Children in(R column, Collection<?> coll) {
    method in (line 103) | Children in(boolean condition, R column, Collection<?> coll);
    method in (line 116) | default Children in(R column, Object... values) {
    method in (line 132) | Children in(boolean condition, R column, Object... values);
    method notIn (line 145) | default Children notIn(R column, Collection<?> coll) {
    method notIn (line 161) | Children notIn(boolean condition, R column, Collection<?> coll);
    method notIn (line 174) | default Children notIn(R column, Object... values) {
    method notIn (line 190) | Children notIn(boolean condition, R column, Object... values);
    method eqSql (line 203) | default Children eqSql(R column, String sql) {
    method eqSql (line 219) | Children eqSql(boolean condition, R column, String sql);
    method inSql (line 231) | default Children inSql(R column, String sql) {
    method inSql (line 246) | Children inSql(boolean condition, R column, String sql);
    method gtSql (line 258) | Children gtSql(boolean condition, R column, String sql);
    method gtSql (line 269) | default Children gtSql(R column, String sql) {
    method geSql (line 283) | Children geSql(boolean condition, R column, String sql);
    method geSql (line 294) | default Children geSql(R column, String sql) {
    method ltSql (line 308) | Children ltSql(boolean condition, R column, String sql);
    method ltSql (line 319) | default Children ltSql(R column, String sql) {
    method leSql (line 333) | Children leSql(boolean condition, R column, String sql);
    method leSql (line 344) | default Children leSql(R column, String inValue) {
    method notInSql (line 358) | default Children notInSql(R column, String inValue) {
    method notInSql (line 373) | Children notInSql(boolean condition, R column, String inValue);
    method groupBy (line 383) | Children groupBy(boolean condition, R column);
    method groupBy (line 392) | default Children groupBy(R column) {
    method groupBy (line 404) | Children groupBy(boolean condition, List<R> columns);
    method groupBy (line 413) | default Children groupBy(List<R> columns) {
    method groupBy (line 425) | default Children groupBy(R column, R... columns) {
    method groupBy (line 438) | Children groupBy(boolean condition, R column, R... columns);
    method groupBy (line 450) | Children groupBy(boolean condition, R column, List<R> columns);
    method orderByAsc (line 460) | default Children orderByAsc(boolean condition, R column) {
    method orderByAsc (line 471) | default Children orderByAsc(R column) {
    method orderByAsc (line 483) | default Children orderByAsc(boolean condition, List<R> columns) {
    method orderByAsc (line 494) | default Children orderByAsc(List<R> columns) {
    method orderByAsc (line 505) | default Children orderByAsc(R column, R... columns) {
    method orderByAsc (line 516) | default Children orderByAsc(boolean condition, R column, R... columns) {
    method orderByAsc (line 529) | default Children orderByAsc(boolean condition, R column, List<R> colum...
    method orderByDesc (line 541) | default Children orderByDesc(boolean condition, R column) {
    method orderByDesc (line 552) | default Children orderByDesc(R column) {
    method orderByDesc (line 564) | default Children orderByDesc(boolean condition, List<R> columns) {
    method orderByDesc (line 573) | default Children orderByDesc(List<R> columns) {
    method orderByDesc (line 583) | default Children orderByDesc(R column, R... columns) {
    method orderByDesc (line 594) | default Children orderByDesc(boolean condition, R column, R... columns) {
    method orderByDesc (line 606) | default Children orderByDesc(boolean condition, R column, List<R> colu...
    method orderBy (line 620) | Children orderBy(boolean condition, boolean isAsc, R column);
    method orderBy (line 631) | Children orderBy(boolean condition, boolean isAsc, List<R> columns);
    method orderBy (line 641) | Children orderBy(boolean condition, boolean isAsc, R column, R... colu...
    method orderBy (line 652) | Children orderBy(boolean condition, boolean isAsc, R column, List<R> c...
    method having (line 664) | default Children having(String sqlHaving, Object... params) {
    method having (line 678) | Children having(boolean condition, String sqlHaving, Object... params);
    method func (line 686) | default Children func(Consumer<Children> consumer) {
    method func (line 698) | Children func(boolean condition, Consumer<Children> consumer);

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Join.java
  type Join (line 27) | public interface Join<Children> extends Serializable {
    method or (line 34) | default Children or() {
    method or (line 44) | Children or(boolean condition);
    method apply (line 57) | default Children apply(String applySql, Object... values) {
    method apply (line 73) | Children apply(boolean condition, String applySql, Object... values);
    method last (line 83) | default Children last(String lastSql) {
    method last (line 96) | Children last(boolean condition, String lastSql);
    method comment (line 107) | default Children comment(String comment) {
    method comment (line 121) | Children comment(boolean condition, String comment);
    method first (line 132) | default Children first(String firstSql) {
    method first (line 147) | Children first(boolean condition, String firstSql);
    method exists (line 158) | default Children exists(String existsSql, Object... values) {
    method exists (line 172) | Children exists(boolean condition, String existsSql, Object... values);
    method notExists (line 183) | default Children notExists(String existsSql, Object... values) {
    method notExists (line 197) | Children notExists(boolean condition, String existsSql, Object... valu...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Nested.java
  type Nested (line 29) | public interface Nested<Param, Children> extends Serializable {
    method and (line 40) | default Children and(Consumer<Param> consumer) {
    method and (line 54) | Children and(boolean condition, Consumer<Param> consumer);
    method or (line 65) | default Children or(Consumer<Param> consumer) {
    method or (line 79) | Children or(boolean condition, Consumer<Param> consumer);
    method nested (line 90) | default Children nested(Consumer<Param> consumer) {
    method nested (line 104) | Children nested(boolean condition, Consumer<Param> consumer);
    method not (line 115) | default Children not(Consumer<Param> consumer) {
    method not (line 129) | Children not(boolean condition, Consumer<Param> consumer);

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/LambdaQueryWrapper.java
  class LambdaQueryWrapper (line 38) | public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, Lamb...
    method LambdaQueryWrapper (line 46) | public LambdaQueryWrapper() {
    method LambdaQueryWrapper (line 50) | public LambdaQueryWrapper(T entity) {
    method LambdaQueryWrapper (line 55) | public LambdaQueryWrapper(Class<T> entityClass) {
    method LambdaQueryWrapper (line 60) | LambdaQueryWrapper(T entity, Class<T> entityClass, SharedString sqlSel...
    method select (line 75) | @Override
    method select (line 91) | @Override
    method select (line 103) | @Override
    method select (line 109) | @Override
    method doSelect (line 118) | protected LambdaQueryWrapper<T> doSelect(boolean condition, List<SFunc...
    method getSqlSelect (line 125) | @Override
    method instance (line 134) | @Override
    method clear (line 140) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/Query.java
  type Query (line 29) | public interface Query<Children, T, R> extends Serializable {
    method select (line 37) | @SuppressWarnings("unchecked")
    method select (line 49) | @SuppressWarnings("unchecked")
    method select (line 60) | default Children select(List<R> columns) {
    method select (line 71) | Children select(boolean condition, List<R> columns);
    method select (line 77) | default Children select(Predicate<TableFieldInfo> predicate) {
    method select (line 92) | Children select(Class<T> entityClass, Predicate<TableFieldInfo> predic...
    method getSqlSelect (line 97) | String getSqlSelect();

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/QueryWrapper.java
  class QueryWrapper (line 39) | public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWra...
    method QueryWrapper (line 47) | public QueryWrapper() {
    method QueryWrapper (line 51) | public QueryWrapper(T entity) {
    method QueryWrapper (line 56) | public QueryWrapper(Class<T> entityClass) {
    method QueryWrapper (line 61) | public QueryWrapper(T entity, String... columns) {
    method QueryWrapper (line 72) | private QueryWrapper(T entity, Class<T> entityClass, AtomicInteger par...
    method checkSqlInjection (line 95) | public QueryWrapper<T> checkSqlInjection() {
    method columnToString (line 100) | @Override
    method select (line 108) | @Override
    method select (line 116) | @Override
    method getSqlSelect (line 123) | @Override
    method lambda (line 131) | public LambdaQueryWrapper<T> lambda() {
    method instance (line 142) | @Override
    method clear (line 148) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/AbstractISegmentList.java
  class AbstractISegmentList (line 31) | public abstract class AbstractISegmentList extends ArrayList<ISqlSegment...
    method addAll (line 56) | @Override
    method transformList (line 78) | protected abstract boolean transformList(List<ISqlSegment> list, ISqlS...
    method flushLastValue (line 83) | private void flushLastValue(List<ISqlSegment> list) {
    method removeAndFlushLast (line 91) | void removeAndFlushLast() {
    method getSqlSegment (line 96) | @Override
    method childrenSqlSegment (line 113) | protected abstract String childrenSqlSegment();
    method clear (line 115) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/ColumnSegment.java
  type ColumnSegment (line 20) | @FunctionalInterface

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/GroupBySegmentList.java
  class GroupBySegmentList (line 31) | public class GroupBySegmentList extends AbstractISegmentList {
    method transformList (line 33) | @Override
    method childrenSqlSegment (line 39) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/HavingSegmentList.java
  class HavingSegmentList (line 32) | public class HavingSegmentList extends AbstractISegmentList {
    method transformList (line 34) | @Override
    method childrenSqlSegment (line 43) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/MatchSegment.java
  type MatchSegment (line 33) | @Getter
    method match (line 48) | public boolean match(ISqlSegment segment) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/MergeSegments.java
  class MergeSegments (line 32) | @Getter
    method add (line 45) | public void add(ISqlSegment... iSqlSegments) {
    method getSqlSegment (line 60) | @Override
    method clear (line 81) | public void clear() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/NormalSegmentList.java
  class NormalSegmentList (line 30) | public class NormalSegmentList extends AbstractISegmentList {
    method NormalSegmentList (line 37) | NormalSegmentList() {
    method transformList (line 41) | @Override
    method childrenSqlSegment (line 83) | @Override
    method clear (line 92) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/OrderBySegmentList.java
  class OrderBySegmentList (line 32) | public class OrderBySegmentList extends AbstractISegmentList {
    method transformList (line 34) | @Override
    method childrenSqlSegment (line 43) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/LambdaUpdateWrapper.java
  class LambdaUpdateWrapper (line 38) | public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, Lam...
    method LambdaUpdateWrapper (line 46) | public LambdaUpdateWrapper() {
    method LambdaUpdateWrapper (line 51) | public LambdaUpdateWrapper(T entity) {
    method LambdaUpdateWrapper (line 57) | public LambdaUpdateWrapper(Class<T> entityClass) {
    method LambdaUpdateWrapper (line 63) | LambdaUpdateWrapper(T entity, Class<T> entityClass, List<String> sqlSe...
    method set (line 78) | @Override
    method setSql (line 86) | @Override
    method setIncrBy (line 93) | @Override
    method setDecrBy (line 101) | @Override
    method getSqlSet (line 109) | @Override
    method instance (line 117) | @Override
    method clear (line 123) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/Update.java
  type Update (line 24) | public interface Update<Children, R> extends Serializable {
    method set (line 33) | default Children set(R column, Object val) {
    method set (line 45) | default Children set(boolean condition, R column, Object val) {
    method set (line 57) | default Children set(R column, Object val, String mapping) {
    method set (line 70) | Children set(boolean condition, R column, Object val, String mapping);
    method setSql (line 81) | default Children setSql(String setSql, Object... params) {
    method setSql (line 95) | Children setSql(boolean condition, String setSql, Object... params);
    method setIncrBy (line 103) | default Children setIncrBy(R column, Number val) {
    method setIncrBy (line 114) | Children setIncrBy(boolean condition, R column, Number val);
    method setDecrBy (line 122) | default Children setDecrBy(R column, Number val) {
    method setDecrBy (line 133) | Children setDecrBy(boolean condition, R column, Number val);
    method getSqlSet (line 138) | String getSqlSet();

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/UpdateWrapper.java
  class UpdateWrapper (line 39) | public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateW...
    method UpdateWrapper (line 47) | public UpdateWrapper() {
    method UpdateWrapper (line 52) | public UpdateWrapper(T entity) {
    method UpdateWrapper (line 58) | private UpdateWrapper(T entity, List<String> sqlSet, AtomicInteger par...
    method checkSqlInjection (line 81) | public UpdateWrapper<T> checkSqlInjection() {
    method columnToString (line 86) | @Override
    method getSqlSet (line 94) | @Override
    method set (line 102) | @Override
    method setSql (line 110) | @Override
    method setIncrBy (line 117) | @Override
    method setDecrBy (line 124) | @Override
    method lambda (line 134) | public LambdaUpdateWrapper<T> lambda() {
    method instance (line 139) | @Override
    method clear (line 145) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java
  class GlobalConfig (line 46) | @Data
    class DbConfig (line 103) | @Data
    class Sequence (line 227) | @Getter

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/enums/SqlKeyword.java
  type SqlKeyword (line 29) | @AllArgsConstructor
    method getSqlSegment (line 58) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/enums/SqlLike.java
  type SqlLike (line 24) | public enum SqlLike {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/enums/SqlMethod.java
  type SqlMethod (line 24) | public enum SqlMethod {
    method SqlMethod (line 105) | SqlMethod(String method, String desc, String sql) {
    method format (line 111) | public String format(Object... args) {
    method getMethod (line 115) | public String getMethod() {
    method getDesc (line 119) | public String getDesc() {
    method getSql (line 123) | public String getSql() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/enums/WrapperKeyword.java
  type WrapperKeyword (line 27) | @AllArgsConstructor
    method getSqlSegment (line 36) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/exceptions/MybatisPlusException.java
  class MybatisPlusException (line 26) | public class MybatisPlusException extends PersistenceException {
    method MybatisPlusException (line 30) | public MybatisPlusException(String message) {
    method MybatisPlusException (line 34) | public MybatisPlusException(Throwable throwable) {
    method MybatisPlusException (line 38) | public MybatisPlusException(String message, Throwable throwable) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/AnnotationHandler.java
  type AnnotationHandler (line 28) | public interface AnnotationHandler {
    method getAnnotation (line 38) | default <T extends Annotation> T getAnnotation(Class<?> beanClass, Cla...
    method isAnnotationPresent (line 50) | default <T extends Annotation> boolean isAnnotationPresent(Class<?> be...
    method getAnnotation (line 62) | default <T extends Annotation> T getAnnotation(Field field, Class<T> a...
    method isAnnotationPresent (line 74) | default <T extends Annotation> boolean isAnnotationPresent(Field field...
    method getAnnotation (line 86) | default <T extends Annotation> T getAnnotation(Method method, Class<T>...
    method isAnnotationPresent (line 98) | default <T extends Annotation> boolean isAnnotationPresent(Method meth...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/CompositeEnumTypeHandler.java
  class CompositeEnumTypeHandler (line 36) | public class CompositeEnumTypeHandler<E extends Enum<E>> implements Type...
    method CompositeEnumTypeHandler (line 42) | public CompositeEnumTypeHandler(Class<E> enumClassType) {
    method setDefaultEnumTypeHandler (line 53) | public static void setDefaultEnumTypeHandler(Class<? extends TypeHandl...
    method setParameter (line 59) | @Override
    method getResult (line 64) | @Override
    method getResult (line 69) | @Override
    method getResult (line 74) | @Override
    method getInstance (line 79) | @SuppressWarnings("unchecked")

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/IJsonTypeHandler.java
  type IJsonTypeHandler (line 37) | public interface IJsonTypeHandler<T> {
    method parse (line 45) | T parse(String json);
    method toJson (line 53) | String toJson(T obj);

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/MetaObjectHandler.java
  type MetaObjectHandler (line 36) | public interface MetaObjectHandler {
    method openInsertFill (line 43) | @Deprecated
    method openInsertFill (line 55) | default boolean openInsertFill(MappedStatement mappedStatement) {
    method openUpdateFill (line 64) | @Deprecated
    method openUpdateFill (line 76) | default boolean openUpdateFill(MappedStatement mappedStatement) {
    method insertFill (line 85) | void insertFill(MetaObject metaObject);
    method updateFill (line 92) | void updateFill(MetaObject metaObject);
    method setFieldValByName (line 101) | default MetaObjectHandler setFieldValByName(String fieldName, Object f...
    method getFieldValByName (line 115) | default Object getFieldValByName(String fieldName, MetaObject metaObje...
    method findTableInfo (line 127) | default TableInfo findTableInfo(MetaObject metaObject) {
    method strictInsertFill (line 136) | default <T, E extends T> MetaObjectHandler strictInsertFill(MetaObject...
    method strictInsertFill (line 145) | default <T, E extends T> MetaObjectHandler strictInsertFill(MetaObject...
    method strictInsertFill (line 154) | default MetaObjectHandler strictInsertFill(TableInfo tableInfo, MetaOb...
    method strictUpdateFill (line 163) | default <T, E extends T> MetaObjectHandler strictUpdateFill(MetaObject...
    method strictUpdateFill (line 172) | default <T, E extends T> MetaObjectHandler strictUpdateFill(MetaObject...
    method strictUpdateFill (line 181) | default MetaObjectHandler strictUpdateFill(TableInfo tableInfo, MetaOb...
    method strictFill (line 195) | default MetaObjectHandler strictFill(boolean insertFill, TableInfo tab...
    method fillStrategy (line 218) | default MetaObjectHandler fillStrategy(MetaObject metaObject, String f...
    method strictFillStrategy (line 234) | default MetaObjectHandler strictFillStrategy(MetaObject metaObject, St...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/MybatisEnumTypeHandler.java
  class MybatisEnumTypeHandler (line 49) | public final class MybatisEnumTypeHandler<E extends Enum<E>> extends Bas...
    method MybatisEnumTypeHandler (line 57) | public MybatisEnumTypeHandler(Class<E> enumClassType) {
    method findEnumValueFieldName (line 78) | public static Optional<String> findEnumValueFieldName(Class<?> clazz) {
    method findEnumValueAnnotationField (line 89) | private static Optional<Field> findEnumValueAnnotationField(Class<?> c...
    method isMpEnums (line 100) | public static boolean isMpEnums(Class<?> clazz) {
    method setNonNullParameter (line 104) | @SuppressWarnings("Duplicates")
    method getNullableResult (line 116) | @Override
    method getNullableResult (line 125) | @Override
    method getNullableResult (line 134) | @Override
    method valueOf (line 143) | private E valueOf(Object value) {
    method equalsValue (line 156) | protected boolean equalsValue(Object sourceValue, Object targetValue) {
    method getValue (line 166) | private Object getValue(Object object) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/PostInitTableInfoHandler.java
  type PostInitTableInfoHandler (line 28) | public interface PostInitTableInfoHandler {
    method creteTableInfo (line 37) | default TableInfo creteTableInfo(Configuration configuration, Class<?>...
    method postTableInfo (line 47) | default void postTableInfo(TableInfo tableInfo, Configuration configur...
    method postFieldInfo (line 57) | default void postFieldInfo(TableFieldInfo fieldInfo, Configuration con...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/StrictFill.java
  class StrictFill (line 29) | @Data
    method of (line 45) | public static <T, E extends T> StrictFill<T, E> of(String fieldName, C...
    method of (line 49) | public static <T, E extends T> StrictFill<T, E> of(String fieldName, S...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/DefaultIdentifierGenerator.java
  class DefaultIdentifierGenerator (line 30) | public class DefaultIdentifierGenerator implements IdentifierGenerator {
    method DefaultIdentifierGenerator (line 38) | @Deprecated
    method DefaultIdentifierGenerator (line 43) | public DefaultIdentifierGenerator(InetAddress inetAddress) {
    method DefaultIdentifierGenerator (line 47) | public DefaultIdentifierGenerator(long workerId, long dataCenterId) {
    method DefaultIdentifierGenerator (line 51) | public DefaultIdentifierGenerator(Sequence sequence) {
    method getFixedIdentifierGenerator (line 63) | public static IdentifierGenerator getFixedIdentifierGenerator(Log log) {
    method nextId (line 68) | @Override
    method getInstance (line 73) | public static DefaultIdentifierGenerator getInstance() {
    class DefaultInstance (line 77) | private static class DefaultInstance {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/IKeyGenerator.java
  type IKeyGenerator (line 28) | public interface IKeyGenerator {
    method executeSql (line 36) | String executeSql(String incrementerName);
    method dbType (line 41) | DbType dbType();

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/IdentifierGenerator.java
  type IdentifierGenerator (line 30) | public interface IdentifierGenerator {
    method assignId (line 38) | default boolean assignId(Object idValue) {
    method nextId (line 48) | Number nextId(Object entity);
    method nextUUID (line 56) | default String nextUUID(Object entity) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/ImadcnIdentifierGenerator.java
  class ImadcnIdentifierGenerator (line 35) | public class ImadcnIdentifierGenerator implements IdentifierGenerator, C...
    method ImadcnIdentifierGenerator (line 40) | public ImadcnIdentifierGenerator(String serverLists) {
    method ImadcnIdentifierGenerator (line 44) | public ImadcnIdentifierGenerator(ZookeeperConfiguration zookeeperConfi...
    method ImadcnIdentifierGenerator (line 48) | public ImadcnIdentifierGenerator(ZookeeperConfiguration zookeeperConfi...
    method configuration (line 56) | private static ZookeeperConfiguration configuration(String serverLists) {
    method nextId (line 62) | @Override
    method nextUUID (line 67) | @Override
    method close (line 72) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/AbstractMethod.java
  class AbstractMethod (line 53) | public abstract class AbstractMethod implements Constants {
    method AbstractMethod (line 74) | protected AbstractMethod(String methodName) {
    method inject (line 82) | public void inject(MapperBuilderAssistant builderAssistant, Class<?> m...
    method hasMappedStatement (line 96) | private boolean hasMappedStatement(String mappedStatement) {
    method sqlLogicSet (line 106) | protected String sqlLogicSet(TableInfo table) {
    method sqlSet (line 120) | protected String sqlSet(boolean logic, boolean ew, TableInfo table, bo...
    method sqlComment (line 137) | protected String sqlComment() {
    method sqlFirst (line 146) | protected String sqlFirst() {
    method convertIfEwParam (line 150) | protected String convertIfEwParam(final String param, final boolean ne...
    method sqlSelectColumns (line 162) | protected String sqlSelectColumns(TableInfo table, boolean queryWrappe...
    method sqlCount (line 180) | protected String sqlCount() {
    method sqlSelectObjsColumns (line 189) | protected String sqlSelectObjsColumns(TableInfo table) {
    method convertChooseEwSelect (line 193) | protected String convertChooseEwSelect(final String otherwise) {
    method sqlWhereByMap (line 201) | @Deprecated
    method sqlWhereEntityWrapper (line 234) | protected String sqlWhereEntityWrapper(boolean newLine, TableInfo tabl...
    method sqlOrderBy (line 256) | protected String sqlOrderBy(TableInfo tableInfo) {
    method filterTableFieldInfo (line 275) | protected String filterTableFieldInfo(List<TableFieldInfo> fieldList, ...
    method optlockVersion (line 290) | protected String optlockVersion(TableInfo tableInfo) {
    method addSelectMappedStatementForTable (line 300) | protected MappedStatement addSelectMappedStatementForTable(Class<?> ma...
    method addSelectMappedStatementForTable (line 318) | protected MappedStatement addSelectMappedStatementForTable(Class<?> ma...
    method addSelectMappedStatementForOther (line 325) | protected MappedStatement addSelectMappedStatementForOther(Class<?> ma...
    method addSelectMappedStatementForOther (line 336) | protected MappedStatement addSelectMappedStatementForOther(Class<?> ma...
    method addInsertMappedStatement (line 343) | protected MappedStatement addInsertMappedStatement(Class<?> mapperClas...
    method addInsertMappedStatement (line 355) | protected MappedStatement addInsertMappedStatement(Class<?> mapperClas...
    method addDeleteMappedStatement (line 365) | protected MappedStatement addDeleteMappedStatement(Class<?> mapperClas...
    method addDeleteMappedStatement (line 373) | protected MappedStatement addDeleteMappedStatement(Class<?> mapperClas...
    method addUpdateMappedStatement (line 380) | protected MappedStatement addUpdateMappedStatement(Class<?> mapperClas...
    method addUpdateMappedStatement (line 391) | protected MappedStatement addUpdateMappedStatement(Class<?> mapperClas...
    method addMappedStatement (line 399) | protected MappedStatement addMappedStatement(Class<?> mapperClass, Str...
    method addMappedStatement (line 419) | protected MappedStatement addMappedStatement(Class<?> mapperClass, Sql...
    method injectMappedStatement (line 434) | public abstract MappedStatement injectMappedStatement(Class<?> mapperC...
    method createSqlSource (line 444) | public SqlSource createSqlSource(Configuration configuration, String s...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/AbstractSqlInjector.java
  class AbstractSqlInjector (line 39) | public abstract class AbstractSqlInjector implements ISqlInjector {
    method inspectInject (line 43) | @Override
    method getMethodList (line 78) | @Deprecated
    method getMethodList (line 92) | public List<AbstractMethod> getMethodList(Configuration configuration,...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/DefaultSqlInjector.java
  class DefaultSqlInjector (line 36) | public class DefaultSqlInjector extends AbstractSqlInjector {
    method getMethodList (line 38) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/ISqlInjector.java
  type ISqlInjector (line 26) | public interface ISqlInjector {
    method inspectInject (line 34) | void inspectInject(MapperBuilderAssistant builderAssistant, Class<?> m...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/SqlRunnerInjector.java
  class SqlRunnerInjector (line 37) | public class SqlRunnerInjector {
    method inject (line 55) | public void inject(Configuration configuration) {
    method hasMappedStatement (line 72) | private boolean hasMappedStatement(String mappedStatement) {
    method createSelectMappedStatement (line 83) | private void createSelectMappedStatement(String mappedStatement, SqlSo...
    method createUpdateMappedStatement (line 102) | private void createUpdateMappedStatement(String mappedStatement, SqlSo...
    method initSelectList (line 117) | private void initSelectList() {
    method initSelectObjs (line 129) | private void initSelectObjs() {
    method initCount (line 141) | private void initCount() {
    method initInsert (line 153) | private void initInsert() {
    method initUpdate (line 165) | private void initUpdate() {
    method initDelete (line 177) | private void initDelete() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Delete.java
  class Delete (line 30) | public class Delete extends AbstractMethod {
    method Delete (line 32) | public Delete() {
    method Delete (line 40) | public Delete(String name) {
    method injectMappedStatement (line 44) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteBatchByIds.java
  class DeleteBatchByIds (line 25) | @Deprecated

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteById.java
  class DeleteById (line 38) | public class DeleteById extends AbstractMethod {
    method DeleteById (line 40) | public DeleteById() {
    method DeleteById (line 48) | public DeleteById(String name) {
    method injectMappedStatement (line 52) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteByIds.java
  class DeleteByIds (line 41) | public class DeleteByIds extends AbstractMethod {
    method DeleteByIds (line 43) | public DeleteByIds() {
    method DeleteByIds (line 51) | public DeleteByIds(String name) {
    method injectMappedStatement (line 55) | @Override
    method getConvertForeachScript (line 69) | protected String getConvertForeachScript(TableInfo tableInfo) {
    method logicDeleteScript (line 81) | public String logicDeleteScript(TableInfo tableInfo, SqlMethod sqlMeth...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteByMap.java
  class DeleteByMap (line 32) | @Deprecated
    method DeleteByMap (line 35) | public DeleteByMap() {
    method DeleteByMap (line 43) | public DeleteByMap(String name) {
    method injectMappedStatement (line 47) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Insert.java
  class Insert (line 38) | public class Insert extends AbstractMethod {
    method Insert (line 47) | public Insert() {
    method Insert (line 55) | public Insert(boolean ignoreAutoIncrementColumn) {
    method Insert (line 65) | public Insert(String name) {
    method Insert (line 74) | public Insert(String name, boolean ignoreAutoIncrementColumn) {
    method injectMappedStatement (line 79) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectBatchByIds.java
  class SelectBatchByIds (line 25) | @Deprecated

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectById.java
  class SelectById (line 30) | public class SelectById extends AbstractMethod {
    method SelectById (line 32) | public SelectById() {
    method SelectById (line 40) | public SelectById(String name) {
    method injectMappedStatement (line 44) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectByIds.java
  class SelectByIds (line 31) | public class SelectByIds extends AbstractMethod {
    method SelectByIds (line 33) | public SelectByIds() {
    method SelectByIds (line 41) | public SelectByIds(String name) {
    method injectMappedStatement (line 45) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectByMap.java
  class SelectByMap (line 32) | @Deprecated
    method SelectByMap (line 35) | public SelectByMap() {
    method SelectByMap (line 43) | public SelectByMap(String name) {
    method injectMappedStatement (line 47) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectCount.java
  class SelectCount (line 30) | public class SelectCount extends AbstractMethod {
    method SelectCount (line 32) | public SelectCount() {
    method SelectCount (line 40) | public SelectCount(String name) {
    method injectMappedStatement (line 44) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectList.java
  class SelectList (line 32) | public class SelectList extends AbstractMethod {
    method SelectList (line 34) | public SelectList() {
    method SelectList (line 42) | public SelectList(String name) {
    method injectMappedStatement (line 46) | @Override
    method getSql (line 52) | protected String getSql(TableInfo tableInfo) {
    method selectWithCursor (line 60) | public String selectWithCursor(ProviderContext context) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectMaps.java
  class SelectMaps (line 32) | public class SelectMaps extends AbstractMethod {
    method SelectMaps (line 34) | public SelectMaps() {
    method SelectMaps (line 42) | public SelectMaps(String name) {
    method injectMappedStatement (line 46) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectMapsPage.java
  class SelectMapsPage (line 33) | @Deprecated
    method SelectMapsPage (line 36) | public SelectMapsPage() {
    method SelectMapsPage (line 44) | public SelectMapsPage(String name) {
    method injectMappedStatement (line 48) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectObjs.java
  class SelectObjs (line 30) | public class SelectObjs extends AbstractMethod {
    method SelectObjs (line 32) | public SelectObjs() {
    method SelectObjs (line 40) | public SelectObjs(String name) {
    method injectMappedStatement (line 44) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectOne.java
  class SelectOne (line 30) | @Deprecated
    method SelectOne (line 33) | public SelectOne() {
    method SelectOne (line 41) | public SelectOne(String name) {
    method injectMappedStatement (line 45) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectPage.java
  class SelectPage (line 34) | @Deprecated
    method SelectPage (line 37) | public SelectPage() {
    method SelectPage (line 45) | public SelectPage(String name) {
    method injectMappedStatement (line 49) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Update.java
  class Update (line 30) | public class Update extends AbstractMethod {
    method Update (line 32) | public Update() {
    method Update (line 40) | public Update(String name) {
    method injectMappedStatement (line 44) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/UpdateById.java
  class UpdateById (line 30) | public class UpdateById extends AbstractMethod {
    method UpdateById (line 32) | public UpdateById() {
    method UpdateById (line 40) | public UpdateById(String name) {
    method injectMappedStatement (line 44) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/mapper/BaseMapper.java
  type BaseMapper (line 104) | public interface BaseMapper<T> extends Mapper<T> {
    method insert (line 111) | int insert(T entity);
    method deleteById (line 118) | default int deleteById(Serializable id) {
    method deleteById (line 129) | default int deleteById(Object obj, boolean useFill) {
    method deleteById (line 154) | int deleteById(T entity);
    method deleteByMap (line 161) | default int deleteByMap(Map<String, Object> columnMap) {
    method delete (line 170) | int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    method deleteBatchIds (line 179) | @Deprecated
    method deleteByIds (line 191) | default int deleteByIds(@Param(Constants.COLL) Collection<?> idList) {
    method deleteByIds (line 212) | default int deleteByIds(@Param(Constants.COLL) Collection<?> collectio...
    method updateById (line 236) | int updateById(@Param(Constants.ENTITY) T entity);
    method update (line 244) | int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER...
    method update (line 253) | default int update(@Param(Constants.WRAPPER) Wrapper<T> updateWrapper) {
    method selectById (line 262) | T selectById(Serializable id);
    method selectByIds (line 270) | List<T> selectByIds(@Param(Constants.COLL) Collection<? extends Serial...
    method selectBatchIds (line 279) | default List<T> selectBatchIds(@Param(Constants.COLL) Collection<? ext...
    method selectByIds (line 290) | void selectByIds(@Param(Constants.COLL) Collection<? extends Serializa...
    method selectBatchIds (line 298) | @Deprecated
    method selectByMap (line 308) | default List<T> selectByMap(Map<String, Object> columnMap) {
    method selectByMap (line 319) | default void selectByMap(Map<String, Object> columnMap, ResultHandler<...
    method selectOne (line 329) | default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
    method selectOne (line 340) | default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper,...
    method selectWithCursor (line 364) | @SelectProvider(type = SelectList.class, method = Constants.SELECT_WIT...
    method exists (line 373) | default boolean exists(Wrapper<T> queryWrapper) {
    method selectCount (line 383) | Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    method selectList (line 390) | List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    method selectList (line 399) | void selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, Res...
    method selectList (line 408) | List<T> selectList(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T>...
    method selectList (line 417) | void selectList(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> qu...
    method selectMaps (line 425) | List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper...
    method selectMaps (line 434) | void selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, Res...
    method selectMaps (line 443) | List<Map<String, Object>> selectMaps(IPage<? extends Map<String, Objec...
    method selectMaps (line 453) | void selectMaps(IPage<? extends Map<String, Object>> page, @Param(Cons...
    method selectObjs (line 461) | <E> List<E> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapp...
    method selectObjs (line 471) | <E> void selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper,...
    method selectPage (line 479) | default <P extends IPage<T>> P selectPage(P page, @Param(Constants.WRA...
    method selectMapsPage (line 490) | default <P extends IPage<Map<String, Object>>> P selectMapsPage(P page...
    method insertOrUpdate (line 501) | default boolean insertOrUpdate(T entity) {
    method insert (line 519) | default List<BatchResult> insert(Collection<T> entityList) {
    method insert (line 530) | default List<BatchResult> insert(Collection<T> entityList, int batchSi...
    method updateById (line 543) | default List<BatchResult> updateById(Collection<T> entityList) {
    method updateById (line 554) | default List<BatchResult> updateById(Collection<T> entityList, int bat...
    method insertOrUpdate (line 567) | default List<BatchResult> insertOrUpdate(Collection<T> entityList) {
    method insertOrUpdate (line 578) | default List<BatchResult> insertOrUpdate(Collection<T> entityList, int...
    method insertOrUpdate (line 599) | default List<BatchResult> insertOrUpdate(Collection<T> entityList, BiP...
    method insertOrUpdate (line 610) | default List<BatchResult> insertOrUpdate(Collection<T> entityList, BiP...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/mapper/Mapper.java
  type Mapper (line 23) | public interface Mapper<T> {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/IPage.java
  type IPage (line 30) | public interface IPage<T> extends Serializable {
    method orders (line 37) | List<OrderItem> orders();
    method optimizeCountSql (line 44) | default boolean optimizeCountSql() {
    method optimizeJoinOfCountSql (line 55) | default boolean optimizeJoinOfCountSql() {
    method searchCount (line 64) | default boolean searchCount() {
    method offset (line 71) | default long offset() {
    method maxLimit (line 84) | default Long maxLimit() {
    method getPages (line 91) | default long getPages() {
    method setPages (line 107) | @Deprecated
    method getRecords (line 118) | List<T> getRecords();
    method setRecords (line 123) | IPage<T> setRecords(List<T> records);
    method getTotal (line 130) | long getTotal();
    method setTotal (line 135) | IPage<T> setTotal(long total);
    method getSize (line 142) | long getSize();
    method setSize (line 147) | IPage<T> setSize(long size);
    method getCurrent (line 154) | long getCurrent();
    method setCurrent (line 159) | IPage<T> setCurrent(long current);
    method convert (line 168) | @SuppressWarnings("unchecked")
    method countId (line 182) | default String countId() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/MapperProxyMetadata.java
  class MapperProxyMetadata (line 30) | @SuppressWarnings("LombokGetterMayBeUsed")
    method MapperProxyMetadata (line 37) | public MapperProxyMetadata(MetaObject metaObject) {
    method getMapperInterface (line 45) | public Class<?> getMapperInterface() {
    method getSqlSession (line 49) | public SqlSession getSqlSession() {
    method toString (line 53) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/OrderFieldInfo.java
  class OrderFieldInfo (line 26) | @Data
    method OrderFieldInfo (line 45) | public OrderFieldInfo(String column, boolean asc, short orderBySort) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/OrderItem.java
  class OrderItem (line 33) | @Getter
    method OrderItem (line 47) | public OrderItem() {
    method OrderItem (line 55) | private OrderItem(String column, boolean asc) {
    method asc (line 65) | public static OrderItem asc(String column) {
    method desc (line 74) | public static OrderItem desc(String column) {
    method withExpression (line 86) | public static OrderItem withExpression(String expression) {
    method withExpression (line 99) | public static OrderItem withExpression(String expression, boolean asc) {
    method ascs (line 108) | public static List<OrderItem> ascs(String... columns) {
    method descs (line 117) | public static List<OrderItem> descs(String... columns) {
    method build (line 121) | private static OrderItem build(String column, boolean asc) {
    method setColumn (line 125) | public OrderItem setColumn(String column) {
    method setAsc (line 131) | public OrderItem setAsc(boolean asc) {
    method toString (line 136) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableFieldInfo.java
  class TableFieldInfo (line 40) | @Getter
    method TableFieldInfo (line 182) | public TableFieldInfo(GlobalConfig globalConfig, TableInfo tableInfo, ...
    method TableFieldInfo (line 194) | @SuppressWarnings({"unchecked", "rawtypes"})
    method chooseFieldStrategy (line 308) | private FieldStrategy chooseFieldStrategy(FieldStrategy fromAnnotation...
    method TableFieldInfo (line 315) | public TableFieldInfo(GlobalConfig globalConfig, TableInfo tableInfo, ...
    method TableFieldInfo (line 327) | public TableFieldInfo(GlobalConfig globalConfig, TableInfo tableInfo, ...
    method initOrderBy (line 379) | private void initOrderBy(TableInfo tableInfo, OrderBy orderBy) {
    method initLogicDelete (line 396) | private void initLogicDelete(GlobalConfig globalConfig, Field field, b...
    method getInsertSqlProperty (line 431) | public String getInsertSqlProperty(final String prefix) {
    method getInsertSqlPropertyMaybeIf (line 445) | public String getInsertSqlPropertyMaybeIf(final String prefix) {
    method getInsertSqlColumn (line 463) | public String getInsertSqlColumn() {
    method getInsertSqlColumnMaybeIf (line 476) | public String getInsertSqlColumnMaybeIf(final String prefix) {
    method getSqlSet (line 491) | public String getSqlSet(final String prefix) {
    method getSqlSet (line 502) | public String getSqlSet(final boolean ignoreIf, final String prefix) {
    method convertIfProperty (line 522) | private String convertIfProperty(String prefix, String property) {
    method getSqlWhere (line 532) | public String getSqlWhere(final String prefix) {
    method getResultMapping (line 546) | ResultMapping getResultMapping(final Configuration configuration) {
    method getVersionOli (line 568) | public String getVersionOli(final String alias, final String prefix) {
    method convertIf (line 586) | private String convertIf(final String sqlScript, final String property...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfo.java
  class TableInfo (line 45) | @Data
    method TableInfo (line 192) | public TableInfo(Configuration configuration, Class<?> entityType) {
    method getSqlStatement (line 206) | @Deprecated
    method havePK (line 216) | public boolean havePK() {
    method getKeySqlSelect (line 225) | public String getKeySqlSelect() {
    method getAllSqlSelect (line 245) | public String getAllSqlSelect() {
    method chooseSelect (line 259) | public String chooseSelect(Predicate<TableFieldInfo> predicate) {
    method chooseSelect (line 277) | public String chooseSelect(Predicate<TableFieldInfo> predicate, List<S...
    method getKeyInsertSqlProperty (line 298) | public String getKeyInsertSqlProperty(final boolean batch, final Strin...
    method getKeyInsertSqlColumn (line 322) | public String getKeyInsertSqlColumn(final boolean batch, final String ...
    method getAllInsertSqlPropertyMaybeIf (line 347) | public String getAllInsertSqlPropertyMaybeIf(final String prefix) {
    method getAllInsertSqlPropertyMaybeIf (line 359) | public String getAllInsertSqlPropertyMaybeIf(final String prefix, bool...
    method getAllInsertSqlColumnMaybeIf (line 378) | public String getAllInsertSqlColumnMaybeIf(final String prefix) {
    method getAllInsertSqlColumnMaybeIf (line 390) | public String getAllInsertSqlColumnMaybeIf(final String prefix, boolea...
    method getAllSqlWhere (line 409) | public String getAllSqlWhere(boolean fistAnd, boolean ignoreLogicDelFi...
    method getAllSqlSet (line 435) | public String getAllSqlSet(boolean ignoreLogicDelFiled, final String p...
    method getLogicDeleteSql (line 453) | public String getLogicDeleteSql(boolean startWithAnd, boolean isWhere) {
    method formatLogicDeleteSql (line 471) | protected String formatLogicDeleteSql(boolean isWhere) {
    method initResultMapIfNeed (line 491) | void initResultMapIfNeed() {
    method setFieldList (line 509) | void setFieldList(List<TableFieldInfo> fieldList) {
    method getFieldList (line 536) | public List<TableFieldInfo> getFieldList() {
    method getOrderByFields (line 540) | public List<OrderFieldInfo> getOrderByFields() {
    method isLogicDelete (line 547) | @Deprecated
    method getPropertyValue (line 560) | public Object getPropertyValue(Object entity, String property) {
    method setPropertyValue (line 576) | public void setPropertyValue(Object entity, String property, Object......
    method newInstance (line 591) | @SuppressWarnings("unchecked")

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfoHelper.java
  class TableInfoHelper (line 55) | public class TableInfoHelper {
    method getTableInfo (line 82) | public static TableInfo getTableInfo(Class<?> clazz) {
    method getSqlScript (line 114) | public static String getSqlScript(ProviderContext context, Function<Ta...
    method getTableInfo (line 128) | public static TableInfo getTableInfo(String tableName) {
    method getTableInfos (line 142) | public static List<TableInfo> getTableInfos() {
    method remove (line 151) | public static void remove(Class<?> entityClass) {
    method initTableInfo (line 163) | public static synchronized TableInfo initTableInfo(MapperBuilderAssist...
    method initTableInfo (line 185) | private static synchronized TableInfo initTableInfo(Configuration conf...
    method initTableName (line 219) | private static PropertySelector initTableName(Class<?> clazz, GlobalCo...
    method initTableNameWithDbConfig (line 293) | private static String initTableNameWithDbConfig(String className, Glob...
    method initTableFields (line 318) | private static void initTableFields(Configuration configuration, Class...
    method isExistTableId (line 395) | public static boolean isExistTableId(Class<?> clazz, List<Field> list) {
    method isExistTableId (line 409) | public static boolean isExistTableId(List<Field> list, AnnotationHandl...
    method isExistTableLogic (line 422) | public static boolean isExistTableLogic(Class<?> clazz, List<Field> li...
    method isExistTableLogic (line 436) | public static boolean isExistTableLogic(List<Field> list, AnnotationHa...
    method isExistOrderBy (line 449) | public static boolean isExistOrderBy(Class<?> clazz, List<Field> list) {
    method isExistOrderBy (line 464) | public static boolean isExistOrderBy(List<Field> list, AnnotationHandl...
    method initTableIdWithAnnotation (line 478) | private static void initTableIdWithAnnotation(GlobalConfig globalConfi...
    method initTableIdWithoutAnnotation (line 535) | private static boolean initTableIdWithoutAnnotation(GlobalConfig globa...
    method checkRelated (line 576) | public static boolean checkRelated(boolean underCamel, String property...
    method getAllFields (line 598) | public static List<Field> getAllFields(Class<?> clazz) {
    method getAllFields (line 613) | public static List<Field> getAllFields(Class<?> clazz, AnnotationHandl...
    method genKeyGenerator (line 623) | public static KeyGenerator genKeyGenerator(String baseStatementId, Tab...
    type PropertySelector (line 652) | @FunctionalInterface
      method selection (line 654) | boolean selection(String property);

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/override/MybatisMapperMethod.java
  class MybatisMapperMethod (line 45) | public class MybatisMapperMethod {
    method MybatisMapperMethod (line 49) | public MybatisMapperMethod(Class<?> mapperInterface, Method method, Co...
    method execute (line 54) | public Object execute(SqlSession sqlSession, Object[] args) {
    method executeForIPage (line 108) | @SuppressWarnings("all")
    method rowCountResult (line 124) | private Object rowCountResult(int rowCount) {
    method executeWithResultHandler (line 140) | private void executeWithResultHandler(SqlSession sqlSession, Object[] ...
    method executeForMany (line 157) | private <E> Object executeForMany(SqlSession sqlSession, Object[] args) {
    method executeForCursor (line 177) | private <T> Cursor<T> executeForCursor(SqlSession sqlSession, Object[]...
    method convertToDeclaredCollection (line 189) | private <E> Object convertToDeclaredCollection(Configuration config, L...
    method convertToArray (line 196) | @SuppressWarnings("unchecked")
    method executeForMap (line 209) | private <K, V> Map<K, V> executeForMap(SqlSession sqlSession, Object[]...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/override/MybatisMapperProxy.java
  class MybatisMapperProxy (line 44) | public class MybatisMapperProxy<T> implements InvocationHandler, Seriali...
    method MybatisMapperProxy (line 55) | public MybatisMapperProxy(SqlSession sqlSession, Class<T> mapperInterf...
    method invoke (line 87) | @Override
    method cachedInvoker (line 99) | private MapperMethodInvoker cachedInvoker(Method method) throws Throwa...
    method getSqlSession (line 121) | public SqlSession getSqlSession() {
    method getMapperInterface (line 125) | public Class<T> getMapperInterface() {
    method getMethodHandleJava9 (line 129) | private MethodHandle getMethodHandleJava9(Method method)
    method getMethodHandleJava8 (line 137) | private MethodHandle getMethodHandleJava8(Method method)
    type MapperMethodInvoker (line 143) | interface MapperMethodInvoker {
      method invoke (line 144) | Object invoke(Object proxy, Method method, Object[] args, SqlSession...
    class PlainMethodInvoker (line 147) | private static class PlainMethodInvoker implements MapperMethodInvoker {
      method PlainMethodInvoker (line 150) | public PlainMethodInvoker(MybatisMapperMethod mapperMethod) {
      method invoke (line 154) | @Override
    class DefaultMethodInvoker (line 160) | private static class DefaultMethodInvoker implements MapperMethodInvok...
      method DefaultMethodInvoker (line 163) | public DefaultMethodInvoker(MethodHandle methodHandle) {
      method invoke (line 168) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/override/MybatisMapperProxyFactory.java
  class MybatisMapperProxyFactory (line 34) | public class MybatisMapperProxyFactory<T> {
    method MybatisMapperProxyFactory (line 41) | public MybatisMapperProxyFactory(Class<T> mapperInterface) {
    method newInstance (line 45) | @SuppressWarnings("unchecked")
    method newInstance (line 50) | public T newInstance(SqlSession sqlSession) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/plugins/IgnoreStrategy.java
  class IgnoreStrategy (line 24) | @Getter

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/plugins/InterceptorIgnoreHelper.java
  class InterceptorIgnoreHelper (line 34) | public abstract class InterceptorIgnoreHelper {
    method handle (line 58) | public static void handle(IgnoreStrategy ignoreStrategy) {
    method clearIgnoreStrategy (line 65) | public static void clearIgnoreStrategy() {
    method hasIgnoreStrategy (line 75) | public static boolean hasIgnoreStrategy() {
    method initSqlParserInfoCache (line 86) | public synchronized static IgnoreStrategy initSqlParserInfoCache(Class...
    method getIgnoreStrategy (line 104) | public static IgnoreStrategy getIgnoreStrategy(String key) {
    method execute (line 124) | public static <T> T execute(IgnoreStrategy ignoreStrategy, Supplier<T>...
    method execute (line 147) | public static void execute(IgnoreStrategy ignoreStrategy, Runnable run...
    method findIgnoreStrategy (line 165) | public static IgnoreStrategy findIgnoreStrategy(Class<?> clz, Method m...
    method initSqlParserInfoCache (line 182) | public static void initSqlParserInfoCache(IgnoreStrategy mapperAnnotat...
    method willIgnoreTenantLine (line 196) | public static boolean willIgnoreTenantLine(String id) {
    method willIgnoreDynamicTableName (line 200) | public static boolean willIgnoreDynamicTableName(String id) {
    method willIgnoreBlockAttack (line 204) | public static boolean willIgnoreBlockAttack(String id) {
    method willIgnoreIllegalSql (line 208) | public static boolean willIgnoreIllegalSql(String id) {
    method willIgnoreDataPermission (line 212) | public static boolean willIgnoreDataPermission(String id) {
    method willIgnoreOthersByKey (line 216) | public static boolean willIgnoreOthersByKey(String id, String key) {
    method willIgnore (line 220) | public static boolean willIgnore(String id, Function<IgnoreStrategy, B...
    method chooseCache (line 243) | private static IgnoreStrategy chooseCache(IgnoreStrategy mapper, Ignor...
    method buildIgnoreStrategy (line 254) | private static IgnoreStrategy buildIgnoreStrategy(String name, Interce...
    method getBoolean (line 265) | private static Boolean getBoolean(String node, String name, String val...
    method getOthers (line 278) | private static Map<String, Boolean> getOthers(String name, String[] va...
    method chooseBoolean (line 296) | private static Boolean chooseBoolean(Boolean mapper, Boolean method) {
    method chooseOthers (line 306) | private static Map<String, Boolean> chooseOthers(Map<String, Boolean> ...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/spi/CompatibleHelper.java
  class CompatibleHelper (line 28) | public class CompatibleHelper {
    method hasCompatibleSet (line 53) | public static boolean hasCompatibleSet() {
    method setCompatibleSet (line 63) | public static void setCompatibleSet(CompatibleSet compatibleSet) {
    method getCompatibleSet (line 74) | public static CompatibleSet getCompatibleSet() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/spi/CompatibleSet.java
  type CompatibleSet (line 28) | public interface CompatibleSet {
    method getSqlSession (line 30) | SqlSession getSqlSession(SqlSessionFactory sessionFactory);
    method closeSqlSession (line 32) | void closeSqlSession(SqlSession session, SqlSessionFactory sessionFact...
    method executeBatch (line 34) | boolean executeBatch(SqlSessionFactory sqlSessionFactory, Log log, Con...
    method getInputStream (line 39) | @Deprecated
    method getBean (line 51) | default <T> T getBean(Class<T> clz) {
    method getProxyTargetObject (line 62) | default Object getProxyTargetObject(Object mapper) {
    method setContext (line 71) | default void setContext(Object context) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/AES.java
  class AES (line 33) | public class AES {
    method encrypt (line 44) | public static byte[] encrypt(byte[] data, byte[] key) {
    method decrypt (line 64) | public static byte[] decrypt(byte[] data, byte[] key) {
    method encrypt (line 84) | public static String encrypt(String data, String key) {
    method decrypt (line 96) | public static String decrypt(String data, String key) {
    method generateRandomKey (line 107) | public static String generateRandomKey() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/AnnotationUtils.java
  class AnnotationUtils (line 30) | @UtilityClass
    method findFirstAnnotation (line 33) | public <T extends Annotation> T findFirstAnnotation(Class<T> annotatio...
    method findFirstAnnotation (line 37) | public <T extends Annotation> T findFirstAnnotation(Class<T> annotatio...
    method findFirstAnnotation (line 54) | public <T extends Annotation> T findFirstAnnotation(Class<T> annotatio...
    method getAnnotation (line 58) | @SuppressWarnings("unchecked")

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/AopUtils.java
  class AopUtils (line 29) | public class
    method isLoadSpringAop (line 56) | public static boolean isLoadSpringAop() {
    method getTargetObject (line 68) | public static <T> T getTargetObject(T proxy) {
    method getCglibProxyTargetObject (line 93) | @SuppressWarnings("unchecked")
    method getJdkDynamicProxyTargetObject (line 111) | @SuppressWarnings("unchecked")

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ArrayUtils.java
  class ArrayUtils (line 26) | public final class ArrayUtils {
    method ArrayUtils (line 28) | private ArrayUtils() {
    method isEmpty (line 37) | public static boolean isEmpty(Object[] array) {
    method isNotEmpty (line 48) | public static boolean isNotEmpty(Object[] array) {
    method isArray (line 59) | public static boolean isArray(Object obj) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Assert.java
  class Assert (line 27) | public final class Assert {
    method isTrue (line 36) | public static void isTrue(boolean expression, String message, Object.....
    method isFalse (line 49) | public static void isFalse(boolean expression, String message, Object....
    method isNull (line 60) | public static void isNull(Object object, String message, Object... par...
    method notNull (line 71) | public static void notNull(Object object, String message, Object... pa...
    method notEmpty (line 82) | public static void notEmpty(String value, String message, Object... pa...
    method notEmpty (line 93) | public static void notEmpty(Collection<?> collection, String message, ...
    method notEmpty (line 104) | public static void notEmpty(Map<?, ?> map, String message, Object... p...
    method isEmpty (line 115) | public static void isEmpty(Map<?, ?> map, String message, Object... pa...
    method notEmpty (line 126) | public static void notEmpty(Object[] array, String message, Object... ...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/BeanUtils.java
  class BeanUtils (line 33) | public final class BeanUtils {
    method BeanUtils (line 35) | private BeanUtils() {
    method beanToMap (line 44) | @SuppressWarnings("unchecked")
    method mapToBean (line 56) | public static <T> T mapToBean(Map<String, ?> map, Class<T> clazz) {
    method beansToMaps (line 68) | public static <T> List<Map<String, Object>> beansToMaps(List<T> beans) {
    method mapsToBeans (line 82) | public static <T> List<T> mapsToBeans(List<? extends Map<String, ?>> m...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ClassUtils.java
  class ClassUtils (line 34) | public final class ClassUtils {
    method ClassUtils (line 56) | private ClassUtils() {
    method isBoolean (line 65) | public static boolean isBoolean(Class<?> type) {
    method isProxy (line 75) | public static boolean isProxy(Class<?> clazz) {
    method getUserClass (line 94) | public static Class<?> getUserClass(Class<?> clazz) {
    method getUserClass (line 107) | public static Class<?> getUserClass(Object object) {
    method newInstance (line 124) | public static <T> T newInstance(Class<T> clazz) {
    method newInstance (line 143) | @SuppressWarnings("unchecked")
    method toClassConfident (line 157) | public static Class<?> toClassConfident(String name) {
    method toClassConfident (line 167) | public static Class<?> toClassConfident(String name, ClassLoader class...
    method loadClass (line 175) | private static Class<?> loadClass(String className, ClassLoader[] clas...
    method getPackageName (line 197) | public static String getPackageName(Class<?> clazz) {
    method getPackageName (line 210) | public static String getPackageName(String fqClassName) {
    method getDefaultClassLoader (line 232) | @Deprecated
    method getClassLoaders (line 255) | private static ClassLoader[] getClassLoaders(ClassLoader classLoader) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/CollectionUtils.java
  class CollectionUtils (line 39) | public class CollectionUtils {
    method isEmpty (line 61) | public static boolean isEmpty(Collection<?> coll) {
    method isNotEmpty (line 71) | public static boolean isNotEmpty(Collection<?> coll) {
    method isEmpty (line 81) | public static boolean isEmpty(Map<?, ?> map) {
    method isNotEmpty (line 91) | public static boolean isNotEmpty(Map<?, ?> map) {
    method newHashMap (line 104) | public static <K, V> HashMap<K, V> newHashMap() {
    method newHashMapWithExpectedSize (line 118) | public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(int expe...
    method computeIfAbsent (line 137) | public static <K, V> V computeIfAbsent(Map<K, V> concurrentHashMap, K ...
    method capacity (line 173) | private static int capacity(int expectedSize) {
    method getCollection (line 200) | public static <K, V> List<V> getCollection(Map<K, V> map, Iterable<K> ...
    method getCollection (line 218) | public static <K, V> List<V> getCollection(Map<K, V> map, Iterable<K> ...
    method toList (line 230) | @SafeVarargs
    method split (line 245) | public static <T> List<List<T>> split(Collection<T> entityList, int ba...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Constants.java
  type Constants (line 26) | public interface Constants extends StringPool, Serializable {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/EncryptUtils.java
  class EncryptUtils (line 28) | public class EncryptUtils {
    method md5Base64 (line 36) | public static String md5Base64(String str) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ExceptionUtils.java
  class ExceptionUtils (line 26) | public final class ExceptionUtils {
    method ExceptionUtils (line 28) | private ExceptionUtils() {
    method mpe (line 38) | public static MybatisPlusException mpe(String msg, Throwable t, Object...
    method mpe (line 48) | public static MybatisPlusException mpe(String msg, Object... params) {
    method mpe (line 58) | public static MybatisPlusException mpe(Throwable t) {
    method throwMpe (line 62) | public static void throwMpe(boolean condition, String msg, Object... p...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/GlobalConfigUtils.java
  class GlobalConfigUtils (line 41) | public class GlobalConfigUtils {
    method currentSessionFactory (line 54) | @Deprecated
    method defaults (line 65) | public static GlobalConfig defaults() {
    method setGlobalConfig (line 77) | public static void setGlobalConfig(Configuration configuration, Global...
    method getGlobalConfig (line 88) | public static GlobalConfig getGlobalConfig(Configuration configuration) {
    method getKeyGenerators (line 94) | public static List<IKeyGenerator> getKeyGenerators(Configuration confi...
    method getIdType (line 98) | public static IdType getIdType(Configuration configuration) {
    method getDbConfig (line 102) | public static GlobalConfig.DbConfig getDbConfig(Configuration configur...
    method getSqlInjector (line 106) | public static ISqlInjector getSqlInjector(Configuration configuration) {
    method getMetaObjectHandler (line 110) | public static Optional<MetaObjectHandler> getMetaObjectHandler(Configu...
    method getAnnotationHandler (line 114) | public static Optional<AnnotationHandler> getAnnotationHandler(Configu...
    method getSuperMapperClass (line 118) | public static Class<?> getSuperMapperClass(Configuration configuration) {
    method isSupperMapperChildren (line 122) | public static boolean isSupperMapperChildren(Configuration configurati...
    method getMapperRegistryCache (line 126) | public static Set<String> getMapperRegistryCache(Configuration configu...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/IdWorker.java
  class IdWorker (line 33) | public class IdWorker {
    method getId (line 50) | public static long getId() {
    method getId (line 59) | public static long getId(Object entity) {
    method getIdStr (line 68) | public static String getIdStr() {
    method getIdStr (line 77) | public static String getIdStr(Object entity) {
    method getMillisecond (line 84) | public static String getMillisecond() {
    method getTimeId (line 92) | public static String getTimeId() {
    method initSequence (line 103) | public static void initSequence(long workerId, long dataCenterId) {
    method setIdentifierGenerator (line 113) | public static void setIdentifierGenerator(IdentifierGenerator identifi...
    method get32UUID (line 120) | public static String get32UUID() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/LambdaUtils.java
  class LambdaUtils (line 36) | public final class LambdaUtils {
    method extract (line 50) | public static <T> LambdaMeta extract(SFunction<T, ?> func) {
    method formatKey (line 77) | public static String formatKey(String key) {
    method installCache (line 86) | public static void installCache(TableInfo tableInfo) {
    method createColumnCacheMap (line 96) | private static Map<String, ColumnCache> createColumnCacheMap(TableInfo...
    method getColumnMap (line 118) | public static Map<String, ColumnCache> getColumnMap(Class<?> clazz) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/MybatisBatchUtils.java
  class MybatisBatchUtils (line 33) | public class MybatisBatchUtils {
    method execute (line 44) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 58) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 72) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 87) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 101) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 116) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 131) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 147) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 160) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 174) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 188) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method execute (line 203) | public static <T> List<BatchResult> execute(SqlSessionFactory sqlSessi...
    method saveOrUpdate (line 222) | public static <T> List<BatchResult> saveOrUpdate(SqlSessionFactory sql...
    method saveOrUpdate (line 242) | public static <T> List<BatchResult> saveOrUpdate(SqlSessionFactory sql...
    method saveOrUpdate (line 262) | public static <T> List<BatchResult> saveOrUpdate(SqlSessionFactory sql...
    method saveOrUpdate (line 283) | public static <T> List<BatchResult> saveOrUpdate(SqlSessionFactory sql...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/MybatisUtils.java
  class MybatisUtils (line 42) | @Slf4j
    method newJsonTypeHandler (line 58) | public static TypeHandler<?> newJsonTypeHandler(Class<? extends TypeHa...
    method getSqlSessionFactory (line 91) | public static SqlSessionFactory getSqlSessionFactory(MybatisMapperProx...
    method getSqlSessionFactory (line 103) | public static SqlSessionFactory getSqlSessionFactory(SqlSession sqlSes...
    method getMybatisMapperProxy (line 121) | public static MybatisMapperProxy<?> getMybatisMapperProxy(Object mappe...
    method extractMapperProxy (line 136) | public static Object extractMapperProxy(Object mapper) {
    method getMapperProxy (line 164) | public static MapperProxyMetadata getMapperProxy(Object mapper) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/NetUtils.java
  class NetUtils (line 39) | public class NetUtils {
    method NetUtils (line 45) | public NetUtils(NetProperties netProperties) {
    method findFirstNonLoopbackAddress (line 49) | public InetAddress findFirstNonLoopbackAddress() {
    method isPreferredAddress (line 82) | boolean isPreferredAddress(InetAddress address) {
    method ignoreInterface (line 96) | boolean ignoreInterface(String interfaceName) {
    class NetProperties (line 106) | @Data

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ObjectUtils.java
  class ObjectUtils (line 29) | public class ObjectUtils {
    method isNull (line 34) | public static boolean isNull(Object... objs) {
    method isNotNull (line 46) | public static boolean isNotNull(Object... obj) {
    method isNotEmpty (line 53) | public static boolean isNotEmpty(Object obj) {
    method isEmpty (line 60) | public static boolean isEmpty(Object obj) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ParameterUtils.java
  class ParameterUtils (line 30) | public class ParameterUtils {
    method ParameterUtils (line 32) | private ParameterUtils() {
    method findPage (line 42) | public static Optional<IPage> findPage(Object parameterObject) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/PluginUtils.java
  class PluginUtils (line 42) | public abstract class PluginUtils {
    method realTarget (line 56) | @SuppressWarnings("unchecked")
    method getMetaObject (line 73) | public static MetaObject getMetaObject(Object object) {
    method setAdditionalParameter (line 83) | public static void setAdditionalParameter(BoundSql boundSql, Map<Strin...
    method mpBoundSql (line 87) | public static MPBoundSql mpBoundSql(BoundSql boundSql) {
    method mpStatementHandler (line 91) | public static MPStatementHandler mpStatementHandler(StatementHandler s...
    class MPStatementHandler (line 100) | public static class MPStatementHandler {
      method MPStatementHandler (line 103) | MPStatementHandler(MetaObject statementHandler) {
      method parameterHandler (line 107) | public ParameterHandler parameterHandler() {
      method mappedStatement (line 111) | public MappedStatement mappedStatement() {
      method executor (line 115) | public Executor executor() {
      method mPBoundSql (line 119) | public MPBoundSql mPBoundSql() {
      method boundSql (line 123) | public BoundSql boundSql() {
      method configuration (line 127) | public Configuration configuration() {
      method get (line 131) | @SuppressWarnings("unchecked")
    class MPBoundSql (line 140) | public static class MPBoundSql {
      method MPBoundSql (line 145) | MPBoundSql(BoundSql boundSql) {
      method sql (line 150) | public String sql() {
      method sql (line 154) | public void sql(String sql) {
      method parameterMappings (line 158) | public List<ParameterMapping> parameterMappings() {
      method parameterMappings (line 163) | public void parameterMappings(List<ParameterMapping> parameterMappin...
      method parameterObject (line 167) | public Object parameterObject() {
      method additionalParameters (line 171) | public Map<String, Object> additionalParameters() {
      method get (line 175) | @SuppressWarnings("unchecked")

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ReflectionKit.java
  class ReflectionKit (line 41) | public final class ReflectionKit {
    method getFieldValue (line 74) | @Deprecated
    method getSuperClassGenericType (line 98) | public static Class<?> getSuperClassGenericType(final Class<?> clazz, ...
    method getFieldMap (line 115) | public static Map<String, Field> getFieldMap(Class<?> clazz) {
    method getFieldList (line 127) | public static List<Field> getFieldList(Class<?> clazz) {
    method excludeOverrideSuperField (line 164) | public static Map<String, Field> excludeOverrideSuperField(Field[] fie...
    method isPrimitiveOrWrapper (line 182) | @Deprecated
    method resolvePrimitiveIfNecessary (line 188) | public static Class<?> resolvePrimitiveIfNecessary(Class<?> clazz) {
    method setAccessible (line 200) | @Deprecated

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Sequence.java
  class Sequence (line 35) | public class Sequence {
    method Sequence (line 87) | public Sequence(InetAddress inetAddress) {
    method initLog (line 101) | private void initLog() {
    method Sequence (line 113) | public Sequence(long workerId, long datacenterId) {
    method parseIdTimestamp (line 126) | public static long parseIdTimestamp(long id) {
    method getDatacenterId (line 133) | protected long getDatacenterId(long maxDatacenterId) {
    method nextId (line 170) | public synchronized long nextId() {
    method tilNextMillis (line 211) | protected long tilNextMillis(long lastTimestamp) {
    method timeGen (line 219) | protected long timeGen() {
    method getMaxWorkerId (line 226) | protected long getMaxWorkerId(long datacenterId, long maxWorkerId) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/SerializationUtils.java
  class SerializationUtils (line 26) | public class SerializationUtils {
    method clone (line 40) | @SuppressWarnings("unchecked")
    method serialize (line 55) | public static byte[] serialize(Object object) {
    method deserialize (line 75) | public static Object deserialize(byte[] bytes) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/SetAccessibleAction.java
  class SetAccessibleAction (line 26) | @Deprecated
    method SetAccessibleAction (line 30) | public SetAccessibleAction(T obj) {
    method run (line 34) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/StringPool.java
  type StringPool (line 36) | public interface StringPool {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/StringUtils.java
  class StringUtils (line 35) | public final class StringUtils {
    method isBlank (line 72) | public static boolean isBlank(CharSequence cs) {
    method toStringTrim (line 90) | public static String toStringTrim(Object o) {
    method isNotBlank (line 97) | public static boolean isNotBlank(CharSequence cs) {
    method isEmpty (line 101) | public static boolean isEmpty(CharSequence cs) {
    method isNotEmpty (line 105) | public static boolean isNotEmpty(CharSequence cs) {
    method isCamel (line 118) | public static boolean isCamel(String str) {
    method isNotColumnName (line 128) | public static boolean isNotColumnName(String str) {
    method getTargetColumn (line 138) | public static String getTargetColumn(String column) {
    method camelToUnderline (line 151) | public static String camelToUnderline(String param) {
    method underlineToCamel (line 173) | public static String underlineToCamel(String param) {
    method firstToLowerCase (line 199) | public static String firstToLowerCase(String param) {
    method matches (line 213) | public static boolean matches(String regex, String input) {
    method sqlArgsFill (line 231) | @Deprecated
    method replace (line 253) | @Deprecated
    method sqlParam (line 277) | @Deprecated
    method quotaMark (line 295) | @Deprecated
    method quotaMarkList (line 312) | @Deprecated
    method concatCapitalize (line 321) | public static String concatCapitalize(String concatStr, final String s...
    method checkValNotNull (line 344) | public static boolean checkValNotNull(Object object) {
    method checkValNull (line 357) | public static boolean checkValNull(Object object) {
    method containsUpperCase (line 367) | public static boolean containsUpperCase(String word) {
    method isCapitalMode (line 383) | public static boolean isCapitalMode(String word) {
    method isMixedMode (line 393) | public static boolean isMixedMode(String word) {
    method endsWith (line 421) | public static boolean endsWith(String str, String suffix) {
    method endsWith (line 437) | private static boolean endsWith(String str, String suffix, boolean ign...
    method isCharSequence (line 454) | public static boolean isCharSequence(Class<?> clazz) {
    method prefixToLower (line 465) | public static String prefixToLower(String rawString, int index) {
    method removePrefixAfterPrefixToLower (line 481) | public static String removePrefixAfterPrefixToLower(String rawString, ...
    method camelToHyphen (line 493) | public static String camelToHyphen(String input) {
    method wordsAndHyphenAndCamelToConstantCase (line 497) | private static String wordsAndHyphenAndCamelToConstantCase(String inpu...
    method shouldReplace (line 525) | private static boolean shouldReplace(char c) {
    method wordsToHyphenCase (line 529) | private static String wordsToHyphenCase(String s) {
    method equals (line 571) | public static boolean equals(final CharSequence cs1, final CharSequenc...
    method sqlInjectionReplaceBlank (line 605) | public static String sqlInjectionReplaceBlank(String str) {
    method replaceAllBlank (line 627) | public static String replaceAllBlank(String str) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/SystemClock.java
  class SystemClock (line 38) | public class SystemClock {
    method SystemClock (line 43) | private SystemClock(long period) {
    method instance (line 49) | private static SystemClock instance() {
    method now (line 53) | public static long now() {
    method nowDate (line 57) | public static String nowDate() {
    method scheduleClockUpdating (line 61) | private void scheduleClockUpdating() {
    method currentTimeMillis (line 70) | private long currentTimeMillis() {
    class InstanceHolder (line 74) | private static class InstanceHolder {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableNameParser.java
  class TableNameParser (line 40) | public final class TableNameParser {
    method TableNameParser (line 91) | public TableNameParser(String sql) {
    method accept (line 103) | public void accept(TableNameVisitor visitor) {
    method safeGetToken (line 145) | private SqlToken safeGetToken(int index) {
    type TableNameVisitor (line 152) | public interface TableNameVisitor {
      method visit (line 156) | void visit(SqlToken name);
    method fetchAllTokens (line 165) | private List<SqlToken> fetchAllTokens(String sql) {
    method isOracleSpecialDelete (line 190) | private static boolean isOracleSpecialDelete(String current, List<SqlT...
    method isCreateIndex (line 202) | private boolean isCreateIndex(String current, List<SqlToken> tokens, i...
    method isCreateTableIfNotExist (line 214) | private boolean isCreateTableIfNotExist(String current, List<SqlToken>...
    method isOnDuplicateKeyUpdate (line 230) | private boolean isOnDuplicateKeyUpdate(String current, int index) {
    method hasIthToken (line 243) | private static boolean hasIthToken(List<SqlToken> tokens, int currentI...
    method isFromToken (line 247) | private static boolean isFromToken(String currentToken) {
    method skipDuplicateKeyUpdateIndex (line 251) | private int skipDuplicateKeyUpdateIndex(int index) {
    method processFromToken (line 256) | private static void processFromToken(List<SqlToken> tokens, int index,...
    method processNonAliasedMultiTables (line 272) | private static void processNonAliasedMultiTables(List<SqlToken> tokens...
    method processAliasedMultiTables (line 283) | private static void processAliasedMultiTables(List<SqlToken> tokens, i...
    method shouldProcessMultipleTables (line 305) | private static boolean shouldProcessMultipleTables(final String nextTo...
    method hasMoreTokens (line 309) | private static boolean hasMoreTokens(List<SqlToken> tokens, int index) {
    method visitNameToken (line 313) | private static void visitNameToken(SqlToken token, TableNameVisitor vi...
    method tables (line 328) | public Collection<String> tables() {
    class SqlToken (line 340) | public static class SqlToken implements Comparable<SqlToken> {
      method SqlToken (line 345) | private SqlToken(int start, int end, String value) {
      method getStart (line 351) | public int getStart() {
      method getEnd (line 355) | public int getEnd() {
      method getValue (line 359) | public String getValue() {
      method compareTo (line 363) | @Override
      method toString (line 368) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Wrappers.java
  class Wrappers (line 32) | public final class Wrappers {
    method Wrappers (line 39) | private Wrappers() {
    method query (line 49) | public static <T> QueryWrapper<T> query() {
    method query (line 60) | public static <T> QueryWrapper<T> query(T entity) {
    method query (line 71) | public static <T> QueryWrapper<T> query(Class<T> entityClass) {
    method lambdaQuery (line 81) | public static <T> LambdaQueryWrapper<T> lambdaQuery() {
    method lambdaQuery (line 92) | public static <T> LambdaQueryWrapper<T> lambdaQuery(T entity) {
    method lambdaQuery (line 104) | public static <T> LambdaQueryWrapper<T> lambdaQuery(Class<T> entityCla...
    method update (line 114) | public static <T> UpdateWrapper<T> update() {
    method update (line 125) | public static <T> UpdateWrapper<T> update(T entity) {
    method lambdaUpdate (line 135) | public static <T> LambdaUpdateWrapper<T> lambdaUpdate() {
    method lambdaUpdate (line 146) | public static <T> LambdaUpdateWrapper<T> lambdaUpdate(T entity) {
    method lambdaUpdate (line 158) | public static <T> LambdaUpdateWrapper<T> lambdaUpdate(Class<T> entityC...
    method emptyWrapper (line 169) | @SuppressWarnings("unchecked")
    class EmptyWrapper (line 180) | private static class EmptyWrapper<T> extends QueryWrapper<T> {
      method getEntity (line 184) | @Override
      method setEntity (line 189) | @Override
      method setEntityClass (line 194) | @Override
      method getEntityClass (line 199) | @Override
      method getSqlSelect (line 204) | @Override
      method getExpression (line 209) | @Override
      method isEmptyOfWhere (line 214) | @Override
      method isEmptyOfNormal (line 219) | @Override
      method isNonEmptyOfEntity (line 224) | @Override
      method isEmptyOfEntity (line 229) | @Override
      method initNeed (line 234) | @Override
      method last (line 238) | @Override
      method getSqlSegment (line 243) | @Override
      method getParamNameValuePairs (line 248) | @Override
      method columnsToString (line 253) | @Override
      method columnToString (line 258) | @Override
      method instance (line 263) | @Override
      method clear (line 268) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/reflect/GenericTypeUtils.java
  class GenericTypeUtils (line 26) | public class GenericTypeUtils {
    method resolveTypeArguments (line 48) | public static Class<?>[] resolveTypeArguments(final Class<?> clazz, fi...
    method setGenericTypeResolver (line 59) | public static void setGenericTypeResolver(IGenericTypeResolver generic...
    method hasGenericTypeResolver (line 69) | public static boolean hasGenericTypeResolver() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/reflect/IGenericTypeResolver.java
  type IGenericTypeResolver (line 25) | public interface IGenericTypeResolver {
    method resolveTypeArguments (line 27) | Class<?>[] resolveTypeArguments(final Class<?> clazz, final Class<?> g...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/reflect/SpringReflectionHelper.java
  class SpringReflectionHelper (line 27) | public class SpringReflectionHelper {
    method resolveTypeArguments (line 29) | public static Class<?>[] resolveTypeArguments(Class<?> clazz, Class<?>...

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/reflect/TypeParameterResolver.java
  class TypeParameterResolver (line 32) | public class TypeParameterResolver {
    method TypeParameterResolver (line 36) | protected TypeParameterResolver(Map<TypeVariable<?>, Type> map) {
    method resolveClassIndexedParameter (line 49) | public static Type resolveClassIndexedParameter(Type type, Class<?> so...
    method calculateParameterValue (line 60) | public static Type calculateParameterValue(Map<TypeVariable<?>, Type> ...
    method resolveParameterValues (line 74) | public static Map<TypeVariable<?>, Type> resolveParameterValues(Type f...
    method visitType (line 85) | public void visitType(Type type) {
    method visitClass (line 106) | private void visitClass(Class<?> c) {
    method visitParameterizedType (line 118) | private void visitParameterizedType(ParameterizedType parameterized) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlInjectionUtils.java
  class SqlInjectionUtils (line 27) | public class SqlInjectionUtils {
    method check (line 46) | public static boolean check(String value) {
    method removeEscapeCharacter (line 57) | public static String removeEscapeCharacter(String text) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlScriptUtils.java
  class SqlScriptUtils (line 31) | public abstract class SqlScriptUtils implements Constants {
    method convertIf (line 41) | public static String convertIf(final String sqlScript, final String if...
    method convertTrim (line 61) | public static String convertTrim(final String sqlScript, final String ...
    method convertChoose (line 88) | public static String convertChoose(final String whenTest, final String...
    method convertForeach (line 108) | public static String convertForeach(final String sqlScript, final Stri...
    method convertWhere (line 134) | public static String convertWhere(final String sqlScript) {
    method convertSet (line 146) | public static String convertSet(final String sqlScript) {
    method safeParam (line 158) | public static String safeParam(final String param) {
    method safeParam (line 171) | public static String safeParam(final String param, final String mappin...
    method unSafeParam (line 187) | public static String unSafeParam(final String param) {
    method mappingTypeHandler (line 191) | public static String mappingTypeHandler(Class<? extends TypeHandler<?>...
    method mappingJdbcType (line 198) | public static String mappingJdbcType(JdbcType jdbcType) {
    method mappingNumericScale (line 205) | public static String mappingNumericScale(Integer numericScale) {
    method convertParamMapping (line 212) | public static String convertParamMapping(Class<? extends TypeHandler<?...
    method appendMapping (line 229) | private static String appendMapping(String mapping, String other) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtils.java
  class SqlUtils (line 42) | public abstract class SqlUtils implements Constants {
    method concatLike (line 53) | public static String concatLike(Object str, SqlLike type) {
    method findPlaceholder (line 64) | public static List<String> findPlaceholder(String sql) {
    method replaceSqlPlaceholder (line 73) | public static String replaceSqlPlaceholder(String sql, List<String> pl...
    method getSelectBody (line 81) | public static String getSelectBody(String placeHolder, String escapeSy...
    method getSelectBody (line 103) | @SuppressWarnings("all")
    method getNewSelectBody (line 120) | public static String getNewSelectBody(String selectBody, String alisa,...
    method escapeColumn (line 147) | private static String escapeColumn(String column, String escapeSymbol) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/StringEscape.java
  class StringEscape (line 24) | public class StringEscape {
    method isEscapeNeededForString (line 33) | private static boolean isEscapeNeededForString(String str, int len) {
    method escapeRawString (line 80) | public static String escapeRawString(String escapeStr) {
    method escapeString (line 149) | public static String escapeString(String escapeStr) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/BiIntFunction.java
  type BiIntFunction (line 24) | @FunctionalInterface
    method apply (line 34) | R apply(T t, int i);

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/ColumnCache.java
  class ColumnCache (line 27) | @Data
    method ColumnCache (line 46) | public ColumnCache(String column, String columnSelect) {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/IdeaProxyLambdaMeta.java
  class IdeaProxyLambdaMeta (line 32) | public class IdeaProxyLambdaMeta implements LambdaMeta {
    method IdeaProxyLambdaMeta (line 36) | public IdeaProxyLambdaMeta(Proxy func) {
    method getImplMethodName (line 43) | @Override
    method getInstantiatedClass (line 48) | @Override
    method toString (line 53) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/LambdaMeta.java
  type LambdaMeta (line 25) | public interface LambdaMeta {
    method getImplMethodName (line 32) | String getImplMethodName();
    method getInstantiatedClass (line 39) | Class<?> getInstantiatedClass();

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/ReflectLambdaMeta.java
  class ReflectLambdaMeta (line 28) | @Slf4j
    method ReflectLambdaMeta (line 34) | public ReflectLambdaMeta(SerializedLambda lambda, ClassLoader classLoa...
    method getImplMethodName (line 39) | @Override
    method getInstantiatedClass (line 44) | @Override

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/SFunction.java
  type SFunction (line 27) | @FunctionalInterface

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/SerializedLambda.java
  class SerializedLambda (line 35) | @SuppressWarnings("ALL")
    method extract (line 50) | public static SerializedLambda extract(Serializable serializable) {
    method getInstantiatedMethodType (line 70) | public String getInstantiatedMethodType() {
    method getCapturingClass (line 74) | public Class<?> getCapturingClass() {
    method getImplMethodName (line 78) | public String getImplMethodName() {

FILE: mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/ShadowLambdaMeta.java
  class ShadowLambdaMeta (line 28) | public class ShadowLambdaMeta implements LambdaMeta {
    method ShadowLambdaMeta (line 31) | public ShadowLambdaMeta(SerializedLambda lambda) {
    method getImplMethodName (line 35) | @Override
    method getInstantiatedClass (line 40) | @Override

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/code/Overwrite.java
  class Overwrite (line 13) | @Data
    class Content (line 25) | @Data
    type Operate (line 35) | enum Operate {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/code/OverwriteFile.java
  class OverwriteFile (line 13) | @Data
    method addStep (line 18) | public void addStep(Function<Overwrite.OverwriteBuilder, Overwrite.Ove...

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/code/OverwriteRunner.java
  class OverwriteRunner (line 22) | public class OverwriteRunner {
    method main (line 24) | public static void main(String[] args) throws Exception {
    method finJar (line 32) | private static Map<String, OverwriteFile> finJar(List<OverwriteFile> f...
    method findVer (line 53) | private static String findVer() throws IOException {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/code/sub/MapperMethod.java
  class MapperMethod (line 12) | public class MapperMethod extends OverwriteFile {
    method MapperMethod (line 14) | public MapperMethod() {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MethodTest.java
  class MethodTest (line 15) | public class MethodTest {
    class TestMethod (line 17) | static class TestMethod extends AbstractMethod {
      method TestMethod (line 19) | public TestMethod(){
      method TestMethod (line 22) | public TestMethod(String methodName) {
      method injectMappedStatement (line 26) | @Override
    method test (line 33) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MybatisMapperAnnotationBuilderTest.java
  class MybatisMapperAnnotationBuilderTest (line 14) | class MybatisMapperAnnotationBuilderTest {
    method parse (line 16) | @Test
    type AMapper (line 26) | @CacheNamespaceRef(BMapper.class)
    type BMapper (line 31) | @CacheNamespace
    class A (line 36) | @Data
    class B (line 41) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MybatisXMLConfigBuilderTest.java
  class MybatisXMLConfigBuilderTest (line 20) | class MybatisXMLConfigBuilderTest {
    method parse (line 22) | @Test
    type EntityMapper (line 33) | interface EntityMapper extends BaseMapper<Entity> {
    class Entity (line 37) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MybatisXMLLanguageDriverTest.java
  class MybatisXMLLanguageDriverTest (line 10) | @Disabled
    method test1 (line 15) | @Test
    method test2 (line 33) | @Test
    method test3 (line 51) | @Test
    method test4 (line 69) | @Test
    method test5 (line 82) | @Test
    method test6 (line 95) | @Test
    method test7 (line 107) | @Test
    method test8 (line 119) | @Test
    method test9 (line 132) | @Test
    method test10 (line 145) | @Test
    method test11 (line 155) | @Test
    method test12 (line 166) | @Test
    method test13 (line 178) | @Test
    method test14 (line 192) | @Test
    method test15 (line 208) | @Test
    method test16 (line 225) | @Test
    method test17 (line 243) | @Test
    method test18 (line 260) | @Test
    method test19 (line 282) | @Test
    method test20 (line 304) | @Test
    method runMybatis (line 327) | void runMybatis(String script, String sql) {
    method assertSql (line 334) | void assertSql(String script, String sql) {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MybatisXMLScriptBuilderTest.java
  class MybatisXMLScriptBuilderTest (line 7) | public class MybatisXMLScriptBuilderTest {
    method testReplaceLeadingAndTrailingWhitespace (line 9) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapperTest.java
  class AbstractWrapperTest (line 12) | class AbstractWrapperTest {
    method formatSqlMaybeWithParam (line 14) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/BaseWrapperTest.java
  class BaseWrapperTest (line 15) | class BaseWrapperTest {
    method logParams (line 17) | void logParams(AbstractWrapper<?, ?, ?> wrapper) {
    method logSqlSet (line 24) | void logSqlSet(String explain, AbstractWrapper<?, ?, ?> wrapper, Strin...
    method logSqlWhere (line 30) | void logSqlWhere(String explain, AbstractWrapper<?, ?, ?> wrapper, Str...
    class Entity (line 36) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/LambdaQueryWrapperTest.java
  class LambdaQueryWrapperTest (line 23) | class LambdaQueryWrapperTest extends BaseWrapperTest {
    method initTableInfo (line 25) | @BeforeAll
    method testLambdaOrderBySqlSegment (line 31) | @Test
    class Table (line 42) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/QueryWrapperTest.java
  class QueryWrapperTest (line 18) | class QueryWrapperTest extends BaseWrapperTest {
    method testCacheSqlSegment (line 20) | @Test
    method testQueryWrapper (line 37) | @Test
    method testCompare (line 87) | @Test
    method testFunc (line 101) | @Test
    method testJoin (line 120) | @Test
    method testNested (line 132) | @Test
    method testPluralLambda (line 143) | @Test
    method testInEmptyColl (line 153) | @Test
    method testExistsValue (line 159) | @Test
    method testCheckSqlInjection (line 171) | @Test
    method testGroupBy (line 180) | @Test
    method getList (line 191) | private List<Object> getList() {
    method getMap (line 199) | private Map<String, Object> getMap() {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/UpdateWrapperIncrDecrTest.java
  class UpdateWrapperIncrDecrTest (line 21) | class UpdateWrapperIncrDecrTest extends BaseWrapperTest {
    method initUser (line 23) | @BeforeAll
    method testIncrByAndDecrBy (line 29) | @Test
    method testIncrByAndDecrByBigDecimal (line 40) | @Test
    method assertEquals (line 64) | private void assertEquals(Update<?, ?> update, String sql) {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/UpdateWrapperTest.java
  class UpdateWrapperTest (line 13) | class UpdateWrapperTest extends BaseWrapperTest {
    method test1 (line 15) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/handlers/MetaObjectHandlerTest.java
  class MetaObjectHandlerTest (line 24) | class MetaObjectHandlerTest {
    method initXt (line 29) | @BeforeAll
    method strictInsertFill1 (line 34) | @Test
    method strictInsertFill2 (line 59) | @Test
    method strictUpdateFill1 (line 84) | @Test
    method strictUpdateFill2 (line 109) | @Test
    method check (line 134) | void check(Xt xt) {
    class Xt (line 143) | @Data
    class Ojbk (line 159) | @Data
    class OjbkXx (line 164) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/incrementer/ImadcnIdentifierGeneratorTest.java
  class ImadcnIdentifierGeneratorTest (line 12) | @Disabled("不需要参与全局test")
    method init (line 17) | @BeforeAll
    method close (line 22) | @AfterAll
    method nextId (line 27) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/metadata/TableInfoTest.java
  class TableInfoTest (line 11) | public class TableInfoTest {
    class Demo (line 13) | static class Demo {
    method testCreate (line 19) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/plugins/InterceptorIgnoreHelperTest.java
  class InterceptorIgnoreHelperTest (line 15) | class InterceptorIgnoreHelperTest {
    method beforeEach (line 17) | @BeforeEach
    method m1 (line 27) | @Test
    method init (line 64) | private void init(Class<?> clazz) {
    method checkTenantLine (line 71) | private void checkTenantLine(Class<?> clazz, String method, boolean mu...
    method checkOthers (line 80) | private void checkOthers(Class<?> clazz, String method, String key, bo...
    type Xx (line 89) | @InterceptorIgnore(tenantLine = "on", others = {"loli@1", "mn@1"})
      method gg (line 92) | @InterceptorIgnore(others = {"loli@0", "mn@0"})
      method hh (line 95) | @InterceptorIgnore(tenantLine = "off")
      method mm (line 98) | @InterceptorIgnore(illegalSql = "off")
      method ds (line 101) | void ds();
    type Pp (line 104) | interface Pp {
      method pp (line 106) | @InterceptorIgnore(tenantLine = "0", others = "loli@1")
      method dd (line 109) | @InterceptorIgnore(tenantLine = "1")
      method mj (line 112) | @InterceptorIgnore
    type Gg (line 116) | @InterceptorIgnore(tenantLine = "1")
      method uu (line 119) | void uu();
    type ExtPp1 (line 122) | interface ExtPp1 extends Pp {
    type ExtPp2 (line 126) | @InterceptorIgnore(tenantLine = "1")
      method mj (line 129) | @InterceptorIgnore(tenantLine = "false")
    type ExtPp3 (line 133) | @InterceptorIgnore(tenantLine = "true")
      method mj (line 136) | void mj();

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/toolkit/MybatisUtilsTest.java
  class MybatisUtilsTest (line 21) | public class MybatisUtilsTest {
    type MyMapper (line 23) | interface MyMapper {
    method testGetSqlSessionFactoryByDefaultSqlSession (line 27) | @Test
    method testGetSqlSessionFactoryBySqlSessionManager (line 38) | @Test
    method testGetSqlSessionFactoryBySqlSessionTemplate (line 47) | @Test
    class MySqlSessionTemplate (line 55) | static class MySqlSessionTemplate extends SqlSessionTemplate {
      method MySqlSessionTemplate (line 57) | public MySqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    method testGetSqlSessionFactoryByExtendSqlSessionTemplate (line 62) | @Test
    method getDefaultSqlSessionFactory (line 70) | private SqlSessionFactory getDefaultSqlSessionFactory() {
    method getMybatisConfiguration (line 74) | private MybatisConfiguration getMybatisConfiguration() {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/toolkit/SequenceTest.java
  class SequenceTest (line 15) | class SequenceTest {
    method nextId (line 17) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/toolkit/reflect/TypeParameterResolverTest.java
  class TypeParameterResolverTest (line 12) | class TypeParameterResolverTest {
    class CA (line 14) | static class CA<E> {
    class CB (line 17) | static class CB<A, B> extends CA<B> {
    class MyEntity (line 20) | static class MyEntity extends CB<String, Number> {
    type Mapper1 (line 23) | interface Mapper1<T> extends BaseMapper<T> {
    type Mapper2 (line 26) | interface Mapper2 extends Mapper<MyEntity> {
    type Mapper3 (line 29) | interface Mapper3 extends Mapper2 {
    type Mapper4 (line 32) | interface Mapper4<A, B, C> extends Mapper<B> {
    type Mapper5 (line 35) | interface Mapper5 extends Mapper4<Number, MyEntity, Boolean> {
    method test (line 38) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlInjectionUtilsTest.java
  class SqlInjectionUtilsTest (line 12) | class SqlInjectionUtilsTest {
    method sqlTest (line 14) | @Test
    method assertSql (line 84) | private void assertSql(boolean injection, String sql) {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlScriptUtilsTest.java
  class SqlScriptUtilsTest (line 13) | class SqlScriptUtilsTest {
    method convertParamMapping (line 15) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtilsTest.java
  class SqlUtilsTest (line 13) | class SqlUtilsTest {
    method m1 (line 15) | @Test
    method getNewSelectBody (line 22) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/toolkit/support/IdeaProxyLambdaMetaTest.java
  class IdeaProxyLambdaMetaTest (line 20) | class IdeaProxyLambdaMetaTest {
    method test (line 22) | @Test
    method s (line 33) | private static int s() {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/EncryptTest.java
  class EncryptTest (line 16) | class EncryptTest {
    method md5Base64 (line 18) | @Test
    method other (line 24) | @Test
    method testTableInfoHelper (line 31) | @Test
    class Xx (line 44) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/MybatisConfigurationTest.java
  class MybatisConfigurationTest (line 28) | class MybatisConfigurationTest {
    method testXml (line 30) | @Test
    method testBean (line 65) | @Test
    method testUseGeneratedShortKey (line 97) | @Test
    method addMappedStatement (line 110) | private void addMappedStatement(Configuration configuration, int size) {
    method testReload (line 121) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/MybatisMapperAnnotationBuilderTest.java
  class MybatisMapperAnnotationBuilderTest (line 19) | @SuppressWarnings("all")
    method test (line 24) | @Test
    method getReturnType (line 33) | private Class<?> getReturnType(Method method) {
    type Mapper (line 101) | interface Mapper {
      method one (line 103) | Xxx one();
      method xxxPage (line 105) | IPage<Xxx> xxxPage();
      method mapPage (line 107) | IPage<Map<String, Object>> mapPage();
      method selectMap (line 109) | Map<String, Object> selectMap();
    class Xxx (line 112) | class Xxx {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/MybatisParameterHandlerTest.java
  class MybatisParameterHandlerTest (line 36) | class MybatisParameterHandlerTest {
    class Model (line 38) | @Data
      method Model (line 54) | Model(String name) {
      method Model (line 58) | Model(Long id, String name) {
    method test (line 64) | @Test
    method testIgnoreMapperStatement (line 292) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/Role.java
  class Role (line 6) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/User.java
  class User (line 7) | @TableName("sys_user")

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/entity/AEntity.java
  class AEntity (line 5) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/entity/BEntity.java
  class BEntity (line 5) | @Data

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mapper/AMapper.java
  type AMapper (line 6) | public interface AMapper extends BaseMapper<AEntity> {
    method test (line 9) | AEntity test();

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mapper/BMapper.java
  type BMapper (line 6) | public interface BMapper extends BaseMapper<BEntity> {
    method test (line 8) | BEntity test();

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/metadata/TableInfoHelperTest.java
  class TableInfoHelperTest (line 28) | class TableInfoHelperTest {
    class BaseModel (line 30) | @Data
    class ModelOne (line 39) | @Data
    class ModelTwo (line 48) | @Data
    class ModelThree (line 56) | @Data
    class ModelFour (line 66) | @Data
    method testExcludeProperty (line 76) | @Test
    class CustomAnnotation (line 127) | @Data
    method testCustomAnnotation (line 143) | @Test
    method testIsExistTableId (line 159) | @Test
    class ModelFour2 (line 168) | @Data
    method testMoreTableId (line 178) | @Test
    method testPriorityTableId (line 191) | @Test
    method testVersion (line 198) | @Test
    method testLogic (line 211) | @Test
    method testColumnFormat (line 225) | @Test
    class ModelFive (line 241) | @Data
    class ModelSex (line 251) | @Data
    class Logic (line 258) | @Data
    class Versions (line 267) | @Data
    method testTableNamePrefix (line 276) | @Test
    class Table (line 286) | @Data
    method testTableNamePrefix2 (line 292) | @Test
    method getTableInfoInterface (line 302) | @Test
    class Table2 (line 307) | @Data
    method testTableAutoResultMap (line 314) | @Test
    class AutoResultMapTable (line 326) | @Data
    method testNewInstance (line 337) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/override/MybatisMapperMethodTest.java
  class MybatisMapperMethodTest (line 22) | class MybatisMapperMethodTest {
    method m1 (line 24) | @Test
    type xxx (line 31) | interface xxx {
      method map (line 33) | Map<String, Object> map();
    class MethodSignature (line 36) | public static class MethodSignature {
      method MethodSignature (line 48) | public MethodSignature(Class<?> mapperInterface, Method method) {
      method hasRowBounds (line 67) | public boolean hasRowBounds() {
      method extractRowBounds (line 71) | public RowBounds extractRowBounds(Object[] args) {
      method hasResultHandler (line 75) | public boolean hasResultHandler() {
      method extractResultHandler (line 79) | public ResultHandler extractResultHandler(Object[] args) {
      method getMapKey (line 83) | public String getMapKey() {
      method getReturnType (line 87) | public Class<?> getReturnType() {
      method returnsMany (line 91) | public boolean returnsMany() {
      method returnsMap (line 95) | public boolean returnsMap() {
      method returnsVoid (line 99) | public boolean returnsVoid() {
      method returnsCursor (line 103) | public boolean returnsCursor() {
      method returnsOptional (line 113) | public boolean returnsOptional() {
      method getUniqueParamIndex (line 117) | private Integer getUniqueParamIndex(Method method, Class<?> paramTyp...
      method getMapKey (line 132) | private String getMapKey(Method method) {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/pom/GeneratePomTest.java
  class GeneratePomTest (line 23) | class GeneratePomTest {
    class Dependency (line 25) | @Data
    method test (line 33) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/pom/ReflectionKitTest.java
  class ReflectionKitTest (line 15) | public class ReflectionKitTest {
    class MyEntity (line 17) | public static class MyEntity {
    type Mapper1 (line 20) | public interface Mapper1<T> extends BaseMapper<T> {
    type Mapper2 (line 23) | public interface Mapper2 extends Mapper<MyEntity> {
    type Mapper3 (line 26) | public interface Mapper3 extends Mapper2 {
    method testSuperClassGenericType (line 29) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/AESTest.java
  class AESTest (line 13) | public class AESTest {
    method encryptDecrypt (line 15) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/AnnotationUtilsTest.java
  class AnnotationUtilsTest (line 21) | public class AnnotationUtilsTest {
    class Demo (line 56) | @Data
    method test (line 88) | @Test
    method test1 (line 94) | @Test
    method test2 (line 101) | @Test
    method test3 (line 108) | @Test
    method test4 (line 115) | @Test
    method test5 (line 122) | @Test
    method test6 (line 129) | @Test
    method test7 (line 136) | @Test
    method test8 (line 145) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/BeanUtilsTest.java
  class BeanUtilsTest (line 19) | class BeanUtilsTest {
    method beanMapConvertTest (line 24) | @Test
    class User (line 44) | @Getter

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/ClassUtilsTest.java
  class ClassUtilsTest (line 16) | class ClassUtilsTest {
    method newInstanceTest (line 21) | @Test
    class Demo (line 34) | private static class Demo {}

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/CollectionUtilsTest.java
  class CollectionUtilsTest (line 21) | class CollectionUtilsTest {
    method testCreateHashMap (line 23) | @Test
    method testSplit (line 53) | @Test
    method newHashMapWithExpectedSize (line 60) | private Map<String, String> newHashMapWithExpectedSize(int size) {
    method newHashMap (line 66) | private Map<String, String> newHashMap(int size) {
    method getTableSize (line 72) | private int getTableSize(Map<String, String> map) throws ReflectiveOpe...
    method getThresholdValue (line 79) | private int getThresholdValue(Map<String, String> map) throws Reflecti...
    method computeIfAbsent (line 85) | private void computeIfAbsent() {

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/LambdaUtilsTest.java
  class LambdaUtilsTest (line 21) | class LambdaUtilsTest {
    method testExtract (line 26) | @Test
    method test (line 38) | private void test(SFunction<TestModel, Object> function) {
    class TestModel (line 48) | @Getter
    class Parent (line 53) | @Getter
    class BaseHolder (line 59) | private abstract static class BaseHolder<T extends Named> {
      method toLambda (line 61) | LambdaMeta toLambda() {
    class TestModelHolder (line 67) | private static class TestModelHolder extends BaseHolder<TestModel> {
    type Named (line 70) | private interface Named {
      method getName (line 71) | String getName();

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/ParameterUtilsTest.java
  class ParameterUtilsTest (line 17) | class ParameterUtilsTest {
    class Page (line 19) | static class Page<T> implements IPage<T> {
      method orders (line 26) | @Override
      method getRecords (line 31) | @Override
      method setRecords (line 36) | @Override
      method getTotal (line 42) | @Override
      method setTotal (line 47) | @Override
      method getSize (line 53) | @Override
      method setSize (line 58) | @Override
      method getCurrent (line 64) | @Override
      method setCurrent (line 69) | @Override
    method testFindPage (line 76) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/PluginUtilsTest.java
  class PluginUtilsTest (line 30) | public class PluginUtilsTest {
    class TestInterceptor (line 32) | @Intercepts({
      method intercept (line 37) | @Override
    method testRealTargetByProxy (line 44) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/ReflectionKitTest.java
  class ReflectionKitTest (line 18) | class ReflectionKitTest {
    class A (line 20) | @Data
    class B (line 36) | @Data
    class C (line 44) | @Data
    class EntityByLombok (line 52) | @Data
    class Entity (line 63) | private static class Entity {
      method getId (line 72) | public Long getId() {
      method setId (line 76) | public void setId(Long id) {
      method getpId (line 80) | public String getpId() {
      method setpId (line 84) | public void setpId(String pId) {
      method getParentId (line 88) | public String getParentId() {
      method setParentId (line 92) | public void setParentId(String parentId) {
    method testGetFieldList (line 97) | @Test
    method testGetFieldMap (line 103) | @Test
    method testGetFieldValue (line 112) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/StringUtilsTest.java
  class StringUtilsTest (line 15) | class StringUtilsTest {
    method camelToUnderlineTest (line 17) | @Test
    method isCapitalModeTest (line 24) | @Test
    method canBeAColumnName (line 35) | @Test
    method getTargetColumn (line 43) | @Test
    method equal (line 53) | @Test

FILE: mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/toolkit/TableNameParserTest.java
  class TableNameParserTest (line 21) | public class TableNameParserTest {
    method testSelectOneTable (line 175) | @Test
    method testSelectTwoTables (line 181) | @Test
    method testSelectThreeTables (line 187) | @Test
    method testSelectOneTableWithAliase (line 193) | @Test
    method testSelectTwoTablesWithAliase (line 199) | @Test
    method testSelectTwoTablesWithAliaseAndNoCondition (line 205) | @Test
    method testSelectThreeTablesWithAliase (line 211) | @Test
    method testSelectWithSubQuery (line 218) | @Test
    method testSelectWithOneJoin (line 223) | @Test
    method testSelectOneJoinWithAliase (line 229) | @Test
    method testSelectOneLeftJoin (line 235) | @Test
    method testShouldIgnoreDual (line 242) | @Test
    method testSelectTwoJoinWithAliase (line 249) | @Test
    method testInsertWithValues (line 255) | @Test
    method testInsertComplex (line 261) | @Test
    method testInsertWithSelect (line 266) | @Test
    method testDelete (line 272) | @Test
    method testOracleSpecialDelete (line 278) | @Test
    method testAlter (line 284) | @Test
    method testAlter2 (line 290) | @Test
    method testDrop (line 296) | @Test
    method testDropFunction (line 302) | @Test
    method testDropProcedure (line 308) | @Test
    method testDropView (line 314) | @Test
    method testDropIndex (line 320) | @Test
    method testUnionAll (line 326) | @Test
    method testMerge (line 332) | @Test
    method testMergeUsingQuery (line 338) | @Test
    method testMergeComplexQuery (line 344) | @Test
    method testMergeComplexQuery2 (line 349) | @Test
    method testCreateTable (line 354) | @Test
    method testCreateGlobalTable (line 360) | @Test
    method testCreateIndex (line 366) | @Test
    method testCreateView (line 372) | @Test
    method testCreateView2 (line 378) | @Test
    method testCreateType (line 384) | @Test
    method testUpdateTable (line 390) | @Test
    method testUpdateTableSubQuery (line 396) | @Test
    method testUpdateTableSubQuery2 (line 402) | @Test
    method testUpdateTableSubQueryWithOracleHint (line 408) | @Test
    method testTruncateTable (line 414) | @Test
    method testSqlWithComment (line 420) | @Test
    method testSqlWithCommentContainingKeyword (line 426) | @Test
    method testSqlWithCommentEndingWithKeyword (line 432) | @Test
    method testSqlWithCommentInTheMiddle (line 438) | @Test
    method testSqlWithCommentInTheMiddleAndEnd (line 444) | @Test
    method testSqlWithMultipleCommentsInTheMiddle (line 450) | @Test
    method testSqlWithMultipleCommentsAndNewlines (line 456) | @Test
    method testSqlWithMultipleCommentsInTheMiddleAndEnd (line 462) | @Test
    method testSelectForUpdate (line 468) | @Test
    method testOnDuplicateKeyUpdate (line 474) | @Test
    method testUpdateIgnore (line 480) | @Test
    method testInsertIgnore (line 489) | @Test
    method testCreateTableIfNotExists (line 495) | @Test
    method testCreateUniqueIndex (line 508) | @Test
    method testCreateFullTextIndex (line 516) | @Test
    method asSet (line 525) | private static Collection<String> asSet(String... a) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/MybatisMapWrapperFactory.java
  class MybatisMapWrapperFactory (line 34) | public class MybatisMapWrapperFactory implements ObjectWrapperFactory {
    method hasWrapperFor (line 36) | @Override
    method getWrapperFor (line 41) | @SuppressWarnings("unchecked")

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/activerecord/AbstractModel.java
  class AbstractModel (line 45) | public abstract class AbstractModel<T extends AbstractModel<?>> implemen...
    method insert (line 54) | public boolean insert() {
    method insertOrUpdate (line 66) | public boolean insertOrUpdate() {
    method deleteById (line 75) | public boolean deleteById(Serializable id) {
    method deleteById (line 87) | public boolean deleteById() {
    method delete (line 102) | public boolean delete(Wrapper<T> queryWrapper) {
    method updateById (line 116) | public boolean updateById() {
    method update (line 133) | public boolean update(Wrapper<T> updateWrapper) {
    method selectAll (line 148) | public List<T> selectAll() {
    method selectById (line 162) | public T selectById(Serializable id) {
    method selectById (line 174) | public T selectById() {
    method selectList (line 184) | public List<T> selectList(Wrapper<T> queryWrapper) {
    method selectOne (line 200) | public T selectOne(Wrapper<T> queryWrapper) {
    method selectPage (line 210) | public <E extends IPage<T>> E selectPage(E page, Wrapper<T> queryWrapp...
    method selectCount (line 228) | public long selectCount(Wrapper<T> queryWrapper) {
    method sqlSession (line 242) | protected SqlSession sqlSession() {
    method sqlStatement (line 251) | protected String sqlStatement(SqlMethod sqlMethod) {
    method sqlStatement (line 260) | protected String sqlStatement(String sqlMethod) {
    method pkVal (line 268) | public Serializable pkVal() {
    method closeSqlSession (line 278) | protected void closeSqlSession(SqlSession sqlSession) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/AbstractChainWrapper.java
  class AbstractChainWrapper (line 42) | @SuppressWarnings({"unchecked"})
    method AbstractChainWrapper (line 55) | public AbstractChainWrapper() {
    method getWrapper (line 58) | public AbstractWrapper<T, R, Param> getWrapper() {
    method setEntity (line 62) | public Children setEntity(T entity) {
    method setEntityClass (line 67) | public Children setEntityClass(Class<T> entityClass) {
    method allEq (line 72) | @Override
    method allEq (line 78) | @Override
    method eq (line 84) | @Override
    method ne (line 90) | @Override
    method gt (line 96) | @Override
    method ge (line 102) | @Override
    method lt (line 108) | @Override
    method le (line 114) | @Override
    method between (line 120) | @Override
    method notBetween (line 126) | @Override
    method like (line 132) | @Override
    method likeLeft (line 138) | @Override
    method likeRight (line 144) | @Override
    method notLike (line 150) | @Override
    method notLikeLeft (line 156) | @Override
    method notLikeRight (line 162) | @Override
    method isNull (line 168) | @Override
    method isNotNull (line 174) | @Override
    method in (line 180) | @Override
    method in (line 186) | @Override
    method notIn (line 192) | @Override
    method notIn (line 198) | @Override
    method eqSql (line 204) | @Override
    method inSql (line 210) | @Override
    method gtSql (line 216) | @Override
    method geSql (line 222) | @Override
    method ltSql (line 228) | @Override
    method leSql (line 234) | @Override
    method notInSql (line 240) | @Override
    method groupBy (line 246) | @Override
    method groupBy (line 252) | @Override
    method groupBy (line 257) | @Override
    method groupBy (line 262) | @Override
    method orderBy (line 267) | @Override
    method orderBy (line 273) | @Override
    method groupBy (line 278) | @Override
    method orderByAsc (line 284) | @Override
    method orderByAsc (line 290) | @Override
    method orderByDesc (line 296) | @Override
    method orderByDesc (line 302) | @Override
    method doOrderByDesc (line 309) | protected Children doOrderByDesc(boolean condition, R column, List<R> ...
    method doOrderByAsc (line 313) | protected Children doOrderByAsc(boolean condition, R column, List<R> c...
    method doOrderBy (line 317) | protected Children doOrderBy(boolean condition, boolean isAsc, R colum...
    method doGroupBy (line 322) | protected Children doGroupBy(boolean condition, R column, List<R> colu...
    method orderBy (line 330) | @Override
    method orderBy (line 335) | @Override
    method having (line 340) | @Override
    method func (line 346) | @Override
    method or (line 354) | @Override
    method apply (line 360) | @Override
    method last (line 366) | @Override
    method comment (line 372) | @Override
    method first (line 378) | @Override
    method exists (line 384) | @Override
    method notExists (line 390) | @Override
    method and (line 396) | @Override
    method or (line 402) | @Override
    method nested (line 408) | @Override
    method not (line 414) | @Override
    method getSqlSegment (line 420) | @Override
    method getSqlFirst (line 425) | @Override
    method getSqlSelect (line 430) | @Override
    method getSqlSet (line 435) | @Override
    method getSqlComment (line 440) | @Override
    method getTargetSql (line 445) | @Override
    method getEntity (line 450) | @Override
    method getExpression (line 455) | @Override
    method getCustomSqlSegment (line 460) | @Override
    method clear (line 465) | @Override
    method clone (line 470) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/ChainWrapper.java
  type ChainWrapper (line 30) | public interface ChainWrapper<T> {
    method getBaseMapper (line 37) | BaseMapper<T> getBaseMapper();
    method getWrapper (line 44) | Wrapper<T> getWrapper();
    method getEntityClass (line 51) | Class<T> getEntityClass();
    method execute (line 60) | default <R> R execute(SFunction<BaseMapper<T>, R> function) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/ChainQuery.java
  type ChainQuery (line 31) | public interface ChainQuery<T> extends ChainWrapper<T> {
    method list (line 38) | default List<T> list() {
    method list (line 49) | default List<T> list(IPage<T> page) {
    method one (line 58) | default T one() {
    method oneOpt (line 68) | default Optional<T> oneOpt() {
    method count (line 77) | default Long count() {
    method exists (line 86) | default boolean exists() {
    method page (line 96) | default <E extends IPage<T>> E page(E page) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/LambdaQueryChainWrapper.java
  class LambdaQueryChainWrapper (line 34) | @SuppressWarnings({"serial"})
    method LambdaQueryChainWrapper (line 40) | public LambdaQueryChainWrapper(BaseMapper<T> baseMapper) {
    method LambdaQueryChainWrapper (line 46) | public LambdaQueryChainWrapper(Class<T> entityClass) {
    method LambdaQueryChainWrapper (line 52) | public LambdaQueryChainWrapper(BaseMapper<T> baseMapper, T entity) {
    method LambdaQueryChainWrapper (line 58) | public LambdaQueryChainWrapper(BaseMapper<T> baseMapper, Class<T> enti...
    method LambdaQueryChainWrapper (line 64) | public LambdaQueryChainWrapper(BaseMapper<T> baseMapper, LambdaQueryWr...
    method select (line 70) | @Override
    method select (line 75) | @Override
    method select (line 81) | @Override
    method doSelect (line 90) | protected LambdaQueryChainWrapper<T> doSelect(boolean condition, List<...
    method select (line 95) | @Override
    method getSqlSelect (line 101) | @Override
    method getBaseMapper (line 106) | @Override
    method getEntityClass (line 111) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/QueryChainWrapper.java
  class QueryChainWrapper (line 34) | @SuppressWarnings({"serial"})
    method QueryChainWrapper (line 41) | public QueryChainWrapper(BaseMapper<T> baseMapper) {
    method QueryChainWrapper (line 48) | public QueryChainWrapper(Class<T> entityClass) {
    method select (line 55) | @Override
    method select (line 61) | @Override
    method getSqlSelect (line 67) | @Override
    method getBaseMapper (line 72) | @Override
    method getEntityClass (line 82) | @Override
    method lambda (line 88) | public LambdaQueryChainWrapper<T> lambda(){

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/update/ChainUpdate.java
  type ChainUpdate (line 27) | public interface ChainUpdate<T> extends ChainWrapper<T> {
    method update (line 35) | default boolean update() {
    method update (line 45) | default boolean update(T entity) {
    method remove (line 54) | default boolean remove() {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/update/LambdaUpdateChainWrapper.java
  class LambdaUpdateChainWrapper (line 30) | public class LambdaUpdateChainWrapper<T> extends AbstractChainWrapper<T,...
    method LambdaUpdateChainWrapper (line 35) | public LambdaUpdateChainWrapper(BaseMapper<T> baseMapper) {
    method LambdaUpdateChainWrapper (line 41) | public LambdaUpdateChainWrapper(Class<T> entityClass) {
    method LambdaUpdateChainWrapper (line 47) | public LambdaUpdateChainWrapper(BaseMapper<T> baseMapper, LambdaUpdate...
    method set (line 53) | @Override
    method setSql (line 59) | @Override
    method setIncrBy (line 75) | @Override
    method setDecrBy (line 90) | @Override
    method getBaseMapper (line 96) | @Override
    method getEntityClass (line 101) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/update/UpdateChainWrapper.java
  class UpdateChainWrapper (line 30) | @SuppressWarnings({"serial"})
    method UpdateChainWrapper (line 37) | public UpdateChainWrapper(BaseMapper<T> baseMapper) {
    method UpdateChainWrapper (line 44) | public UpdateChainWrapper(Class<T> entityClass) {
    method set (line 51) | @Override
    method setSql (line 57) | @Override
    method setIncrBy (line 63) | @Override
    method setDecrBy (line 69) | @Override
    method getSqlSet (line 75) | @Override
    method getBaseMapper (line 80) | @Override
    method getEntityClass (line 85) | @Override
    method lambda (line 90) | public LambdaUpdateChainWrapper<T> lambda(){

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlHelper.java
  class DdlHelper (line 45) | public class DdlHelper {
    method runScript (line 58) | public static void runScript(IDdlGenerator ddlGenerator, Connection co...
    method runScript (line 73) | public static void runScript(IDdlGenerator ddlGenerator, Connection co...
    method runScript (line 89) | public static void runScript(IDdlGenerator ddlGenerator, Connection co...
    method runScript (line 107) | public static void runScript(IDdlGenerator ddlGenerator, Connection co...
    method runScript (line 165) | @Deprecated
    method runScript (line 184) | public static void runScript(IDdlGenerator ddlGenerator,
    method runScript (line 203) | public static void runScript(IDdlGenerator ddlGenerator,
    method runScript (line 221) | public static void runScript(IDdlGenerator ddlGenerator, DataSource da...
    method getInputStream (line 228) | public static InputStream getInputStream(String path) throws Exception {
    method getNowTime (line 232) | protected static String getNowTime() {
    method getScriptRunner (line 236) | public static ScriptRunner getScriptRunner(Connection connection, bool...
    method getDdlGenerator (line 246) | protected static IDdlGenerator getDdlGenerator(String jdbcUrl) throws ...
    method getDatabase (line 265) | public static String getDatabase(String jdbcUrl) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlScript.java
  class DdlScript (line 41) | public class DdlScript {
    method DdlScript (line 76) | public DdlScript(String driverClassName, String url, String user, Stri...
    method DdlScript (line 85) | public DdlScript(String driverClassName, String url, String user, Stri...
    method DdlScript (line 95) | public DdlScript(DataSource dataSource) {
    method DdlScript (line 106) | @Deprecated
    method DdlScript (line 119) | @Deprecated
    method run (line 133) | @Deprecated
    method run (line 146) | @Deprecated
    method scriptRunner (line 163) | public DdlScript scriptRunner(Consumer<ScriptRunner> scriptRunnerConsu...
    method run (line 174) | public void run(String sqlScript) throws Exception {
    method run (line 185) | public void run(String sqlScript, String delimiter) throws Exception {
    method run (line 189) | public void run(Reader reader) throws Exception {
    method run (line 193) | public void run(Reader reader, boolean autoCommit) throws Exception {
    method run (line 197) | public void run(Reader reader, boolean autoCommit, String delimiter) t...
    method run (line 211) | public void run(Connection connection, Reader reader, boolean autoComm...
    method execute (line 235) | @Deprecated
    method run (line 248) | public boolean run(String sqlScript, Consumer<String> exceptionConsume...
    method execute (line 265) | @Deprecated
    method run (line 294) | public boolean run(String sqlScript, String delimiter, Consumer<String...

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlScriptErrorHandler.java
  type DdlScriptErrorHandler (line 30) | @FunctionalInterface
    method handle (line 40) | void handle(String sqlFile, Exception exception) throws SQLException;
    class PrintlnLogErrorHandler (line 45) | class PrintlnLogErrorHandler implements DdlScriptErrorHandler {
      method handle (line 51) | @Override
    class ThrowsErrorHandler (line 60) | class ThrowsErrorHandler implements DdlScriptErrorHandler {
      method handle (line 64) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/IDdl.java
  type IDdl (line 30) | public interface IDdl {
    method runScript (line 37) | void runScript(Consumer<DataSource> consumer);
    method getDdlGenerator (line 42) | default IDdlGenerator getDdlGenerator() {
    method getSqlFiles (line 52) | List<String> getSqlFiles();

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/IDdlGenerator.java
  type IDdlGenerator (line 30) | public interface IDdlGenerator {
    method existTable (line 40) | @Deprecated
    method existTable (line 53) | default boolean existTable(Connection connection) throws SQLException {
    method getDdlHistory (line 65) | default String getDdlHistory() {
    method createDdlHistory (line 74) | String createDdlHistory();
    method selectDdlHistory (line 83) | default String selectDdlHistory(String script, String type) {
    method insertDdlHistory (line 98) | default String insertDdlHistory(String script, String type, String ver...

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/MysqlDdlGenerator.java
  class MysqlDdlGenerator (line 28) | public class MysqlDdlGenerator implements IDdlGenerator {
    method newInstance (line 30) | public static IDdlGenerator newInstance() {
    method existTable (line 34) | @Override
    method createDdlHistory (line 45) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/OracleDdlGenerator.java
  class OracleDdlGenerator (line 33) | public class OracleDdlGenerator implements IDdlGenerator {
    method OracleDdlGenerator (line 41) | public OracleDdlGenerator() {
    method OracleDdlGenerator (line 44) | public OracleDdlGenerator(String schema) {
    method newInstance (line 52) | public static IDdlGenerator newInstance() {
    method existTable (line 56) | @Override
    method existTable (line 71) | @Override
    method getDdlHistory (line 77) | @Override
    method createDdlHistory (line 85) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/PostgreDdlGenerator.java
  class PostgreDdlGenerator (line 35) | public class PostgreDdlGenerator implements IDdlGenerator {
    method PostgreDdlGenerator (line 48) | @Deprecated
    method PostgreDdlGenerator (line 57) | public PostgreDdlGenerator(String schema) {
    method newInstance (line 65) | public static IDdlGenerator newInstance() {
    method newInstanceWithSchema (line 75) | public static IDdlGenerator newInstanceWithSchema(String schema) {
    method newInstanceWithAutoSchema (line 84) | public static IDdlGenerator newInstanceWithAutoSchema() {
    method existTable (line 89) | @Override
    method existTable (line 99) | @Override
    method getDdlHistory (line 114) | @Override
    method createDdlHistory (line 123) | @Override
    method getSchema (line 143) | @Deprecated

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/SQLiteDdlGenerator.java
  class SQLiteDdlGenerator (line 26) | public class SQLiteDdlGenerator implements IDdlGenerator {
    method newInstance (line 28) | public static IDdlGenerator newInstance() {
    method existTable (line 32) | @Override
    method createDdlHistory (line 40) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/AbstractJsonTypeHandler.java
  class AbstractJsonTypeHandler (line 37) | public abstract class AbstractJsonTypeHandler<T> extends BaseTypeHandler...
    method AbstractJsonTypeHandler (line 53) | public AbstractJsonTypeHandler(Class<?> type) {
    method AbstractJsonTypeHandler (line 68) | public AbstractJsonTypeHandler(Class<?> type, Field field) {
    method setNonNullParameter (line 73) | @Override
    method getNullableResult (line 78) | @Override
    method getNullableResult (line 84) | @Override
    method getNullableResult (line 90) | @Override
    method getFieldType (line 96) | public Type getFieldType() {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/Fastjson2TypeHandler.java
  class Fastjson2TypeHandler (line 32) | @MappedTypes({Object.class})
    method Fastjson2TypeHandler (line 36) | public Fastjson2TypeHandler(Class<?> type) {
    method Fastjson2TypeHandler (line 40) | public Fastjson2TypeHandler(Class<?> type, Field field) {
    method parse (line 44) | @Override
    method toJson (line 49) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/FastjsonTypeHandler.java
  class FastjsonTypeHandler (line 32) | @MappedTypes({Object.class})
    method FastjsonTypeHandler (line 36) | public FastjsonTypeHandler(Class<?> type) {
    method FastjsonTypeHandler (line 40) | public FastjsonTypeHandler(Class<?> type, Field field) {
    method parse (line 44) | @Override
    method toJson (line 49) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/GsonTypeHandler.java
  class GsonTypeHandler (line 32) | @MappedTypes({Object.class})
    method GsonTypeHandler (line 38) | public GsonTypeHandler(Class<?> type) {
    method GsonTypeHandler (line 42) | public GsonTypeHandler(Class<?> type, Field field) {
    method parse (line 46) | @Override
    method toJson (line 51) | @Override
    method getGson (line 56) | public static Gson getGson() {
    method setGson (line 60) | public static void setGson(Gson gson) {
    class Instance (line 68) | private static class Instance {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/Jackson3TypeHandler.java
  class Jackson3TypeHandler (line 17) | public class Jackson3TypeHandler extends AbstractJsonTypeHandler<Object> {
    method Jackson3TypeHandler (line 21) | public Jackson3TypeHandler(Class<?> type) {
    method Jackson3TypeHandler (line 25) | public Jackson3TypeHandler(Class<?> type, Field field) {
    method parse (line 29) | @Override
    method toJson (line 37) | @Override
    method getObjectMapper (line 42) | public static ObjectMapper getObjectMapper() {
    method setObjectMapper (line 46) | public static void setObjectMapper(ObjectMapper objectMapper) {
    class Instance (line 51) | private static class Instance {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/JacksonTypeHandler.java
  class JacksonTypeHandler (line 36) | @MappedTypes({Object.class})
    method JacksonTypeHandler (line 42) | public JacksonTypeHandler(Class<?> type) {
    method JacksonTypeHandler (line 46) | public JacksonTypeHandler(Class<?> type, Field field) {
    method parse (line 50) | @Override
    method toJson (line 63) | @Override
    method getObjectMapper (line 73) | public static ObjectMapper getObjectMapper() {
    method setObjectMapper (line 77) | public static void setObjectMapper(ObjectMapper objectMapper) {
    class Instance (line 85) | private static class Instance {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/MybatisMapWrapper.java
  class MybatisMapWrapper (line 30) | public class MybatisMapWrapper extends MapWrapper {
    method MybatisMapWrapper (line 32) | public MybatisMapWrapper(MetaObject metaObject, Map<String, Object> ma...
    method findProperty (line 36) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/DB2KeyGenerator.java
  class DB2KeyGenerator (line 27) | public class DB2KeyGenerator implements IKeyGenerator {
    method executeSql (line 29) | @Override
    method dbType (line 34) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/DmKeyGenerator.java
  class DmKeyGenerator (line 27) | public class DmKeyGenerator implements IKeyGenerator {
    method executeSql (line 29) | @Override
    method dbType (line 34) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/FirebirdKeyGenerator.java
  class FirebirdKeyGenerator (line 21) | public class FirebirdKeyGenerator implements IKeyGenerator {
    method executeSql (line 23) | @Override
    method dbType (line 28) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/H2KeyGenerator.java
  class H2KeyGenerator (line 27) | public class H2KeyGenerator implements IKeyGenerator {
    method executeSql (line 29) | @Override
    method dbType (line 34) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/KingbaseKeyGenerator.java
  class KingbaseKeyGenerator (line 27) | public class KingbaseKeyGenerator implements IKeyGenerator {
    method executeSql (line 29) | @Override
    method dbType (line 34) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/LealoneKeyGenerator.java
  class LealoneKeyGenerator (line 27) | public class LealoneKeyGenerator implements IKeyGenerator {
    method executeSql (line 29) | @Override
    method dbType (line 34) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/OracleKeyGenerator.java
  class OracleKeyGenerator (line 27) | public class OracleKeyGenerator implements IKeyGenerator {
    method executeSql (line 29) | @Override
    method dbType (line 34) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/PostgreKeyGenerator.java
  class PostgreKeyGenerator (line 27) | public class PostgreKeyGenerator implements IKeyGenerator {
    method executeSql (line 29) | @Override
    method dbType (line 34) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/incrementer/SapHanaKeyGenerator.java
  class SapHanaKeyGenerator (line 27) | public class SapHanaKeyGenerator implements IKeyGenerator {
    method executeSql (line 29) | @Override
    method dbType (line 34) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/AlwaysUpdateSomeColumnById.java
  class AlwaysUpdateSomeColumnById (line 45) | public class AlwaysUpdateSomeColumnById extends AbstractMethod {
    method AlwaysUpdateSomeColumnById (line 59) | public AlwaysUpdateSomeColumnById(String name, Predicate<TableFieldInf...
    method AlwaysUpdateSomeColumnById (line 64) | public AlwaysUpdateSomeColumnById() {
    method AlwaysUpdateSomeColumnById (line 71) | public AlwaysUpdateSomeColumnById(Predicate<TableFieldInfo> predicate) {
    method injectMappedStatement (line 76) | @Override
    method getPredicate (line 89) | private Predicate<TableFieldInfo> getPredicate() {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/InsertBatchSomeColumn.java
  class InsertBatchSomeColumn (line 62) | public class InsertBatchSomeColumn extends AbstractMethod {
    method InsertBatchSomeColumn (line 74) | public InsertBatchSomeColumn() {
    method InsertBatchSomeColumn (line 83) | public InsertBatchSomeColumn(Predicate<TableFieldInfo> predicate) {
    method InsertBatchSomeColumn (line 93) | public InsertBatchSomeColumn(String name, Predicate<TableFieldInfo> pr...
    method injectMappedStatement (line 98) | @SuppressWarnings("Duplicates")

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/LogicDeleteBatchByIds.java
  class LogicDeleteBatchByIds (line 51) | @Deprecated
    method LogicDeleteBatchByIds (line 54) | public LogicDeleteBatchByIds() {
    method LogicDeleteBatchByIds (line 58) | public LogicDeleteBatchByIds(String name) {
    method logicDeleteScript (line 62) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/LogicDeleteByIdWithFill.java
  class LogicDeleteByIdWithFill (line 45) | @Deprecated
    method LogicDeleteByIdWithFill (line 48) | public LogicDeleteByIdWithFill() {
    method LogicDeleteByIdWithFill (line 56) | public LogicDeleteByIdWithFill(String name) {
    method injectMappedStatement (line 60) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/Upsert.java
  class Upsert (line 34) | public class Upsert extends AbstractMethod {
    method Upsert (line 36) | public Upsert() {
    method Upsert (line 44) | public Upsert(String name) {
    method injectMappedStatement (line 48) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/p6spy/MybatisPlusLogFactory.java
  class MybatisPlusLogFactory (line 30) | public class MybatisPlusLogFactory implements P6Factory {
    method getOptions (line 32) | @Override
    method getJdbcEventListener (line 37) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/p6spy/MybatisPlusLoggingEventListener.java
  class MybatisPlusLoggingEventListener (line 29) | public class MybatisPlusLoggingEventListener extends LoggingEventListener {
    method getInstance (line 32) | public static MybatisPlusLoggingEventListener getInstance() {
    method onAfterExecuteBatch (line 39) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/p6spy/P6SpyLogger.java
  class P6SpyLogger (line 27) | public class P6SpyLogger implements MessageFormattingStrategy {
    method formatMessage (line 29) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/p6spy/StdoutLogger.java
  class StdoutLogger (line 24) | public class StdoutLogger extends com.p6spy.engine.spy.appender.StdoutLo...
    method logText (line 26) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/MybatisPlusInterceptor.java
  class MybatisPlusInterceptor (line 40) | @SuppressWarnings({"rawtypes"})
    method intercept (line 55) | @Override
    method plugin (line 109) | @Override
    method addInnerInterceptor (line 117) | public void addInnerInterceptor(InnerInterceptor innerInterceptor) {
    method getInterceptors (line 121) | public List<InnerInterceptor> getInterceptors() {
    method setProperties (line 137) | @Override
    method toString (line 148) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/handler/TableNameHandler.java
  type TableNameHandler (line 24) | public interface TableNameHandler {
    method dynamicTableName (line 33) | String dynamicTableName(String sql, String tableName);

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DynamicTableNameInnerInterceptor.java
  class DynamicTableNameInnerInterceptor (line 43) | @Getter
    method DynamicTableNameInnerInterceptor (line 64) | @Deprecated
    method DynamicTableNameInnerInterceptor (line 68) | public DynamicTableNameInnerInterceptor(TableNameHandler tableNameHand...
    method beforeQuery (line 72) | @Override
    method beforePrepare (line 79) | @Override
    method changeTable (line 93) | public String changeTable(String sql) {
    method processTableName (line 110) | protected String processTableName(String sql) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/InnerInterceptor.java
  type InnerInterceptor (line 37) | @SuppressWarnings({"rawtypes"})
    method willDoQuery (line 53) | default boolean willDoQuery(Executor executor, MappedStatement ms, Obj...
    method beforeQuery (line 69) | default void beforeQuery(Executor executor, MappedStatement ms, Object...
    method willDoUpdate (line 82) | default boolean willDoUpdate(Executor executor, MappedStatement ms, Ob...
    method beforeUpdate (line 95) | default void beforeUpdate(Executor executor, MappedStatement ms, Objec...
    method beforePrepare (line 108) | default void beforePrepare(StatementHandler sh, Connection connection,...
    method beforeGetBoundSql (line 119) | default void beforeGetBoundSql(StatementHandler sh) {
    method setProperties (line 123) | default void setProperties(Properties properties) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/OptimisticLockerInnerInterceptor.java
  class OptimisticLockerInnerInterceptor (line 72) | @SuppressWarnings({"unchecked"})
    method OptimisticLockerInnerInterceptor (line 101) | public OptimisticLockerInnerInterceptor() {
    method OptimisticLockerInnerInterceptor (line 105) | public OptimisticLockerInnerInterceptor(boolean wrapperMode) {
    method beforeUpdate (line 109) | @Override
    method doOptimisticLocker (line 120) | protected void doOptimisticLocker(Map<String, Object> map, String msId) {
    method getVersionFieldInfo (line 166) | protected TableFieldInfo getVersionFieldInfo(Class<?> entityClazz) {
    method setVersionByWrapper (line 171) | private void setVersionByWrapper(Map<String, Object> map, String msId) {
    class FieldEqFinder (line 213) | private static class FieldEqFinder {
      type State (line 218) | enum State {
      method FieldEqFinder (line 239) | public FieldEqFinder(String fieldName, Wrapper<?> wrapper) {
      method isPresent (line 248) | public boolean isPresent() {
      method find (line 252) | private boolean find(Wrapper<?> wrapper) {
    class VersionFactory (line 279) | private static class VersionFactory {
      method getUpdatedVersionVal (line 297) | public static Object getUpdatedVersionVal(Class<?> clazz, Object ori...
    method getUpdatedVersionVal (line 314) | protected Object getUpdatedVersionVal(Class<?> clazz, Object originalV...

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/ReplacePlaceholderInnerInterceptor.java
  class ReplacePlaceholderInnerInterceptor (line 40) | public class ReplacePlaceholderInnerInterceptor implements InnerIntercep...
    method ReplacePlaceholderInnerInterceptor (line 46) | public ReplacePlaceholderInnerInterceptor() {
    method ReplacePlaceholderInnerInterceptor (line 49) | public ReplacePlaceholderInnerInterceptor(String escapeSymbol) {
    method beforeQuery (line 53) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactory.java
  class DialectFactory (line 31) | public class DialectFactory {
    method getDialect (line 35) | public static IDialect getDialect(DbType dbType) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectModel.java
  class DialectModel (line 36) | public class DialectModel {
    method DialectModel (line 78) | public DialectModel(String dialectSql) {
    method DialectModel (line 82) | public DialectModel(String dialectSql, long firstParam) {
    method DialectModel (line 86) | public DialectModel(String dialectSql, long firstParam, long secondPar...
    method setConsumer (line 99) | @SuppressWarnings("unused")
    method setConsumer (line 118) | public DialectModel setConsumer(boolean isFirstParam) {
    method setConsumerChain (line 134) | public DialectModel setConsumerChain() {
    method consumers (line 145) | public void consumers(List<ParameterMapping> parameterMappings, Config...
    method setParamMapConsumer (line 160) | private void setParamMapConsumer(boolean isFirstParam) {

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/Page.java
  class Page (line 34) | public class Page<T> implements IPage<T> {
    method Page (line 87) | public Page() {
    method Page (line 96) | public Page(long current, long size) {
    method Page (line 100) | public Page(long current, long size, long total) {
    method Page (line 104) | public Page(long current, long size, boolean searchCount) {
    method Page (line 108) | public Page(long current, long size, long total, boolean searchCount) {
    method hasPrevious (line 122) | public boolean hasPrevious() {
    method hasNext (line 131) | public boolean hasNext() {
    method getRecords (line 135) | @Override
    method setRecords (line 140) | @Override
    method getTotal (line 146) | @Override
    method setTotal (line 151) | @Override
    method getSize (line 157) | @Override
    method setSize (line 162) | @Override
    method getCurrent (line 168) | @Override
    method setCurrent (line 173) | @Override
    method countId (line 179) | @Override
    method maxLimit (line 184) | @Override
    method mapOrderToArray (line 195) | private String[] mapOrderToArray(Predicate<OrderItem> filter) {
    method removeOrder (line 210) | private void removeOrder(Predicate<OrderItem> filter) {
    method addOrder (line 224) | public Page<T> addOrder(OrderItem... items) {
    method addOrder (line 235) | public Page<T> addOrder(List<OrderItem> items) {
    method orders (line 240) | @Override
    method optimizeCountSql (line 245) | @Override
    method of (line 250) | public static <T> Page<T> of(long current, long size, long total, bool...
    method optimizeJoinOfCountSql (line 254) | @Override
    method setSearchCount (line 259) | public Page<T> setSearchCount(boolean searchCount) {
    method setOptimizeCountSql (line 264) | public Page<T> setOptimizeCountSql(boolean optimizeCountSql) {
    method getPages (line 269) | @Override
    method of (line 276) | public static <T> Page<T> of(long current, long size) {
    method of (line 280) | public static <T> Page<T> of(long current, long size, long total) {
    method of (line 284) | public static <T> Page<T> of(long current, long size, boolean searchCo...
    method searchCount (line 288) | @Override
    method toString (line 296) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/PageDTO.java
  class PageDTO (line 28) | public class PageDTO<T> extends Page<T> {
    method PageDTO (line 32) | public PageDTO() {
    method PageDTO (line 35) | public PageDTO(long current, long size) {
    method PageDTO (line 39) | public PageDTO(long current, long size, long total) {
    method PageDTO (line 43) | public PageDTO(long current, long size, boolean searchCount) {
    method PageDTO (line 47) | public PageDTO(long current, long size, long total, boolean searchCoun...
    method of (line 52) | public static <T> Page<T> of(long current, long size) {
    method of (line 56) | public static <T> Page<T> of(long current, long size, long total) {
    method of (line 60) | public static <T> Page<T> of(long current, long size, boolean searchCo...
    method of (line 64) | public static <T> Page<T> of(long current, long size, long total, bool...
    method getCountId (line 68) | public String getCountId() {
    method getMaxLimit (line 72) | public Long getMaxLimit() {
    method getOrders (line 76) | public List<OrderItem> getOrders() {
    method isOptimizeCountSql (line 80) | public boolean isOptimizeCountSql() {
    method isSearchCount (line 84) | public boolean isSearchCount() {
    method isOptimizeJoinOfCountSql (line 88) | public boolean isOptimizeJoinOfCountSql() {
    method toString (line 92) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/DB2Dialect.java
  class DB2Dialect (line 26) | public class DB2Dialect implements IDialect {
    method buildPaginationSql (line 28) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/GBase8sDialect.java
  class GBase8sDialect (line 27) | public class GBase8sDialect implements IDialect {
    method buildPaginationSql (line 29) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/GaussDBDialect.java
  class GaussDBDialect (line 28) | public class GaussDBDialect implements IDialect {
    method buildPaginationSql (line 30) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/Hive2Dialect.java
  class Hive2Dialect (line 26) | public class Hive2Dialect implements IDialect {
    method buildPaginationSql (line 28) | @Override

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/IDialect.java
  type IDialect (line 27) | public interface IDialect {
    method buildPaginationSql (line 43) | DialectModel buildPaginationSql(String originalSql, long offset, long ...

FILE: mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/InformixDialect.java
  class InformixDialect (line 20) | public class InformixDialect implements IDialect {
    method buildPaginationSql (line 2
Condensed preview — 1128 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,012K chars).
[
  {
    "path": ".editorconfig",
    "chars": 146,
    "preview": "root = true\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 4\ntrim_trailing_whitespace = true\ninsert_final_newlin"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE.zh-CN.md",
    "chars": 91,
    "preview": "### 当前使用版本(必填,否则不予处理)\n\n\n\n### 该问题是如何引起的?(确定最新版也有问题再提!!!)\n\n\n\n### 重现步骤(如果有就写完整)\n\n\n\n### 报错信息\n\n\n"
  },
  {
    "path": ".gitee/PULL_REQUEST_TEMPLATE.zh-CN.md",
    "chars": 67,
    "preview": "### 该Pull Request关联的Issue\n\n\n\n### 修改描述\n\n\n\n### 测试用例\n\n\n\n### 修复效果的截屏\n\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 1338,
    "preview": "name: 错误报告\ndescription: File a bug report.\ntitle: \"[错误报告]: 描述\"\nlabels: [\"\"]\nbody:\n  - type: markdown\n    attributes:\n   "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 108,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: 官网\n    url: https://baomidou.com/\n    about: document.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 1005,
    "preview": "name: 功能改进\ndescription: Feature Request\ntitle: \"[功能改进]: 描述\"\nlabels: [\"\"]\nbody:\n  - type: markdown\n    attributes:\n      "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 504,
    "preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
  },
  {
    "path": ".github/workflows/gradle.yml",
    "chars": 2316,
    "preview": "# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n"
  },
  {
    "path": ".github/workflows/publish.yml",
    "chars": 1063,
    "preview": "name: Publish package to the Maven Central Repository\non:\n  push:\n    tags:\n      - v*\njobs:\n  build:\n    runs-on: ubunt"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 47089,
    "preview": "# CHANGELOG\n\n## [v3.5.16] 2026.1.11\n- fix: 修复`Jackson3TypeHandler`自定义`ObjectMapper`无效\n- fix: 处理代码生成器`PackageConfig`指定模块"
  },
  {
    "path": "LICENSE",
    "chars": 11369,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "MPCodeStyle.xml",
    "chars": 1014,
    "preview": "<code_scheme name=\"JavaCodeStyle\">\n  <option name=\"CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND\" value=\"99\" />\n  <option name=\"NA"
  },
  {
    "path": "README-zh.md",
    "chars": 5581,
    "preview": "<p align=\"center\">\n  <a href=\"https://github.com/baomidou/mybatis-plus\" target=\"_blank\">\n   <img alt=\"Mybatis-Plus-Logo\""
  },
  {
    "path": "README.md",
    "chars": 4978,
    "preview": "<p align=\"center\">\n  <a href=\"https://github.com/baomidou/mybatis-plus\">\n   <img alt=\"Mybatis-Plus-Logo\" src=\"https://ra"
  },
  {
    "path": "build.gradle",
    "chars": 10835,
    "preview": "import java.time.LocalDateTime\n\nallprojects {\n    group APP_GROUP\n    version APP_VERSION\n}\n\next {\n    configuration = ["
  },
  {
    "path": "changelog-temp.md",
    "chars": 23,
    "preview": "- feat: 支持配置加密在环境变量中使用\n"
  },
  {
    "path": "gradle.properties",
    "chars": 217,
    "preview": "APP_VERSION=3.5.17-SNAPSHOT\nAPP_GROUP=com.baomidou\nsigning.keyId=1FD337F9\nsigning.password=243194995\nsigning.secretKeyRi"
  },
  {
    "path": "license.txt",
    "chars": 575,
    "preview": "Copyright (c) 2011-2025, baomidou (jobob@qq.com).\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou m"
  },
  {
    "path": "mybatis-plus/build.gradle",
    "chars": 1603,
    "preview": "apply plugin: 'kotlin'\n\ncompileKotlin{\n    kotlinOptions.jvmTarget = \"1.8\"\n}\n\ncompileTestKotlin {\n    kotlinOptions {\n  "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/BaseDbTest.java",
    "chars": 5576,
    "preview": "package com.baomidou.mybatisplus.test;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration;\nimport com.baomidou.m"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/DbTypeTest.java",
    "chars": 909,
    "preview": "package com.baomidou.mybatisplus.test;\n\nimport com.baomidou.mybatisplus.annotation.DbType;\nimport org.junit.jupiter.api."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/MybatisTest.java",
    "chars": 8608,
    "preview": "package com.baomidou.mybatisplus.test;\n\nimport com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;\nimport com"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/OgnlTest.java",
    "chars": 2033,
    "preview": "package com.baomidou.mybatisplus.test;\n\nimport lombok.Data;\nimport org.apache.ibatis.scripting.xmltags.OgnlCache;\nimport"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/PageTest.java",
    "chars": 7629,
    "preview": "package com.baomidou.mybatisplus.test;\n\nimport com.alibaba.fastjson2.JSON;\nimport com.alibaba.fastjson2.JSONB;\nimport co"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/autoresultmap/AutoResultMapTest.java",
    "chars": 1454,
    "preview": "package com.baomidou.mybatisplus.test.autoresultmap;\n\nimport com.baomidou.mybatisplus.core.toolkit.Wrappers;\nimport com."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/autoresultmap/Entity.java",
    "chars": 886,
    "preview": "package com.baomidou.mybatisplus.test.autoresultmap;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/autoresultmap/EntityMapper.java",
    "chars": 219,
    "preview": "package com.baomidou.mybatisplus.test.autoresultmap;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\n\n/**\n * @a"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/batch/BatchTest.java",
    "chars": 1178,
    "preview": "package com.baomidou.mybatisplus.test.batch;\n\nimport com.baomidou.mybatisplus.test.BaseDbTest;\nimport org.apache.ibatis."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/batch/Entity.java",
    "chars": 435,
    "preview": "package com.baomidou.mybatisplus.test.batch;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport java.io.Seria"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/batch/EntityMapper.java",
    "chars": 211,
    "preview": "package com.baomidou.mybatisplus.test.batch;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\n\n/**\n * @author mi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/page/PageCache.java",
    "chars": 323,
    "preview": "package com.baomidou.mybatisplus.test.cache.page;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * @author mie"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/page/PageCacheMapper.java",
    "chars": 1054,
    "preview": "package com.baomidou.mybatisplus.test.cache.page;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.ba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/page/PageCacheTest.java",
    "chars": 4212,
    "preview": "package com.baomidou.mybatisplus.test.cache.page;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/xml/XmlCache.java",
    "chars": 320,
    "preview": "package com.baomidou.mybatisplus.test.cache.xml;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * @author miem"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/xml/XmlCacheMapper.java",
    "chars": 316,
    "preview": "package com.baomidou.mybatisplus.test.cache.xml;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apa"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/xml/XmlCacheTest.java",
    "chars": 1323,
    "preview": "package com.baomidou.mybatisplus.test.cache.xml;\n\nimport com.baomidou.mybatisplus.test.BaseDbTest;\nimport org.apache.iba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/chainwrapper/ChainWrapperTest.java",
    "chars": 1361,
    "preview": "package com.baomidou.mybatisplus.test.chainwrapper;\n\nimport com.baomidou.mybatisplus.test.BaseDbTest;\nimport org.junit.j"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/chainwrapper/ChainWrappersTest.java",
    "chars": 1321,
    "preview": "package com.baomidou.mybatisplus.test.chainwrapper;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport org.junit.j"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/chainwrapper/Entity.java",
    "chars": 324,
    "preview": "package com.baomidou.mybatisplus.test.chainwrapper;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * @author m"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/chainwrapper/EntityMapper.java",
    "chars": 468,
    "preview": "package com.baomidou.mybatisplus.test.chainwrapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/Entity.java",
    "chars": 587,
    "preview": "package com.baomidou.mybatisplus.test.enums;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport lombok.Data;\n"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EntityMapper.java",
    "chars": 242,
    "preview": "package com.baomidou.mybatisplus.test.enums;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\n\n/**\n * @author mi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EnumInt.java",
    "chars": 325,
    "preview": "package com.baomidou.mybatisplus.test.enums;\n\nimport com.baomidou.mybatisplus.annotation.EnumValue;\nimport lombok.AllArg"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EnumOrdinal.java",
    "chars": 170,
    "preview": "package com.baomidou.mybatisplus.test.enums;\n\nimport lombok.Getter;\n\n/**\n * @author miemie\n * @since 2020-07-21\n */\n@Get"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EnumStr.java",
    "chars": 332,
    "preview": "package com.baomidou.mybatisplus.test.enums;\n\nimport com.baomidou.mybatisplus.annotation.EnumValue;\nimport lombok.AllArg"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/enums/EnumTest.java",
    "chars": 2287,
    "preview": "package com.baomidou.mybatisplus.test.enums;\n\nimport com.baomidou.mybatisplus.test.BaseDbTest;\nimport org.apache.ibatis."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/fill/FillEntity.java",
    "chars": 705,
    "preview": "package com.baomidou.mybatisplus.test.fill;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport com.baomidou.m"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/fill/FillMapper.java",
    "chars": 571,
    "preview": "package com.baomidou.mybatisplus.test.fill;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apache.i"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/fill/FillTest.java",
    "chars": 3859,
    "preview": "package com.baomidou.mybatisplus.test.fill;\n\nimport com.baomidou.mybatisplus.core.batch.MybatisBatch;\nimport com.baomido"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/gaussdb/Demo.java",
    "chars": 521,
    "preview": "package com.baomidou.mybatisplus.test.gaussdb;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.m"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/gaussdb/DemoMapper.java",
    "chars": 263,
    "preview": "package com.baomidou.mybatisplus.test.gaussdb;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apach"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/gaussdb/GaussdbTest.java",
    "chars": 5935,
    "preview": "package com.baomidou.mybatisplus.test.gaussdb;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration;\nimport com.ba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/ActiveRecordTest.java",
    "chars": 6189,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/BaseTest.java",
    "chars": 1152,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.test.h2.entity.H2User;\nimport com.baomidou.my"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/CustomFillTest.java",
    "chars": 1498,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration;\nimport com.baomido"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/FillPerformanceTest.java",
    "chars": 1406,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.test.h2.fillperformance.model.PerformanceMode"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2Delete1Eq1Test.java",
    "chars": 2658,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport co"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2KeyGeneratorTest.java",
    "chars": 2904,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.test.h2.keygenerator.mapper.*;\nimport com.bao"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2LogicDeleteTest.java",
    "chars": 1652,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.test.h2.entity.H2User;\nimport com.baomidou.my"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2MetaObjectHandler.java",
    "chars": 1540,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;\nimport org.a"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2StudentMapperTest.java",
    "chars": 3897,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserMapperTest.java",
    "chars": 24517,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.batch.MybatisBatch;\nimport com.baomidou."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserStrategyTest.java",
    "chars": 2237,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport co"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java",
    "chars": 43232,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport java.io.IOException;\nimport java.math.BigDecimal;\nimport java.math.Rou"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2userNameJsonTypeHandler.java",
    "chars": 1290,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.alibaba.fastjson.JSON;\nimport com.baomidou.mybatisplus.test.h2.ent"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/LastSqlTest.java",
    "chars": 4168,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/MybatisMapperRegistryTest.java",
    "chars": 4011,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.MybatisMapperRegistry;\nimport com.baomid"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/SqlRunnerTest.java",
    "chars": 9665,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport co"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/TestXmlConfig.java",
    "chars": 861,
    "preview": "package com.baomidou.mybatisplus.test.h2;\n\nimport com.baomidou.mybatisplus.test.h2.entity.H2User;\nimport com.baomidou.my"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/cache/CacheConfig.java",
    "chars": 1791,
    "preview": "package com.baomidou.mybatisplus.test.h2.cache;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration;\nimport com.b"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/cache/CacheTest.java",
    "chars": 10027,
    "preview": "package com.baomidou.mybatisplus.test.h2.cache;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/cache/CustomCache.java",
    "chars": 1068,
    "preview": "package com.baomidou.mybatisplus.test.h2.cache;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.ibatis.cache.Cache;"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/cache/CustomPage.java",
    "chars": 953,
    "preview": "package com.baomidou.mybatisplus.test.h2.cache;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimpo"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/cache/mapper/CacheMapper.java",
    "chars": 406,
    "preview": "package com.baomidou.mybatisplus.test.h2.cache.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport c"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/cache/model/CacheModel.java",
    "chars": 472,
    "preview": "package com.baomidou.mybatisplus.test.h2.cache.model;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport lomb"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/cache/service/ICacheService.java",
    "chars": 586,
    "preview": "package com.baomidou.mybatisplus.test.h2.cache.service;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/cache/service/impl/CacheServiceImpl.java",
    "chars": 2763,
    "preview": "package com.baomidou.mybatisplus.test.h2.cache.service.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.Ser"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/config/DBConfig.java",
    "chars": 2626,
    "preview": "package com.baomidou.mybatisplus.test.h2.config;\n\nimport org.h2.Driver;\nimport org.springframework.context.annotation.Be"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfig.java",
    "chars": 4640,
    "preview": "package com.baomidou.mybatisplus.test.h2.config;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport com.baomi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfigLogicDelete.java",
    "chars": 4503,
    "preview": "package com.baomidou.mybatisplus.test.h2.config;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport com.baomi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisXmlConfig.java",
    "chars": 1108,
    "preview": "package com.baomidou.mybatisplus.test.h2.config;\n\nimport com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFact"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/customfill/CustomFillConfig.java",
    "chars": 11427,
    "preview": "package com.baomidou.mybatisplus.test.h2.customfill;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport com.b"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/customfill/annotation/InsertUpdateFill.java",
    "chars": 537,
    "preview": "package com.baomidou.mybatisplus.test.h2.customfill.annotation;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\ni"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/customfill/mapper/TestModelMapper.java",
    "chars": 254,
    "preview": "package com.baomidou.mybatisplus.test.h2.customfill.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/customfill/model/TestModel.java",
    "chars": 527,
    "preview": "package com.baomidou.mybatisplus.test.h2.customfill.model;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/H2Addr.java",
    "chars": 585,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baom"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/H2Student.java",
    "chars": 1263,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/H2User.java",
    "chars": 2875,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport java.math.BigDecimal;\nimport java.time.LocalDateTime;\nimport ja"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/H2UserLogicDelete.java",
    "chars": 2478,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport com.baomidou.mybatisplus.annotation.*;\nimport com.baomidou.myba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/H2UserStrategy.java",
    "chars": 2769,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport com.baomidou.mybatisplus.annotation.*;\nimport com.baomidou.myba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/SuSuperEntity.java",
    "chars": 499,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport com.baomi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/SuSuperEntityCamel.java",
    "chars": 593,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport com.baomi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/SuperEntity.java",
    "chars": 609,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport lombok.Data"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/SuperEntityCamel.java",
    "chars": 586,
    "preview": "package com.baomidou.mybatisplus.test.h2.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableId;\n\nimport java.io.Se"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/enums/AgeEnum.java",
    "chars": 844,
    "preview": "package com.baomidou.mybatisplus.test.h2.enums;\n\nimport com.baomidou.mybatisplus.annotation.IEnum;\n\n/**\n * 通用枚举注入演示,注意需要"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/enums/GenderEnum.java",
    "chars": 160,
    "preview": "package com.baomidou.mybatisplus.test.h2.enums;\n\n/**\n * <p></p>\n *\n * @author yuxiaobin\n * @date 2018/8/30\n */\npublic en"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/enums/GradeEnum.java",
    "chars": 551,
    "preview": "package com.baomidou.mybatisplus.test.h2.enums;\n\nimport com.baomidou.mybatisplus.annotation.EnumValue;\n\n/**\n * <p></p>\n "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/fillperformance/FillPerformanceConfig.java",
    "chars": 5332,
    "preview": "package com.baomidou.mybatisplus.test.h2.fillperformance;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/fillperformance/mapper/PerformanceModelMapper.java",
    "chars": 285,
    "preview": "package com.baomidou.mybatisplus.test.h2.fillperformance.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/fillperformance/model/PerformanceModel.java",
    "chars": 1115,
    "preview": "package com.baomidou.mybatisplus.test.h2.fillperformance.model;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\ni"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/fillperformance/service/IPerformanceModelService.java",
    "chars": 290,
    "preview": "package com.baomidou.mybatisplus.test.h2.fillperformance.service;\n\nimport com.baomidou.mybatisplus.extension.service.ISe"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/fillperformance/service/impl/PerformanceModelServiceImpl.java",
    "chars": 598,
    "preview": "package com.baomidou.mybatisplus.test.h2.fillperformance.service.impl;\n\nimport com.baomidou.mybatisplus.extension.servic"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/CustomIdGenerator.java",
    "chars": 1573,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator;\n\nimport com.baomidou.mybatisplus.core.incrementer.IdentifierGenera"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/IdGeneratorConfig.java",
    "chars": 2137,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration;\nimport"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/IdentifierGeneratorTest.java",
    "chars": 4355,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator;\n\nimport com.baomidou.mybatisplus.test.h2.idgenerator.mapper.*;\nimp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/mapper/BigDecimalIdGeneratorMapper.java",
    "chars": 302,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/mapper/BigIntegerIdGeneratorMapper.java",
    "chars": 302,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/mapper/IntegerIdGeneratorMapper.java",
    "chars": 293,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/mapper/IntegerStringIdGeneratorMapper.java",
    "chars": 311,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/mapper/LongIdGeneratorMapper.java",
    "chars": 284,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/mapper/LongStringIdGeneratorMapper.java",
    "chars": 302,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/mapper/StringIdGeneratorMapper.java",
    "chars": 290,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/model/BigDecimalIdGeneratorModel.java",
    "chars": 456,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimpor"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/model/BigIntegerIdGeneratorModel.java",
    "chars": 456,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimpor"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/model/IntegerIdGeneratorModel.java",
    "chars": 410,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimpor"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/model/IntegerStringIdGeneratorModel.java",
    "chars": 569,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport c"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/model/LongIdGeneratorModel.java",
    "chars": 402,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimpor"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/model/LongStringIdGeneratorModel.java",
    "chars": 564,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport c"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/model/StringIdGeneratorModel.java",
    "chars": 553,
    "preview": "package com.baomidou.mybatisplus.test.h2.idgenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport c"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/AopConfig1.java",
    "chars": 835,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop;\n\nimport org.aspectj.lang.annotation.After;\nimport org.aspectj.lang."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/AopConfig2.java",
    "chars": 610,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop;\n\nimport org.aspectj.lang.annotation.Aspect;\nimport org.aspectj.lang"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/AppConfig.java",
    "chars": 1575,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration;\nimport "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/MultiAopTest.java",
    "chars": 1424,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop;\n\nimport com.baomidou.mybatisplus.test.h2.issues.aop.entity.Demo;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/NoAopTest.java",
    "chars": 1386,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop;\n\nimport com.baomidou.mybatisplus.test.h2.issues.aop.entity.Demo;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/SingleAopTest.java",
    "chars": 1407,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop;\n\nimport com.baomidou.mybatisplus.test.h2.issues.aop.entity.Demo;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/entity/Demo.java",
    "chars": 189,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop.entity;\n\nimport lombok.Data;\n\n/**\n * @author nieqiurong\n */\n@Data\npu"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/mapper/DemoMapper.java",
    "chars": 323,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/service/IDemoService.java",
    "chars": 275,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop.service;\n\nimport com.baomidou.mybatisplus.extension.service.IService"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/aop/service/impl/DemoServiceImpl.java",
    "chars": 525,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.aop.service.impl;\n\nimport com.baomidou.mybatisplus.extension.service.imp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/genericid/GenericIdTest.java",
    "chars": 1356,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.genericid;\n\nimport com.baomidou.mybatisplus.test.h2.issues.genericid.ent"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/genericid/MybatisPlusConfig.java",
    "chars": 1850,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.genericid;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration;\ni"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/genericid/entity/LongEntity.java",
    "chars": 433,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.genericid.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/genericid/entity/StringEntity.java",
    "chars": 439,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.genericid.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/genericid/entity/SuperEntity.java",
    "chars": 333,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.genericid.entity;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/genericid/mapper/LongEntityMapper.java",
    "chars": 337,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.genericid.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMappe"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/genericid/mapper/StringEntityMapper.java",
    "chars": 345,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.genericid.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMappe"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/repositoryscan/AppConfig.java",
    "chars": 1483,
    "preview": "\npackage com.baomidou.mybatisplus.test.h2.issues.repositoryscan;\n\nimport com.baomidou.mybatisplus.core.MybatisConfigurat"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/repositoryscan/AppConfigWithMapperScan.java",
    "chars": 1717,
    "preview": "\npackage com.baomidou.mybatisplus.test.h2.issues.repositoryscan;\n\nimport com.baomidou.mybatisplus.core.MybatisConfigurat"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/repositoryscan/RepositoryDefaultScanTest.java",
    "chars": 1389,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.repositoryscan;\n\nimport com.baomidou.mybatisplus.test.h2.issues.reposito"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/repositoryscan/RepositoryMapperScanTest.java",
    "chars": 1402,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.repositoryscan;\n\nimport com.baomidou.mybatisplus.test.h2.issues.reposito"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/repositoryscan/entity/Demo.java",
    "chars": 200,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.repositoryscan.entity;\n\nimport lombok.Data;\n\n/**\n * @author nieqiurong\n "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/repositoryscan/mapper/DemoRepositoryMapper.java",
    "chars": 364,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.repositoryscan.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.Base"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/repositoryscan/service/IDemoRepositoryService.java",
    "chars": 307,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.repositoryscan.service;\n\nimport com.baomidou.mybatisplus.extension.servi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/issues/repositoryscan/service/impl/DemoRepositoryServiceImpl.java",
    "chars": 619,
    "preview": "package com.baomidou.mybatisplus.test.h2.issues.repositoryscan.service.impl;\n\nimport com.baomidou.mybatisplus.extension."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/KeyGeneratorConfig.java",
    "chars": 2958,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator;\n\nimport com.baomidou.mybatisplus.annotation.DbType;\nimport com.ba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/mapper/ExtendKeyGeneratorMapper.java",
    "chars": 295,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\ni"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/mapper/IntegerKeyGeneratorMapper.java",
    "chars": 298,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\ni"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/mapper/KeyGeneratorMapper.java",
    "chars": 277,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\ni"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/mapper/LongKeyGeneratorMapper.java",
    "chars": 289,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\ni"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/mapper/StringKeyGeneratorMapper.java",
    "chars": 295,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\ni"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/model/BaseMode.java",
    "chars": 187,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.KeySequence;\n\n@"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/model/ExtendKeyGeneratorModel.java",
    "chars": 513,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/model/IntegerKeyGeneratorModel.java",
    "chars": 535,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/model/KeyGeneratorModel.java",
    "chars": 525,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/model/LongKeyGeneratorModel.java",
    "chars": 376,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.*;\nimport lombo"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/keygenerator/model/StringKeyGeneratorModel.java",
    "chars": 518,
    "preview": "package com.baomidou.mybatisplus.test.h2.keygenerator.model;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/mapper/H2StudentMapper.java",
    "chars": 1691,
    "preview": "package com.baomidou.mybatisplus.test.h2.mapper;\n\nimport com.baomidou.mybatisplus.test.h2.entity.H2Student;\nimport com.b"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/mapper/H2UserLogicDeleteMapper.java",
    "chars": 278,
    "preview": "package com.baomidou.mybatisplus.test.h2.mapper;\n\nimport com.baomidou.mybatisplus.test.h2.entity.H2UserLogicDelete;\n\n/**"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/mapper/H2UserMapper.java",
    "chars": 3428,
    "preview": "package com.baomidou.mybatisplus.test.h2.mapper;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.apache.ibatis"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/mapper/H2UserStrategyMapper.java",
    "chars": 269,
    "preview": "package com.baomidou.mybatisplus.test.h2.mapper;\n\nimport com.baomidou.mybatisplus.test.h2.entity.H2UserStrategy;\n\n/**\n *"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/mapper/SuperMapper.java",
    "chars": 472,
    "preview": "package com.baomidou.mybatisplus.test.h2.mapper;\n\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n/"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/service/IH2StudentService.java",
    "chars": 353,
    "preview": "package com.baomidou.mybatisplus.test.h2.service;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport co"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/service/IH2UserService.java",
    "chars": 1368,
    "preview": "package com.baomidou.mybatisplus.test.h2.service;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.b"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/service/impl/H2StudentServiceImpl.java",
    "chars": 1434,
    "preview": "package com.baomidou.mybatisplus.test.h2.service.impl;\n\nimport com.baomidou.mybatisplus.core.exceptions.MybatisPlusExcep"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/service/impl/H2UserServiceImpl.java",
    "chars": 5878,
    "preview": "package com.baomidou.mybatisplus.test.h2.service.impl;\n\nimport com.baomidou.mybatisplus.core.batch.MybatisBatch;\nimport "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/CustomCacheExecutor.java",
    "chars": 1769,
    "preview": "//package com.baomidou.mybatisplus.test.h2.tenant;\n//\n//import com.baomidou.mybatisplus.core.executor.MybatisCachingExec"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/TenantConfig.java",
    "chars": 4236,
    "preview": "//package com.baomidou.mybatisplus.test.h2.tenant;\n//\n//import com.baomidou.mybatisplus.core.MybatisConfiguration;\n//imp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/TenantTest.java",
    "chars": 2658,
    "preview": "//package com.baomidou.mybatisplus.test.h2.tenant;\n//\n//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapp"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/mapper/StudentMapper.java",
    "chars": 348,
    "preview": "package com.baomidou.mybatisplus.test.h2.tenant.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport "
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/model/Student.java",
    "chars": 482,
    "preview": "package com.baomidou.mybatisplus.test.h2.tenant.model;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport lom"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/service/IStudentService.java",
    "chars": 245,
    "preview": "package com.baomidou.mybatisplus.test.h2.tenant.service;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nim"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/service/impl/StudentServiceImpl.java",
    "chars": 499,
    "preview": "package com.baomidou.mybatisplus.test.h2.tenant.service.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.Se"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/FastJson2Entity.java",
    "chars": 1505,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.myba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/FastJson2EntityMapper.java",
    "chars": 222,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\n\n/**\n * @author nie"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/FastJsonEntity.java",
    "chars": 1497,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.myba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/FastJsonEntityMapper.java",
    "chars": 220,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\n\n/**\n * @author nie"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/Fastjson2Test.java",
    "chars": 2350,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.test.BaseDbTest;\nimport org.junit.jupiter.a"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/FastjsonTest.java",
    "chars": 2340,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.test.BaseDbTest;\nimport org.junit.jupiter.a"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/GsonEntity.java",
    "chars": 1465,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.myba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/GsonEntityMapper.java",
    "chars": 212,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\n\n/**\n * @author nie"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/GsonTest.java",
    "chars": 2330,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.test.BaseDbTest;\nimport org.junit.jupiter.a"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/JackJsonEntity.java",
    "chars": 1490,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.myba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/JackJsonEntityMapper.java",
    "chars": 220,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\n\n/**\n * @author nie"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/json/JacksonTest.java",
    "chars": 2337,
    "preview": "package com.baomidou.mybatisplus.test.json;\n\nimport com.baomidou.mybatisplus.test.BaseDbTest;\nimport org.junit.jupiter.a"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/Entity.java",
    "chars": 676,
    "preview": "package com.baomidou.mybatisplus.test.logicdel;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport com.baomid"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/EntityMapper.java",
    "chars": 540,
    "preview": "package com.baomidou.mybatisplus.test.logicdel;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baom"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/LogicDelTest.java",
    "chars": 4971,
    "preview": "package com.baomidou.mybatisplus.test.logicdel;\n\nimport com.baomidou.mybatisplus.core.config.GlobalConfig;\nimport com.ba"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/AppConfig.java",
    "chars": 3513,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory;\n\nimport com.baomidou.mybatisplus.core.MybatisConfiguration"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/MultiSqlSessionFactoryTest.java",
    "chars": 2552,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory;\n\nimport com.baomidou.mybatisplus.test.multisqlsessionfacto"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/a/entity/AEntity.java",
    "chars": 379,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory.a.entity;\n\nimport com.baomidou.mybatisplus.annotation.Table"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/a/mapper/AEntityMapper.java",
    "chars": 354,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory.a.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.Base"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/a/service/AEntityService.java",
    "chars": 380,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory.a.service;\n\nimport com.baomidou.mybatisplus.extension.servi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/a/service/impl/AEntityServiceImpl.java",
    "chars": 1184,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory.a.service.impl;\n\nimport com.baomidou.mybatisplus.extension."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/b/entity/BEntity.java",
    "chars": 379,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory.b.entity;\n\nimport com.baomidou.mybatisplus.annotation.Table"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/b/mapper/BEntityMapper.java",
    "chars": 354,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory.b.mapper;\n\nimport com.baomidou.mybatisplus.core.mapper.Base"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/b/service/BEntityService.java",
    "chars": 380,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory.b.service;\n\nimport com.baomidou.mybatisplus.extension.servi"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/multisqlsessionfactory/b/service/impl/BEntityServiceImpl.java",
    "chars": 1177,
    "preview": "package com.baomidou.mybatisplus.test.multisqlsessionfactory.b.service.impl;\n\nimport com.baomidou.mybatisplus.extension."
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/non/Entity.java",
    "chars": 469,
    "preview": "package com.baomidou.mybatisplus.test.non;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.m"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/non/EntityMapper.java",
    "chars": 334,
    "preview": "package com.baomidou.mybatisplus.test.non;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apache.ib"
  },
  {
    "path": "mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/non/NonTest.java",
    "chars": 1206,
    "preview": "package com.baomidou.mybatisplus.test.non;\n\nimport com.baomidou.mybatisplus.core.toolkit.Wrappers;\nimport com.baomidou.m"
  }
]

// ... and 928 more files (download for full content)

About this extraction

This page contains the full source code of the baomidou/mybatis-plus GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1128 files (3.6 MB), approximately 1.0M tokens, and a symbol index with 6019 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!