若依-Vue 单体版本 更换mybatisPlus
1、单体模块在pom.xml ; 多模块版本在ruoyi-common\pom.xml、
模块添加整合依赖
<!-- mybatis-plus 增强CRUD --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency>
2、单模块在修改主题的application.yml ; 多模块在ruoyi-admin
文件application.yml
,修改mybatis配置为mybatis-plus
# MyBatis Plus配置 mybatis-plus: type-aliases-package: net.nachuan.doukuai.project.**.domain mapper-locations: classpath*:mybatis/**/*Mapper.xml config-location: classpath:mybatis/mybatis-config.xml
3、添加Mybatis Plus
配置MybatisPlusConfig.java
。 PS:原来的MyBatisConfig.java
需要删除掉
package net.nachuan.doukuai.framework.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * Mybatis Plus 配置 * * @author LiuShuKu */ @EnableTransactionManagement(proxyTargetClass = true) @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor(paginationInnerInterceptor()); // 乐观锁插件 interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); // 阻断插件 interceptor.addInnerInterceptor(blockAttackInnerInterceptor()); return interceptor; } /** * 分页插件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html */ public PaginationInnerInterceptor paginationInnerInterceptor() { PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); // 设置数据库类型为mysql paginationInnerInterceptor.setDbType(DbType.MYSQL); // 设置最大单页限制数量,默认 500 条,-1 不受限制 paginationInnerInterceptor.setMaxLimit(-1L); return paginationInnerInterceptor; } /** * 乐观锁插件 https://baomidou.com/guide/interceptor-optimistic-locker.html */ public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } /** * 如果是对全表的删除或更新操作,就会终止该操作 https://baomidou.com/guide/interceptor-block-attack.html */ public BlockAttackInnerInterceptor blockAttackInnerInterceptor() { return new BlockAttackInnerInterceptor(); } }
代码生成模版
Mapper 层
package ${packageName}.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import ${packageName}.domain.${ClassName}; #if($table.sub) import ${packageName}.domain.${subClassName}; #end /** * ${functionName}Mapper接口 * * @author LiuShuKu * @date ${datetime} */ @Mapper public interface ${ClassName}Mapper extends BaseMapper<${ClassName}> { }
Service层
package ${packageName}.service; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import ${packageName}.domain.${ClassName}; /** * ${functionName}Service接口 * * @author LiuShuKu * @date ${datetime} */ public interface I${ClassName}Service extends IService<${ClassName}> { /** * 查询${functionName}列表 * * @param ${className} ${functionName} * @return ${functionName}集合 */ Page<${ClassName}> select${ClassName}List(${ClassName} ${className}); }
Impl层
package ${packageName}.service.impl; import java.util.Date; import java.util.List; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; #if($table.sub) import java.util.ArrayList; import net.nachuan.doukuai.common.utils.StringUtils; import org.springframework.transaction.annotation.Transactional; import ${packageName}.domain.${subClassName}; #end import ${packageName}.mapper.${ClassName}Mapper; import ${packageName}.domain.${ClassName}; import ${packageName}.service.I${ClassName}Service; /** * ${functionName}Service业务层处理 * * @author LiuShuKu * @date ${datetime} */ @Service public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service { /** * 查询${functionName}列表 * * * @param ${className} ${functionName} * @return ${functionName} */ @Override public Page<${ClassName}> select${ClassName}List(${ClassName} ${className}) { // 创建分页对象 Page<${ClassName}> page = new Page<${ClassName}>(${className}.getPageNumber(), ${className}.getPageSize()); // 查询条件 LambdaQueryWrapper<${ClassName}> wrapper = Wrappers.lambdaQuery(${ClassName}. class); // 查询条件 { // 添加时间查询 Date[] timeParam = ${className}.getTimeParam(); if (null != timeParam) { wrapper.between(${ClassName}::getCreateTime, timeParam[0], timeParam[1]); } #foreach ($column in $columns) #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) #set($AttrName=$column.javaField) #else #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) #end #if("Deleted" != ${AttrName} && "CreateTime" != ${AttrName}&& "UpdateTime" != ${AttrName}) wrapper.eq(ObjectUtil.isNotEmpty( ${className}.get${AttrName}()),${ClassName}::get${AttrName}, ${className}.get${AttrName}()); #end #end } return baseMapper.selectPage(page, wrapper); } }
domain层
package ${packageName}.domain; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; #foreach ($import in $importList) import ${import}; #end import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import net.nachuan.doukuai.framework.aspectj.lang.annotation.Excel; #if($table.crud || $table.sub) import com.baomidou.mybatisplus.annotation.TableField; import net.nachuan.doukuai.common.core.domain.BaseEntity; #elseif($table.tree) import net.nachuan.doukuai.common.core.domain.TreeEntity; #end /** * ${functionName}对象 ${tableName} * * @author LiuShuKu * @date ${datetime} */ #if($table.crud || $table.sub) #set($Entity="BaseEntity") #elseif($table.tree) #set($Entity="TreeEntity") #end @Builder @Data @NoArgsConstructor @AllArgsConstructor @TableName(value = "${tableName}") public class ${ClassName} extends ${Entity} { private static final long serialVersionUID=1L; #foreach ($column in $columns) #if(!$table.isSuperColumn($column.javaField)) /** $column.columnComment */ #if($column.list) #set($parentheseIndex=$column.columnComment.indexOf("(")) #if($parentheseIndex != -1) #set($comment=$column.columnComment.substring(0, $parentheseIndex)) #else #set($comment=$column.columnComment) #end #if($parentheseIndex != -1) @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") #elseif($column.javaType == 'Date') @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") #else @Excel(name = "${comment}") #end #end #if($column.javaField == "id") @TableId(type = IdType.AUTO) #end private $column.javaType $column.javaField; #end #end #if($table.sub) /** $table.subTable.functionName信息 */ @TableField(exist = false) private List<${subClassName}> ${subclassName}List; #end }
Controller 层
package ${packageName}.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import net.nachuan.doukuai.framework.aspectj.lang.annotation.Log; import net.nachuan.doukuai.framework.aspectj.lang.enums.BusinessType; import ${packageName}.domain.${ClassName}; import ${packageName}.service.I${ClassName}Service; import net.nachuan.doukuai.framework.web.controller.BaseController; import net.nachuan.doukuai.framework.web.domain.AjaxResult; import net.nachuan.doukuai.common.utils.poi.ExcelUtil; #if($table.crud || $table.sub) import net.nachuan.doukuai.framework.web.page.TableDataInfo; #elseif($table.tree) #end /** * ${functionName}Controller * * @author ${author} * @date ${datetime} */ @RestController @RequestMapping("/${moduleName}/${businessName}") public class ${ClassName}Controller extends BaseController { @Autowired private I${ClassName}Service ${className}Service; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了