免费虚拟主机网站源码,商城app源码,如何创建一个公司网站,网站一般用什么服务器文章目录 概述介绍MyBatis-Plus 常用配置分页插件配置类注解配置 快速入门maven 依赖编写配置文件编写启动类编写 MybatisPlus 配置类 代码生成器#xff1a;MybatisPlusGeneratormaven依赖代码生成器核心类 概述
介绍
MyBatis-Plus#xff08;简称 MP#xff09;是一个 M… 文章目录 概述介绍MyBatis-Plus 常用配置分页插件配置类注解配置 快速入门maven 依赖编写配置文件编写启动类编写 MybatisPlus 配置类 代码生成器MybatisPlusGeneratormaven依赖代码生成器核心类 概述
介绍
MyBatis-Plus简称 MP是一个 MyBatis 的增强工具在 MyBatis 的基础上只做增强不做改变为简化开发、提高效率而生。
主页 传送门
引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring以避免因版本差异导致的问题。
特性
无侵入只做增强不做改变引入它不会对现有工程产生影响如丝般顺滑损耗小启动即会自动注入基本 CURD性能基本无损耗直接面向对象操作强大的 CRUD 操作内置通用 Mapper、通用 Service仅仅通过少量配置即可实现单表大部分 CRUD 操作更有强大的条件构造器满足各类使用需求支持 Lambda 形式调用通过 Lambda 表达式方便的编写各类查询条件无需再担心字段写错支持多种数据库支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库支持主键自动生成支持多达 4 种主键策略内含分布式唯一 ID 生成器 - Sequence可自由配置完美解决主键问题支持 XML 热加载Mapper 对应的 XML 支持热加载对于简单的 CRUD 操作甚至可以无 XML 启动支持 ActiveRecord 模式支持 ActiveRecord 形式调用实体类只需继承 Model 类即可进行强大的 CRUD 操作支持自定义全局通用操作支持全局通用方法注入 Write once, use anywhere 支持关键词自动转义支持数据库关键词order、key…自动转义还可自定义关键词内置代码生成器采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码支持模板引擎更有超多自定义配置等您来使用内置分页插件基于 MyBatis 物理分页开发者无需关心具体操作配置好插件之后写分页等同于普通 List 查询内置性能分析插件可输出 Sql 语句以及其执行时间建议开发测试时启用该功能能快速揪出慢查询内置全局拦截插件提供全表 delete 、 update 操作智能分析阻断也可自定义拦截规则预防误操作内置 Sql 注入剥离器支持 Sql 注入剥离有效预防 Sql 注入攻击 MyBatis-Plus 常用配置
MyBatis-Plus 的配置可以通过 application.properties 或 application.yml 文件进行。以下是一些常用的配置选项及其说明。
mybatis-plus:# 指定MyBatis-Plus映射文件的位置mapper-locations: classpath:mapper/*.xml# 指定MyBatis-Plus映射文件的位置。递归查找所有子目录中符合.xml格式的文件#mapper-locations: classpath*:/mapper/**/*.xml# 指定实体类的包路径自动扫描并注册别名type-aliases-package: com.example.yourproject.entity# 全局配置。用于设置MyBatis-Plus的一些整体行为global-config:db-config:# 主键生成策略。默认auto。可选值有auto自动增长、none无、input手动输入、id_worker雪花算法、uuid等id-type: auto# 表前缀用于生成 SQL 时自动去掉前缀table-prefix: t_# 配置逻辑删除字段如果使用了逻辑删除功能logic-delete-field: deleted# 逻辑删除字段的值表示已删除logic-delete-value: 1# 逻辑删除字段的值表示未删除logic-not-delete-value: 0# 字段策略可选值有 not_null非空插入、not_empty非空插入、ignore忽略等field-strategy: not_empty# 是否开启大写模式生成的 SQL 字段名将全部大写capital-mode: true# 是否刷新缓存默认为 truerefresh: true# 分页配置。用于启用分页功能pagination:# 每页大小。默认10page-size: 10# 是否统计总记录数。默认truetotal: true# 是否合理化分页当分页参数不合理时自动调整。默认falsereasonable: true# 是否支持方法参数作为分页参数。默认falsesupport-methods-arguments: true# 分页参数名可以自定义params: null# 配置。用于configuration:# 开启下划线转驼峰命名规则。默认truemap-underscore-to-camel-case: true# 设置MyBatis-Plus的日志输出。日志实现类org...logging.stdout.StdOutImpl 控制台输出或其他日志实现类log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 注 mybatis-plus.mapper-locations指定MyBatis-Plus映射文件的位置。 若不指定MyBatis-Plus 会尝试从 resources/mapper/ 目录下加载 XML 文件这是 Spring Boot 和 MyBatis 的默认行为 type-aliases-package指定实体类的包路径自动扫描并注册别名。 如果实体类名与数据库表名一致或者已经通过TableName 注解指定了正确的表名则该配置可以缺省 该配置缺省时MyBatis-Plus会自动识别实体类并映射到相应的数据库表但在 XML 中引用实体类时需要使用全限定名 分页插件配置类
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class MyBatisPlusConfig {/*** 分页插件* 注3.5.9版本MyBatis-Plus 对分页插件做了拆分需要单独引用mybatis-plus-jsqlparser依赖以支持PaginationInnerInterceptor类*/Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}注解配置 MapperScan用于扫描 Mapper 接口并将这些接口注册为 Spring 容器中的 Bean 注解位置通常放在 Spring Boot 应用的主类上或者放在配置类上 支持通配符支持使用通配符 * 来匹配一级包路径如果需要匹配多级包路径可以使用 ** 来代替 属性 value 或 basePackages指定需要扫描的包路径。可以是一个或多个包路径用逗号分隔。 markerInterface指定一个标记接口只有实现了该接口的 Mapper 接口才会被扫描。 这个参数可以用于更细粒度地控制扫描范围。 sqlSessionFactoryRef指定 SQL 会话工厂的引用名称。 这个参数通常用于多数据源配置时指定不同数据源对应的 SQL 会话工厂。 注意 包路径的正确性在使用 MapperScan 注解时需要确保指定的包路径是正确的并且包含了所有需要扫描的 Mapper 接口。避免重复扫描如果项目中已经通过其他方式如 Mapper 注解将 Mapper 接口注册为 Bean那么在使用 MapperScan 注解时需要避免重复扫描这些接口否则可能会导致 Bean 冲突或性能问题。多数据源配置在配置多数据源时需要注意 sqlSessionFactoryRef 参数的使用以确保不同数据源对应的 Mapper 接口能够正确注册和使用。 TableName指定实体类对应的数据库表名 说明如果实体类的名称与数据库表名在命名上保持一致即遵循驼峰转下划线的命名规则则此注解不是必需的。但如果命名不一致则需要使用此注解来明确指定表名。 示例 TableName(user)
public class User {// 实体类属性
}TableId指定实体类中的主键字段 说明如果实体类中有一个名为 id 的字段并且希望它作为主键则此注解不是必需的因为 MyBatis-Plus 默认会将名为id的字段作为主键。但如果主键字段的名称不是 id或者需要指定主键的生成策略如自增、UUID等则需要使用此注解。 属性 value字段名。type主键类型。可选值有 IdType.AUTO自增、IdType.NONE无主键、IdType.ASSIGN_ID全局唯一ID、IdType.ASSIGN_UUID全局唯一UUID等。 示例 TableId(value id, type IdType.AUTO)
private Long id;TableField指定实体类中的普通字段与数据库表字段之间的映射关系 说明如果实体类的字段名与数据库表的字段名在命名上保持一致即遵循驼峰转下划线的命名规则则此注解不是必需的。但如果字段名不一致或者字段名与数据库的关键字冲突或者需要处理成员变量以 is 开头且是布尔值的情况则需要使用此注解。 属性 value字段名。 exist字段是否存在默认为 true。 如果实体类中有一些字段不需要映射到数据库表中则可以设置为 false fill字段填充策略可选值有 FieldFill.INSERT插入时填充、FieldFill.UPDATE更新时填充等。 示例 TableField(value name, fill FieldFill.INSERT)
private String name;TableLogic指定逻辑删除字段 属性 value字段名。delval删除标记值。undelval未删除标记值。 示例 TableLogic(value 0, delval 1)
private Integer deleted;是否必需如果需要使用逻辑删除功能则必须使用此注解。 Version指定乐观锁字段 示例 Version
private Integer version;是否必需如果需要使用乐观锁功能则必须使用此注解。 KeySequence指定 Oracle 数据库的序列 属性 value序列名。 示例 TableId(type IdType.SEQUENCE, value user_seq)
private Long id;是否必需如果使用 Oracle 数据库的序列生成主键则必须使用此注解。 Transient指定不持久化的字段 示例 Transient
private String tempField;是否必需如果实体类中有一些临时字段不需要持久化到数据库则可以使用此注解。 快速入门
maven 依赖
!-- MyBatis-plus启动器 --
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.9/versionexclusionsexclusiongroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactId/exclusion/exclusions
/dependency
!--引入较新的mybatis-spring支持springboot3--
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion3.0.3/version
/dependency
!--3.5.9版本MyBatis-Plus 对分页插件做了拆分需要单独引用依赖。jdk8引入mybatis-plus-jsqlparser-4.9 --
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-jsqlparser/artifactIdversion3.5.9/version
/dependency!-- MyBatis-plus-generator 代码生成器 --
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion3.5.9/version
/dependency
dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactIdversion2.3/version
/dependency编写配置文件
application.yml
spring:application:name: plus-testdatasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql:///mytest?characterEncodingUTF-8username: rootpassword: 123456type: com.alibaba.druid.pool.DruidDataSource# myBatis-plus
mybatis-plus:# 指定MyBatis-Plus映射文件的位置mapper-locations: classpath*:mapper/*.xml# 指定实体类的包路径自动扫描并注册别名type-aliases-package: com.example.entityconfiguration:# 设置MyBatis-Plus的日志输出。日志实现类org...logging.stdout.StdOutImpl 控制台输出或其他日志实现类log-impl: org.apache.ibatis.logging.stdout.StdOutImpl编写启动类
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
MapperScan(com.example.**.mapper)
public class SpringBootRunner {public static void main(String[] args) {SpringApplication.run(SpringBootRunner.class,args);}
}编写 MybatisPlus 配置类
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class MyBatisPlusConfig {/*** 分页插件* 注3.5.9版本MyBatis-Plus 对分页插件做了拆分需要单独引用mybatis-plus-jsqlparser依赖以支持PaginationInnerInterceptor类*/Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}代码生成器MybatisPlusGenerator
maven依赖
!-- MyBatis-plus-generator 代码生成器 --
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion${mybatis-plus.version}/version
/dependency
dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactIdversion2.3/version
/dependency代码生成器核心类
示例是将代码生成器集成到 Spring 环境中部分配置参数放到了配置文件中。 核心类 import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.Collections;/*** MyBatis-Plus代码生成器*/
Component
public class MybatisPlusGeneratorRunner {Autowiredprivate DataSourceProperties dbProp;Autowiredprivate MybatisPlusGeneratorProperties generatorProp;PostConstructpublic void run() {execute();}private void execute() {FastAutoGenerator// 数据库配置.create(dbProp.getUrl(), dbProp.getUsername(), dbProp.getPassword())// 全局配置.globalConfig((builder) - {// 设置注释信息-作者builder.author(generatorProp.getAuthor());// 设置swagger注解//builder.enableSwagger();// 设置代码生成的路径builder.outputDir(generatorProp.getOutputDirRoot() /src/main/java);// 完成后不打开文件夹builder.disableOpenDir();// 不生成service接口但是依然会生成serviceImpl//builder.disableServiceInterface();})// 包配置.packageConfig((builder) - {// 设置父包路径builder.parent(generatorProp.getPackagePath());//设置xml文件路径builder.pathInfo(Collections.singletonMap(OutputFile.xml,generatorProp.getOutputDirRoot() /src/main/resources/mapper));// 设置实体类包名builder.entity(generatorProp.getPackageEntity());// 设置Mapper接口包名//builder.mapper(mapper);// 设置Service接口包名//builder.service(service);// 设置Service实现类包名//builder.serviceImpl(service.impl);})// 策略配置.strategyConfig((builder) - {// 指定表builder.addInclude(all.equals(generatorProp.getDbTables()) ?Collections.emptyList() : Arrays.asList(generatorProp.getDbTables().split(,)));// controller的策略配置builder.controllerBuilder()// 启用rest风格.enableRestStyle()// 开启驼峰转连字符.enableHyphenStyle()// 禁用生成.disable()// 覆盖已有文件//.enableFileOverride().build();// service的策略配置builder.serviceBuilder()// 格式化service接口文件名称.formatServiceFileName(%sService)// 格式化service实现类文件名称.formatServiceImplFileName(%sServiceImp)// 禁用生成.disable()// 覆盖已有文件//.enableFileOverride().build();// entity的策略配置builder.entityBuilder()// 启用Lombok插件.enableLombok()// 启用表字段注解.enableTableFieldAnnotation()// 版本字段名称.versionColumnName(generatorProp.getVersionColumnName())// 逻辑删除字段名称.logicDeleteColumnName(generatorProp.getLogicDeleteColumnName())// 设置字段名的命名策略为下划线转驼峰命名.columnNaming(NamingStrategy.underline_to_camel)// 主键策略递增.idType(IdType.ASSIGN_UUID)// 格式化实体类名称.formatFileName(%sEntity)// 覆盖已有文件//.enableFileOverride().build();// mapper的策略配置builder.mapperBuilder().enableBaseColumnList().enableBaseResultMap();}).execute();}
}配置类 import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;Data
Component
RefreshScope
ConfigurationProperties(prefix mybatis-plus.generator)
public class MybatisPlusGeneratorProperties {// 作者private String author blackcrow;// 代码生成的模块路径例如D:\IdeaProjects\open_multielement\userprivate String outputDirRoot;// 父包路径例如com.example.userprivate String packagePath;// 实体类包名例如entityprivate String packageEntity entity;// 表名多个英文逗号分隔所有输入 allprivate String dbTables;// 版本字段名称private String versionColumnName version;// 逻辑删除字段名称private String logicDeleteColumnName is_delete;
}