若依框架RuoYi-Vue: 基于SpringBootSpring SecurityJWTVue Element 的前后端分离权限管理系统同时提供了 Vue3 的版本接口信息增删改查Mysql数据库连接项目运行1.navicat新建数据库2.新建表打开项目找到application-druid.yml文件其中ry-vue为数据库表名可以自行修改输入对应的账号密码3.打开redis4.运行sql文件5.运行项目info接口1.数据库运行以下命令创建info表CREATE TABLE sys_info ( info_id bigint NOT NULL AUTO_INCREMENT COMMENT 主键ID, info_name varchar(100) NOT NULL COMMENT 信息名称, info_type char(1) DEFAULT 0 COMMENT 信息类型0普通 1重要, info_content text COMMENT 信息内容, status char(1) DEFAULT 0 COMMENT 状态0正常 1停用, del_flag char(1) DEFAULT 0 COMMENT 删除标志0代表存在 2代表删除, create_by varchar(64) DEFAULT COMMENT 创建者, create_time datetime DEFAULT NULL COMMENT 创建时间, update_by varchar(64) DEFAULT COMMENT 更新者, update_time datetime DEFAULT NULL COMMENT 更新时间, remark varchar(500) DEFAULT NULL COMMENT 备注, PRIMARY KEY (info_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT信息表;2.实体类代码业务代码放在ruoyi-system模块里和用户管理等放一起最省事也可以新建一个ruoyi-info模块这里以ruoyi-system为例路径ruoyi-system/src/main/java/com/ruoyi/system/domain/SysInfo.java作用和数据库表映射存放数据的实体类package com.ruoyi.system.domain; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; /** * 信息对象 sys_info * * author ruoyi * date 2025-01-01 */ public class SysInfo extends BaseEntity { private static final long serialVersionUID 1L; /** 主键ID */ private Long infoId; /** 信息名称 */ Excel(name 信息名称) private String infoName; /** 信息类型0普通 1重要 */ Excel(name 信息类型, readConverterExp 0普通,1重要) private String infoType; /** 信息内容 */ private String infoContent; /** 状态0正常 1停用 */ Excel(name 状态, readConverterExp 0正常,1停用) private String status; /** 删除标志 */ private String delFlag; public void setInfoId(Long infoId) { this.infoId infoId; } public Long getInfoId() { return infoId; } public void setInfoName(String infoName) { this.infoName infoName; } public String getInfoName() { return infoName; } public void setInfoType(String infoType) { this.infoType infoType; } public String getInfoType() { return infoType; } public void setInfoContent(String infoContent) { this.infoContent infoContent; } public String getInfoContent() { return infoContent; } public void setStatus(String status) { this.status status; } public String getStatus() { return status; } public String getDelFlag() { return delFlag; } public void setDelFlag(String delFlag) { this.delFlag delFlag; } Override public String toString() { return SysInfo{ infoId infoId , infoName infoName \ , infoType infoType \ , infoContent infoContent \ , status status \ , delFlag delFlag \ }; } }3.Mapper 接口 XML路径ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysInfoMapper.java作用定义数据库操作方法package com.ruoyi.system.mapper; import com.ruoyi.system.domain.SysInfo; import java.util.List; public interface SysInfoMapper { /** * 查询信息列表 */ ListSysInfo selectSysInfoList(SysInfo sysInfo); /** * 查询信息详情 */ SysInfo selectSysInfoById(Long infoId); /** * 新增信息 */ int insertSysInfo(SysInfo sysInfo); /** * 修改信息 */ int updateSysInfo(SysInfo sysInfo); /** * 删除信息批量 */ int deleteSysInfoByIds(Long[] infoIds); }路径ruoyi-system/src/main/resources/mapper/system/SysInfoMapper.xml作用写 SQL 语句实现 Mapper 接口的方法?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.ruoyi.system.mapper.SysInfoMapper resultMap typeSysInfo idSysInfoResult result propertyinfoId columninfo_id/ result propertyinfoName columninfo_name/ result propertyinfoType columninfo_type/ result propertyinfoContent columninfo_content/ result propertystatus columnstatus/ result propertydelFlag columndel_flag/ result propertycreateBy columncreate_by/ result propertycreateTime columncreate_time/ result propertyupdateBy columnupdate_by/ result propertyupdateTime columnupdate_time/ result propertyremark columnremark/ /resultMap sql idselectSysInfoVo select info_id, info_name, info_type, info_content, status, del_flag, create_by, create_time, update_by, update_time, remark from sys_info /sql select idselectSysInfoList parameterTypeSysInfo resultMapSysInfoResult include refidselectSysInfoVo/ where del_flag 0 if testinfoName ! null and infoName ! and info_name like concat(%, #{infoName}, %) /if if testinfoType ! null and infoType ! and info_type #{infoType} /if if teststatus ! null and status ! and status #{status} /if order by info_id desc /select select idselectSysInfoById parameterTypeLong resultMapSysInfoResult include refidselectSysInfoVo/ where info_id #{infoId} /select insert idinsertSysInfo parameterTypeSysInfo useGeneratedKeystrue keyPropertyinfoId insert into sys_info( info_name, info_type, info_content, status, del_flag, create_by, create_time, remark ) values ( #{infoName}, #{infoType}, #{infoContent}, #{status}, 0, #{createBy}, sysdate(), #{remark} ) /insert update idupdateSysInfo parameterTypeSysInfo update sys_info set if testinfoName ! null and infoName ! info_name #{infoName},/if if testinfoType ! null and infoType ! info_type #{infoType},/if if testinfoContent ! nullinfo_content #{infoContent},/if if teststatus ! null and status ! status #{status},/if if testupdateBy ! null and updateBy ! update_by #{updateBy},/if update_time sysdate(), if testremark ! nullremark #{remark}/if /set where info_id #{infoId} /update delete iddeleteSysInfoByIds parameterTypeLong update sys_info set del_flag 2 where info_id in foreach collectionarray iteminfoId open( separator, close) #{infoId} /foreach /delete /mapper4. Service 接口 实现类路径ruoyi-system/src/main/java/com/ruoyi/system/service/ISysInfoService.java作用定义业务逻辑接口package com.ruoyi.system.service; import com.ruoyi.system.domain.SysInfo; import java.util.List; public interface ISysInfoService { /** * 查询信息列表 */ ListSysInfo selectSysInfoList(SysInfo sysInfo); /** * 查询信息详情 */ SysInfo selectSysInfoById(Long infoId); /** * 新增信息 */ int insertSysInfo(SysInfo sysInfo); /** * 修改信息 */ int updateSysInfo(SysInfo sysInfo); /** * 删除信息批量 */ int deleteSysInfoByIds(Long[] infoIds); }路径ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysInfoServiceImpl.java作用实现业务逻辑调用 Mapperpackage com.ruoyi.system.service.impl; import com.ruoyi.system.domain.SysInfo; import com.ruoyi.system.mapper.SysInfoMapper; import com.ruoyi.system.service.ISysInfoService; import com.ruoyi.common.utils.SecurityUtils; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; Service public class SysInfoServiceImpl implements ISysInfoService { Autowired private SysInfoMapper sysInfoMapper; Override public ListSysInfo selectSysInfoList(SysInfo sysInfo) { return sysInfoMapper.selectSysInfoList(sysInfo); } Override public SysInfo selectSysInfoById(Long infoId) { return sysInfoMapper.selectSysInfoById(infoId); } Override public int insertSysInfo(SysInfo sysInfo) { sysInfo.setCreateBy(SecurityUtils.getUsername()); return sysInfoMapper.insertSysInfo(sysInfo); } Override public int updateSysInfo(SysInfo sysInfo) { sysInfo.setUpdateBy(SecurityUtils.getUsername()); return sysInfoMapper.updateSysInfo(sysInfo); } Override public int deleteSysInfoByIds(Long[] infoIds) { return sysInfoMapper.deleteSysInfoByIds(infoIds); } }5. Controller 控制层路径ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysInfoController.java作用接收前端请求调用 Service返回结果package com.ruoyi.web.controller.system; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.domain.SysInfo; import com.ruoyi.system.service.ISysInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; RestController RequestMapping(/system/info) public class SysInfoController extends BaseController { Autowired private ISysInfoService sysInfoService; // 删掉 ApiOperation 注解 PreAuthorize(ss.hasPermi(system:info:list)) GetMapping(/list) public TableDataInfo list(SysInfo sysInfo) { startPage(); ListSysInfo list sysInfoService.selectSysInfoList(sysInfo); return getDataTable(list); } PreAuthorize(ss.hasPermi(system:info:query)) GetMapping(/{infoId}) public AjaxResult getInfo(PathVariable Long infoId) { return AjaxResult.success(sysInfoService.selectSysInfoById(infoId)); } PreAuthorize(ss.hasPermi(system:info:add)) Log(title 信息管理, businessType BusinessType.INSERT) PostMapping public AjaxResult add(RequestBody SysInfo sysInfo) { return toAjax(sysInfoService.insertSysInfo(sysInfo)); } PreAuthorize(ss.hasPermi(system:info:edit)) Log(title 信息管理, businessType BusinessType.UPDATE) PutMapping public AjaxResult edit(RequestBody SysInfo sysInfo) { return toAjax(sysInfoService.updateSysInfo(sysInfo)); } PreAuthorize(ss.hasPermi(system:info:remove)) Log(title 信息管理, businessType BusinessType.DELETE) DeleteMapping(/{infoIds}) public AjaxResult remove(PathVariable Long[] infoIds) { return toAjax(sysInfoService.deleteSysInfoByIds(infoIds)); } }