建站推广网站,做网站前怎么写文档,湖北手机版建站系统哪家好,传统类型的企业网站Mybatis Plus与SpringBoot的集成 1.引入Maven 依赖2.配置application.yml文件3.创建实体类4.分页插件5.逻辑删除功能6.忽略特定字段7.自动填充 1.引入Maven 依赖
提前创建好一个SpringBoot项目#xff0c;然后在项目中引入MyBatis Plus依赖
dependencygroupIdapplication.yml文件3.创建实体类4.分页插件5.逻辑删除功能6.忽略特定字段7.自动填充 1.引入Maven 依赖
提前创建好一个SpringBoot项目然后在项目中引入MyBatis Plus依赖
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.2/version
/dependency完整的pom.xml文件如下
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.0.9/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.atguigu/groupIdartifactIdhello-mp/artifactIdversion0.0.1-SNAPSHOT/versionnamehello-mp/namedescriptionhello-mp/descriptionpropertiesjava.version17/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.2/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project2.配置application.yml文件
配置数据库相关内容如下
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: passwordurl: jdbc:mysql://host:post/database_name?useUnicodetruecharacterEncodingutf-8serverTimezoneGMT%2b83.创建实体类
创建与user表相对应的实体类如下
Data
TableName(user)
public class User {TableId(value id, type IdType.AUTO)private Long id;TableField(name)private String name;TableField(age)private Integer age;TableField(email)private String email;
}知识点
实体类中的三个注解的含义如下 TableName表名注解用于标识实体类所对应的表 value用于声明表名 TableId主键注解用于标识主键字段 value用于声明主键的字段名type用于声明主键的生成策略常用的策略有AUTO、ASSIGN_UUID、INPUT等等 TableField普通字段注解用于标识属性所对应的表字段 value用于声明普通字段的字段名
4.分页插件
Mybatis-Plus提供了一个分页插件使用它可以十分方便的完成分页查询。
配置分页插件
Configuration
public class MPConfiguration {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}分页插件使用说明 构造分页对象 分页对象包含了分页的各项信息其核心属性如下 属性名类型默认值描述recordsListemptyList查询数据列表totalLong0查询列表总记录数sizeLong10每页显示条数默认10currentLong1当前页分页对象既作为分页查询的参数也作为分页查询的返回结果当作为查询参数时通常只需提供current和size属性如下 IPageT page new Page(current, size);注IPage为分页接口Page为IPage接口的一个实现类。 分页查询 Mybatis Plus的BaseMapper和ServiceImpl均提供了常用的分页查询的方法例如 BaseMapper的分页查询 IPageT selectPage(IPageT page,WrapperT queryWrapper);ServiceImpl的分页查询 // 无条件分页查询
IPageT page(IPageT page);
// 条件分页查询
IPageT page(IPageT page, WrapperT queryWrapper);自定义Mapper 对于自定义SQL也可以十分方便的完成分页查询如下 Mapper接口 IPageUserVo selectPageVo(IPage? page, Integer state);Mapper.xml select idselectPageVo resultTypexxx.xxx.xxx.UserVoSELECT id,name FROM user WHERE state#{state}
/select注意Mapper.xml中的SQL只需实现查询list的逻辑即可无需关注分页的逻辑。 5.逻辑删除功能
由于数据库中所有表均采用逻辑删除策略所以查询数据时均需要增加过滤条件is_deleted0。 上述操作虽不难实现但是每个查询接口都要考虑到也显得有些繁琐。为简化上述操作可以使用Mybatis-Plus提供的逻辑删除功能它可以自动为查询操作增加is_deleted0过滤条件并将删除操作转为更新语句。 步骤一在application.yml中增加如下内容 mybatis-plus:global-config:db-config:logic-delete-field: flag # 全局逻辑删除的实体字段名(配置后可以忽略不配置步骤二)logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)步骤二在实体类中的删除标识字段上增加TableLogic注解 Data
public class BaseEntity {Schema(description 主键)TableId(value id, type IdType.AUTO)private Long id;Schema(description 创建时间)JsonIgnoreprivate Date createTime;Schema(description 更新时间)JsonIgnoreprivate Date updateTime;Schema(description 逻辑删除)JsonIgnoreTableLogicTableField(is_deleted)private Byte isDeleted;}注意 逻辑删除功能只对Mybatis-Plus自动注入的sql起效也就是说对于手动在Mapper.xml文件配置的sql不会生效需要单独考虑。
6.忽略特定字段
通常情况下接口响应的Json对象中并不需要create_time、update_time、is_deleted等字段这时只需在实体类中的相应字段添加JsonIgnore注解该字段就会在序列化时被忽略。
具体配置如下
Data
public class BaseEntity {Schema(description 主键)TableId(value id, type IdType.AUTO)private Long id;Schema(description 创建时间)JsonIgnoreTableField(value create_time)private Date createTime;Schema(description 更新时间)JsonIgnoreTableField(value update_time)private Date updateTime;Schema(description 逻辑删除)JsonIgnoreTableField(is_deleted)private Byte isDeleted;}7.自动填充
保存或更新数据时前端通常不会传入isDeleted、createTime、updateTime这三个字段因此我们需要手动赋值。但是数据库中几乎每张表都有上述字段所以手动去赋值就显得有些繁琐。为简化上述操作我们可采取以下措施。 is_deleted字段可将数据库中该字段的默认值设置为0。 create_time和update_time可使用mybatis-plus的自动填充功能所谓自动填充就是通过统一配置在插入或更新数据时自动为某些字段赋值具体配置如下详细信息可参考官方文档。 为相关字段配置触发填充的时机例如create_time需要在插入数据时填充而update_time需要在更新数据时填充。具体配置如下观察TableField注解中的fill属性。 Data
public class BaseEntity {Schema(description 主键)TableId(value id, type IdType.AUTO)private Long id;Schema(description 创建时间)JsonIgnoreTableField(value create_time, fill FieldFill.INSERT)private Date createTime;Schema(description 更新时间)JsonIgnoreTableField(value update_time, fill FieldFill.UPDATE)private Date updateTime;Schema(description 逻辑删除)JsonIgnoreTableLogicTableField(is_deleted)private Byte isDeleted;}配置自动填充的内容具体配置如下
Component
public class MybatisMetaObjectHandler implements MetaObjectHandler {Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, createTime, Date.class, new Date());}Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, updateTime, Date.class, new Date());}
}