若依(RuoYi)开源框架是一个功能强大的Java开发框架,专注于快速构建企业级后台管理系统。它提供了一套丰富的功能和模块,可以帮助开发人员快速搭建稳定、高效的管理系统。本篇博客将大家了解若依框架的基本概念和使用方法,帮助您快速上手。
- JDK >= 1.8
MySQL >= 5.7
Maven >= 3.0
Node >= 12
Redis >= 3
具体的若依介绍,大家可以看官网或者这篇文章:
https://blog.csdn.net/weixin_49185262/article/details/131448994
我主要说一下基于若依快速二次开发的方法,给自己做个记录,若有不对的地方欢迎指出批评,过程中的相关的代码都是示例代码,大家仅供参考!
想基于若依快速开发,但是若依有一些能力规范还不够全面,所以需要稍微处理一下,接下来把需要修改的几点罗列一下
关于Mybatis-plus的使用,大家可以参考我的这篇文章:
使用Mybatis-plus清空表数据_mybatisplus删除表所有内容_Alex_81D的博客-CSDN博客
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.4.2</version>
- </dependency>
增加 MybatisPlusConfig.java,并注释掉 MyBatisConfig
内容如下:
- package com.ruoyi.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 配置
- */
- @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();
- }
- }

增加如下配置,并注释掉原来的mybatis的配置信息
- # MyBatis Plus配置
- mybatis-plus:
- configuration:
- map-underscore-to-camel-case: true
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- # 搜索指定包别名
- typeAliasesPackage: com.ruoyi.**.domain
- # 配置mapper的扫描,找到所有的mapper.xml映射文件
- mapperLocations: classpath*:mapper/**/*Mapper.xml

至此,mybatis-plus改造完成
pom文件内容如下:
-
org.projectlombok -
lombok -
1.18.24

这步有需要调整,没需要可以不调整:在ruoyi-admin/pom.xml
-
mysql -
mysql-connector-java -
5.1.16 -
runtime
Knife4j的前身是swagger-bootstrap-ui,可以让swagger显示更加优美
-
com.github.xiaoymin -
knife4j-spring-boot-starter -
3.0.3
在SwaggerConfig中修改内容
- /**
- * 创建API
- */
- @Bean
- public Docket createRestApi()
- {
- return new Docket(DocumentationType.OAS_30)
- // 是否启用Swagger
- .enable(enabled)
- // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
- .apiInfo(apiInfo())
- // 设置哪些接口暴露给Swagger展示
- .select()
- // 扫描所有有注解的api,用这种方式更灵活
- //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
- // 扫描指定包中的swagger注解
- // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
- // 扫描所有
- .apis(RequestHandlerSelectors.any())
- .paths(PathSelectors.any())
- .build()
- /* 设置安全模式,swagger可以设置访问token */
- .securitySchemes(securitySchemes())
- .securityContexts(securityContexts())
- .pathMapping(pathMapping);
- }


来看效果:

是不是比一开始的时候好一点
对比一下:

修改的先写这么多,基本上够用了
- /**
- * @Author
- * @Description
- * @Version 1.0
- */
- @RestController
- @RequestMapping("/freight/freight")
- public class FreightBillController extends BaseController {
-
- @Autowired
- private FreightBillService freightBillService;
-
- @PostMapping("/selectFreightBillList")
- public TableDataInfo selectFreightBillList(@RequestBody FreightBillDTO freightBill)
- {
- startPage();
- List
areaList = freightBillService.selectFreightBillList(freightBill); - return getDataTable(areaList);
- }
-
- @GetMapping("/selectFreightBillById/{id}")
- public AjaxResult selectFreightBillById(@PathVariable("id") Long id)
- {
- FreightBill freightBill = freightBillService.selectFreightBillById(id);
- return AjaxResult.success(freightBill);
- }
-
- /**
- * 导出【请填写功能名称】列表
- */
- @Log(title = "导出", businessType = BusinessType.EXPORT)
- @PostMapping("/export")
- @ResponseBody
- public AjaxResult export(@RequestBody FreightBillDTO freightBill)
- {
- List
list = freightBillService.selectFreightBillList(freightBill); - ExcelUtil
util = new ExcelUtil(FreightBill.class); - return util.exportExcel(list, "XX数据");
- }
-
- /**
- * 新增保存
- */
- @Log(title = "XX新增", businessType = BusinessType.INSERT)
- @PostMapping("/add")
- @ResponseBody
- public AjaxResult addSave(@RequestBody FreightBillDTO freightBill)
- {
- freightBillService.insertFreightBill(freightBill);
- return success();
- }
-
- /**
- * 修改保存
- */
- @Log(title = "修改XX", businessType = BusinessType.UPDATE)
- @PostMapping("/updateFreightBill")
- @ResponseBody
- public AjaxResult updateFreightBill(@RequestBody FreightBillDTO freightBill)
- {
- freightBillService.updateFreightBill(freightBill);
- return success();
- }
-
- /**
- * 删除
- */
- @Log(title = "删除XX", businessType = BusinessType.DELETE)
- @PostMapping( "/deleteFreightBillByIds")
- @ResponseBody
- public AjaxResult deleteFreightBillByIds(String ids)
- {
- freightBillService.deleteFreightBillByIds(ids);
- return success();
- }
-
- /**
- * 删除
- */
- @Log(title = "删除XX", businessType = BusinessType.DELETE)
- @PostMapping( "/deleteFreightBillById")
- @ResponseBody
- public AjaxResult deleteFreightBillById(Long id)
- {
- freightBillService.deleteFreightBillById(id);
- return success();
- }
-
- }
- /**
- * @Author
- * @Description TODO
- * @Version 1.0
- */
- public interface FreightBillService extends IService
{ -
- /**
- * 根据id查询数据
- *
- * @param id
- * @return
- */
- public FreightBill selectFreightBillById(Long id);
-
-
- /**
- * 查询接口
- * @param freightBill
- * @return
- */
- List
selectFreightBillList(FreightBillDTO freightBill); -
-
- /**
- * 新增【请填写功能名称】
- *
- * @param freightBill 【请填写功能名称】
- * @return 结果
- */
- void insertFreightBill(FreightBillDTO freightBill);
-
- /**
- * 修改【请填写功能名称】
- *
- * @param freightBill 【请填写功能名称】
- * @return 结果
- */
- void updateFreightBill(FreightBillDTO freightBill);
-
- /**
- * 批量删除【请填写功能名称】
- *
- * @param ids 需要删除的【请填写功能名称】主键集合
- * @return 结果
- */
- void deleteFreightBillByIds(String ids);
-
- /**
- * 删除【请填写功能名称】信息
- *
- * @param id 【请填写功能名称】主键
- * @return 结果
- */
- boolean deleteFreightBillById(Long id);
- }
- @Service
- public class FreightBillServiceImpl extends ServiceImpl
implements FreightBillService { -
- /**
- * 查询接口
- *
- * @param freightBill
- * @return
- */
- @Override
- public List
selectFreightBillList(FreightBillDTO freightBill) { - //根据条件查询数据信息
- LambdaQueryWrapper
queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(FreightBill::getEnableFlag, "0");
- List
freightBillList = this.list(queryWrapper); - return freightBillList;
- }
-
- /**
- * 查询
- */
- @Override
- public FreightBill selectFreightBillById(Long id) {
- LambdaQueryWrapper
queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(FreightBill::getEnableFlag, "0");
- queryWrapper.eq(FreightBill::getId, id);
- FreightBill freightBill = this.getOne(queryWrapper);
- return freightBill;
- }
-
- /**
- * 新增
- *
- * @return 结果
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void insertFreightBill(FreightBillDTO freightBillDTO) {
- FreightBill freightBill = new FreightBill();
- BeanUtils.copyProperties(freightBillDTO, freightBill);
- freightBill.setEnableFlag("0");
- //将当前用户插入表中
- SysUser useId = ShiroUtils.getSysUser();
- freightBill.setUserId(useId.getUserId());
- freightBill.setUserName(useId.getUserName());
- this.save(freightBill);
- }
-
- /**
- * 修改
- *
- * @return 结果
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void updateFreightBill(FreightBillDTO freightBillDTO) {
- Long id = freightBillDTO.getId();
- FreightBill freightBill = this.selectFreightBillById(id);
-
- if (!ObjectUtils.isEmpty(freightBill)) {
- BeanUtils.copyProperties(freightBillDTO, freightBill);
- updateById(freightBill);
- } else {
- throw new ServiceException("数据不存在!");
- }
- }
-
- /**
- * 批量删除
- *
- * @return 结果
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void deleteFreightBillByIds(String ids) {
- Long[] freightBillids = Convert.toLongArray(ids);
- for (Long freightBillid : freightBillids) {
- this.deleteFreightBillById(freightBillid);
- }
- }
-
- /**
- * 删除
- *
- * @return 结果
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public boolean deleteFreightBillById(Long id) {
- boolean deleteFlag = false;
- FreightBill freightBill = this.selectFreightBillById(id);
- if (!ObjectUtils.isEmpty(freightBill)) {
- freightBill.setEnableFlag("2");
- deleteFlag = updateById(freightBill);
- } else {
- throw new ServiceException("数据不存在!");
- }
- return deleteFlag;
- }
- }
- /**
- * @Author
- * @Description TODO
- * @Version 1.0
- */
- public interface FreightBillMapper extends BaseMapper
{ - }
这里有需要复杂sql操作了,可以在这里写,然后service中引用,我这里给的是极简的示例,仅供参考!
- /**
- * @Author
- * @Description TODO
- * @Version 1.0
- */
- @Data
- @TableName("freight_bill")
- public class FreightBill {
-
- private static final long serialVersionUID = 1L;
-
- /** 主键 */
- @TableField("id")
- @TableId(type= IdType.AUTO)
- private Long id;
-
- /** XX */
- @Excel(name = "车辆类型")
- @TableField("cartype")
- private String cartype;
-
- }
基本上就是这么用的,仅供参考啊
备注:我用的单机版做的示例,按照自己的版本进行调整
把页面上的cookie拿过来放到headers中通过权限校验



调用完成!