当前位置: 首页 > news >正文

网站开发的软件环境wordpress行业模版

网站开发的软件环境,wordpress行业模版,信息产业部网站备案系统,手机靓号网站制作文章目录 mybatis-plus使用一、依赖引入二、添加相关配置项三、功能详解1.自增主键2.逻辑删除3.操作时间自动填充4.其他字段自动填充5.分页查询6.自定义动态查询7.代码生成器8.代码生成器(自定义模板) mybatis-plus使用 一、依赖引入 pom.xml文件 ?xml version1.… 文章目录 mybatis-plus使用一、依赖引入二、添加相关配置项三、功能详解1.自增主键2.逻辑删除3.操作时间自动填充4.其他字段自动填充5.分页查询6.自定义动态查询7.代码生成器8.代码生成器(自定义模板) mybatis-plus使用 一、依赖引入 pom.xml文件 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.4/versionrelativePath//parentartifactIdmybatis-plus-demo/artifactIddependencies!-- 实现对数据库连接池的自动化配置 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId/dependencydependency !-- 本示例我们使用 MySQL --groupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.48/version/dependency!-- 实现对 MyBatis Plus 的自动化配置 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.2.0/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependencies/project二、添加相关配置项 application.yaml spring:# datasource 数据源配置内容datasource:url: jdbc:mysql://127.0.0.1:3306/test-user?useSSLfalseuseUnicodetruecharacterEncodingUTF-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: root1234三、功能详解 1.自增主键 CREATE TABLE auto_increment (id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主键,name VARCHAR(100) NOT NULL COMMENT 名称,create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间 ) COMMENT主键自增表;表单说明在数据库软件如navicat中直接插入数据时数据呈现主键自增情况但使用mybatis-plus直接插入数据则不会。 1直接为实体id字段添加注解TableId(type IdType.AUTO)加上此注解后插入的数据就可以实现主键自增了。 实体类如下 TableName(value auto_increment) Data public class AutoIncrementDO {TableId(type IdType.AUTO)private Long id;private String name;private LocalDateTime createTime; }2全局配置在配置文件中加入以下配置 mybatis-plus:global-config:db-config:id-type: auto # 全局主键策略实体类如下 TableName(value auto_increment) Data public class AutoIncrementDO {// 字段名id时会自动识别为主键否则需要加上 TableId 注解private Long id;private String name;private LocalDateTime createTime; }ps:数据库主键必须设置为自增否则会报错 2.逻辑删除 CREATE TABLE logic_delete (id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主键,name VARCHAR(50) NOT NULL COMMENT 名称,create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,deleted BIT NOT NULL DEFAULT FALSE COMMENT 是否删除 ) COMMENT逻辑删除表; 表单说明deleted字段默认设为false即0删除数据时值需要将deleted字段置为1即可不需要真正的删除数据。 mybatis-plus如何实现这一需求呢 1直接在表示逻辑删除的字段上添加注解TableLogic即可默认值为0删除值为1若想反过来需要自定义TableLogic(value 1, delval 0)或者TableLogic(value false, delval true) 2全局配置表示删除的字段上添加注解TableLogic全局配置默认值和删除值配置如下。 mybatis-plus:global-config:db-config:logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)logic-delete-value: 1 # 逻辑已删除值(默认为 1)ps:若字段上的注解不仅仅为TableLogic而是例如TableLogic(value 1, delval 0)等情况那么该表的逻辑删除按该注解来即该表0表示删除 3.操作时间自动填充 CREATE TABLE auto_update_time (id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 主键,content VARCHAR(255) NOT NULL COMMENT 名称,create_time TIMESTAMP DEFAULT NULL COMMENT 创建时间,update_time TIMESTAMP DEFAULT NULL COMMENT 更新时间 )COMMENT时间自动更新表;表单说明为不产生影响数据库中创建时间与更新时间不设置默认值也不自动更新。 mybatis-plus实现操作时间自动填充以及更新步骤如下 ①字段上添加如下注解 Data TableName(auto_update_time) public class AutoUpdateTimeDO {TableId(type IdType.AUTO)private Long id;private String content;TableField(fill FieldFill.INSERT)private LocalDateTime createTime;TableField(fill FieldFill.INSERT_UPDATE)private LocalDateTime updateTime; }②实现 MetaObjectHandler 接口 Component public class DefaultDBFieldHandler implements MetaObjectHandler {Overridepublic void insertFill(MetaObject metaObject) {setInsertFieldValByName(createTime, LocalDateTime.now(), metaObject);setInsertFieldValByName(updateTime, LocalDateTime.now(), metaObject);}Overridepublic void updateFill(MetaObject metaObject) {setUpdateFieldValByName(updateTime, LocalDateTime.now(), metaObject);} }4.其他字段自动填充 如创建人与更新人自动填充这里会和创建时间以及更新时间自动填充一起二者实现都需要实现MetaObjectHandler接口。 实现如下 ①字段上添加如下注解 Data TableName(value auto_fill_operator) public class AutoFillOperatorDO extends BaseDO{TableId(type IdType.AUTO)private Long id;private String content; }Data public class BaseDO {TableField(fill FieldFill.INSERT)private String creator;TableField(fill FieldFill.INSERT_UPDATE)private String updater;TableField(fill FieldFill.INSERT)private LocalDateTime createTime;TableField(fill FieldFill.INSERT_UPDATE)private LocalDateTime updateTime; }②实现 MetaObjectHandler 接口 Component public class DefaultDBFieldHandler implements MetaObjectHandler {Overridepublic void insertFill(MetaObject metaObject) {if (metaObject.getOriginalObject() instanceof BaseDO) {BaseDO baseDO (BaseDO) metaObject.getOriginalObject();LocalDateTime current LocalDateTime.now();// 创建时间为空则填充当前时间if (Objects.isNull(baseDO.getCreateTime())) {baseDO.setCreateTime(current);}// 更新时间为空则填充当前时间if (Objects.isNull(baseDO.getUpdateTime())) {baseDO.setUpdateTime(current);}String user creator;// 创建人为空则填充当前用户if (Objects.isNull(baseDO.getCreator())) {baseDO.setCreator(user);}// 更新人为空则填充当前用户if (Objects.isNull(baseDO.getUpdater())) {baseDO.setUpdater(user);}}}Overridepublic void updateFill(MetaObject metaObject) {// 更新时间为空则以当前时间为更新时间Object modifyTime getFieldValByName(updateTime, metaObject);if (Objects.isNull(modifyTime)) {setFieldValByName(updateTime, LocalDateTime.now(), metaObject);}// 当前登录用户不为空更新人为空则当前登录用户为更新人Object modifier getFieldValByName(updater, metaObject);String user updater;if (Objects.isNull(modifier)) {setFieldValByName(updater, user, metaObject);}} }5.分页查询 Mapper public interface CrudBaseMaoper extends BaseMapperCrudBaseDO { }Service public class CrudBaseServiceImpl {Resourceprivate CrudBaseMaoper crudBaseMaoper;public IPageCrudBaseDO page(String name) {// 构造分页参数PageCrudBaseDO page new Page(1, 10); // 当前页, 每页显示条数QueryWrapperCrudBaseDO queryWrapper new QueryWrapper();queryWrapper.lambda().like(CrudBaseDO::getCompanyName, name);return crudBaseMaoper.selectPage(page, queryWrapper);}分页查询total为0需要配置分页插件如下 Configuration public class MybatisPlusConfig {// 分页查询拦截器可以获取total值Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 根据数据库类型选择return interceptor;} }6.自定义动态查询 场景在数据库查询中经常遇到需要根据多个可选字段进行动态查询的情况。传统写法需要为每个字段编写判空逻辑代码冗长且重复。 通过自定义 LambdaQueryWrapper 扩展方法实现简洁的动态查询 示例 public class LambdaQueryWrapperXT extends LambdaQueryWrapperT {public LambdaQueryWrapperXT likeIfPresent(SFunctionT, ? column, String val) {if (StringUtils.hasText(val)) {return (LambdaQueryWrapperXT) super.like(column, val);}return this;} }Mapper public interface CrudProMapper extends BaseMapperCrudProDO { }Service public class CrudProServiceImpl implements CrudProService {Resourceprivate CrudProMapper crudProMapper;Overridepublic IPageCrudProDO getCrudProPage(CrudProPageReqVO reqVO) {IPageCrudProDO page new Page(1, 10);return crudProMapper.selectPage(page, new LambdaQueryWrapperXCrudProDO().likeIfPresent(CrudProDO::getCompanyName, reqVO.getCompanyName()).likeIfPresent(CrudProDO::getCompanyCode, reqVO.getCompanyCode()));} }其他方法也可以一样的实现比如eqIfPresent 7.代码生成器 1相关依赖 !-- 实现对 MyBatis Plus 的自动化配置 --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.1/version/dependency!-- 代码自动生成器--!-- 与mybatis-plus版本保持一致--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion3.5.3.1/version/dependency!-- 模板引擎依赖默认使用 Velocity --dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactIdversion2.3/version/dependencydependencygroupIdorg.freemarker/groupIdartifactIdfreemarker/artifactId/dependency2生成器代码 import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.Collections;public class CodeGenerator {public static void main(String[] args) {// 多模块地址前缀没有可不写String prefixPath /kaishu-sql-crud/kaishu-sql-crud-mybatis-plus-pro/;FastAutoGenerator.create(jdbc:mysql://127.0.0.1:3306/test-user?useSSLfalseuseUnicodetruecharacterEncodingUTF-8,root,root1234).globalConfig(builder - {builder.author(kaishu) // 设置作者.outputDir(System.getProperty(user.dir) prefixPath /src/main/java) // 输出目录.enableSwagger() // 开启swagger.fileOverride(); // 覆盖已生成文件}).packageConfig(builder - {builder.parent(org.kaishu.sql.crud.mybatis.plus.pro) // 设置父包名.moduleName(generatordemo) // 设置父包模块名.pathInfo(Collections.singletonMap(OutputFile.xml,System.getProperty(user.dir) prefixPath /src/main/resources/mapper)); // 设置mapperXml路径}).strategyConfig(builder - {builder.addInclude(t_auto_genarater, t_test_auto_genarater) // 设置需要生成的表名.addTablePrefix(t_, t_) // 设置过滤表前缀.entityBuilder() // 实体类配置.enableLombok() // 启用Lombok.controllerBuilder() // Controller配置.enableRestStyle() // 启用RestController.mapperBuilder() // Mapper配置.enableMapperAnnotation(); // 启用Mapper}).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎.execute();} }更详细的配置参考如下 1实体类生成配置 .strategyConfig(builder - {builder.entityBuilder().enableLombok() // 使用Lombok.enableChainModel() // 链式模型.enableRemoveIsPrefix() // 移除is前缀.enableTableFieldAnnotation() // 字段注解.versionColumnName(version) // 乐观锁字段名.logicDeleteColumnName(deleted) // 逻辑删除字段名.naming(NamingStrategy.underline_to_camel) // 命名策略.columnNaming(NamingStrategy.underline_to_camel).addSuperEntityColumns(id, create_time, update_time) // 公共字段.formatFileName(%sEntity) // 文件名称格式.addIgnoreColumns(is_deleted); // 忽略字段 })2Mapper生成配置 .strategyConfig(builder - {builder.mapperBuilder().enableBaseResultMap() // 生成resultMap.enableBaseColumnList() // 生成columnList.enableMapperAnnotation() // Mapper注解.formatMapperFileName(%sDao) // Mapper文件命名.formatXmlFileName(%sXml); // Xml文件命名 })3Service生成配置 .strategyConfig(builder - {builder.serviceBuilder().formatServiceFileName(%sService) // Service接口命名.formatServiceImplFileName(%sServiceImpl); // Service实现类命名 })4Controller生成配置 .strategyConfig(builder - {builder.controllerBuilder().enableRestStyle() // 使用RestController.enableHyphenStyle() // 使用驼峰转连字符.formatFileName(%sController) // 文件命名.enableFileOverride(); // 覆盖已生成文件 })8.代码生成器(自定义模板) 示例这里只自定义实体类生成模板其余照旧这里我需要让实体类都继承我已定义好的的类BaseDO 1依赖同上 2生成器代码基本同上 .strategyConfig(builder - {... }) // 加上这行代码即可 .templateConfig(builder - {builder.entity(/templates/custom-entity.java);})2自定义实体模板文件在\src\main\resources\templates\目录下新建custom-entity.java.ftl文件文件内容如下 package ${package.Entity};#-- 基础导入 -- import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.EqualsAndHashCode; #-- 导入项目基础类 -- import org.kaishu.sql.crud.mybatis.plus.pro.dal.dataobject.BaseDO;#-- 类注释 -- /** * ${table.comment!} 实体类 * * author ${author} * since ${date} */ Data EqualsAndHashCode(callSuper true) TableName(${table.name}) public class ${entity} extends BaseDO {private static final long serialVersionUID 1L;#-- 生成字段自动排除BaseDO中已存在的字段 -- #list table.fields as field#if ![id,create_time,update_time,creator,updater,deleted]?seq_contains(field.name)/*** ${field.comment!}*/TableField(${field.name})private ${field.propertyType} ${field.propertyName};/#if /#list }·
http://www.zqtcl.cn/news/110490/

相关文章:

  • 手机网站开发人员选项wordpress加载媒体库
  • 做钓鱼网站用哪种编程语言张家界有实力seo优化费用
  • 如何做一个主题网站做网站必须有框架么
  • 建设网站需要什么知识上海高端网页设计
  • 电子商务网站建设基本流程公司网站建设平台
  • 域名没过期 网站打不开怎么办素马设计顾问讲解价格
  • 怎么做非法彩票网站贵州网站开发哪家便宜
  • 青岛市医疗保险网站wordpress七牛云
  • 哪个浏览器可以做网站查询网站的外链
  • 浅析社区网站的建设有了网站源码 怎么建设网站
  • 苏州网站排名优化系统网页设计师
  • 网站开发定制推广杭州河南省的网页制作
  • 北京随喜设计网站国内好的seo网站
  • 网站中宣传彩页怎么做的网站建设评估及分析
  • 东莞php网站建设素材网站php程序源码
  • 怎么做免费视频网站模版网站可以做seo吗
  • 备案期间怎么做网站微动漫怎么制作
  • 精美的php个人网站源码公司网站建设方案书
  • 站长如何做视频类网站如何诊断网站
  • 个人怎么做网站优化在线做印章的网站
  • 自己做的小网站市场营销互联网营销
  • 程序员会搭建非法网站吗永久免费生成app网页
  • 重庆渝北做网站哪里便宜浙江建设职业学校网站
  • 移动端网站开发介绍品牌宣传网站
  • 做文案图片上什么网站seo具体优化流程
  • 摄影做网站中国电商公司排名
  • 比较好的平面设计网站国际进出口贸易网站
  • 网站集约化建设困难seo技术网网
  • 咸宁网站建设报价成都网站设计 冠辰
  • 织梦网站首页目录在哪里自己编写的网站如何放到wordpress