云尚办公-0.0.1

news2024/11/20 10:31:22

1. 核心技术

基础框架:SpringBoot
数据缓存:Redis
数据库:MySQL
权限控制:SpringSecurity
工作流引擎:Activiti
前端技术:vue-admin-template + Node.js + Npm + Vue + ElementUI + Axios
微信公众号:公众号菜单 + 微信授权登录 + 消息推送

2. 项目模块

  • YunshangOffice:根模块,管理子模块
    • common:公共类父模块
      • common-util:核心工具类
      • service-util:service模块工具类
      • spring-security:spring-security业务模块
    • model:实体类模块
    • service-oa:系统服务模块

3. 环境搭建

3.1 搭建项目结构

在这里插入图片描述

3.2 引入依赖

3.2.1 YunshangOffice模块依赖

    <!--注意springboot工程一定要引入这个依赖,否则会出错-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.10</version>
    </parent>
    
    <properties>
        <java.version>1.8</java.version>
        <mybatis-plus.version>3.4.1</mybatis-plus.version>
        <mysql.version>8.0.30</mysql.version>
        <knife4j.version>3.0.3</knife4j.version>
        <jwt.version>0.9.1</jwt.version>
        <fastjson.version>2.0.21</fastjson.version>
    </properties>

    <!--配置dependencyManagement锁定依赖的版本-->
    <dependencyManagement>
        <dependencies>
            <!--mybatis-plus 持久层-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--knife4j-->
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>
            <!--jjwt-->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>${jwt.version}</version>
            </dependency>
            <!--fastjson-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.2.2 common-util模块依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>provided </scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
    </dependencies>

3.2.3 service-util模块依赖

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>common-util</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

3.2.4 model模块依赖

    <dependencies>
        <!--lombok用来简化实体类-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <scope>provided </scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <scope>provided </scope>
        </dependency>
    </dependencies>

3.2.5 service-oa模块依赖

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>model</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>service-util</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

3.3 MyBatis-Plus测试

3.3.1 创建数据库和角色表

-- 建数据库
CREATE DATABASE `YunshangOffice`;
use `YunshangOffice`;
-- 建角色表
CREATE TABLE `sys_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色id',
  `role_name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',
  `role_code` varchar(20) DEFAULT NULL COMMENT '角色编码',
  `description` varchar(255) DEFAULT NULL COMMENT '描述',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT '删除标记(0:不可用 1:可用)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='角色';

在这里插入图片描述

3.3.2 配置文件

使用了springboot的应用,配置文件只有一个,名称为application.yml(后缀还可以为yaml或properties),但是在配置文件中可以使用spring.profiles属性指定特定场景下的配置文件,例如,指定开发环境配置文件后缀为dev,那么开发环境的配置文件名称就为application-dev.properties。

# application.yml
spring:
  application:
    name: service-oa
  profiles:
    active: dev
# application-dev.yml,注意这个跟上面的是两个文件
server:
  port: 8800
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 查看日志
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/数据库名?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8 #serverTimezone用于设置时区
    username: 自己的用户名
    password: 自己的密码

在这里插入图片描述

3.3.3 实体类

//BaseEntity
package pers.beiluo.yunshangoffice.model.base;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Data
public class BaseEntity implements Serializable {

    //设置主键生成策略是自增,实体类主键字段与表主键字段一致,所以不需要设置映射关系
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 使用@TableField注解将表中字段与实体类字段匹配
     */
    @TableField("create_time")
    private Date createTime;

    @TableField("update_time")
    private Date updateTime;

    /**
     * @TableLogic注解表示逻辑删除
     */
    @TableLogic
    @TableField("is_deleted")
    private Integer isDeleted;

    /**
     * exist属性为false表示这个字段在表中不存在
     */
    @TableField(exist = false)
    private Map<String,Object> param = new HashMap<>();

}
//sysrole
package pers.beiluo.yunshangoffice.model.system;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import pers.beiluo.yunshangoffice.model.base.BaseEntity;


/**
 * 经过测试发现,如果使用@Data注解,不是子类直接定义的属性,是不会生成相应的set,get方法的
 * 也就是说,如果父类不使用@Data注解,那么子类中就不会存在父类属性的set,get方法
 * 而且需要注意,父类属性不会被写到子类的toString方法中
 * 使用单独的注解如ToString注解,可以通过配置将父类属性写到子类toString方法中
 * @TableName注解用于将实体类与表关联起来
 */
@Data
@TableName("sys_role")
public class SysPole extends BaseEntity {

    //serialVersionUID用于在序列化和反序列化时检查版本一致性问题
    private static final long serialVersionUID = 1L;

    @TableField("role_name")
    private String roleName;

    @TableField("role_code")
    private String roleCode;

    @TableField("description")
    private String description;

}

在这里插入图片描述

3.3.4 添加Mapper类

package pers.beiluo.yunshangoffice.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import pers.beiluo.yunshangoffice.model.system.SysRole;

/**
 * @Mapper:说明这是一个mapper,如果在启动类使用了@MapperScan注解,这里就可以不使用@Mapper注解
 * 因为接口的对象是在运行时生成的,所以编译时会爆红,但是不影响运行
 */
@Mapper
public interface SysRoleMapper extends BaseMapper<SysRole> {

}

在这里插入图片描述

3.3.5 启动类

package pers.beiluo.yunshangoffice;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 使用@MapperScan注解设置在哪个包中扫描mapper,否则会出错
 */
@SpringBootApplication(scanBasePackages = "pers.beiluo.yunshangoffice")
@MapperScan("pers.beiluo.yunshangoffice")
public class ServiceAuthApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceAuthApplication.class,args);
    }

}

在这里插入图片描述

3.3.6 测试

//测试类
package pers.beiluo.yunshangoffice;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import pers.beiluo.yunshangoffice.mapper.SysRoleMapper;
import pers.beiluo.yunshangoffice.model.system.SysRole;

import javax.annotation.Resource;
import java.util.List;

//springboot中的测试类需要写上@SpringBootTest注解,否则测试会报错
@SpringBootTest
public class SysRoleMapperTest {

    /**
     * 这里使用
     */
    @Autowired
    private SysRoleMapper mapper;

}
3.3.6.1 查询所有角色
    //查询所有用户测试
    @Test
    public void getAllRole(){
        List<SysRole> sysRoles = mapper.selectList(null);
        sysRoles.forEach(System.out::println);
    }

在这里插入图片描述

3.3.6.2 添加角色
    //insert测试
    @Test
    public void insertTest(){
        SysRole sysRole = new SysRole();
        sysRole.setRoleName("角色管理员");
        sysRole.setRoleCode("role");
        sysRole.setDescription("角色管理员");

        int insert = mapper.insert(sysRole);
        System.out.println(insert);
        //mybatis中自动生成的主键会自动填回到实体类对象中
        System.out.println(sysRole);
    }

在这里插入图片描述

3.3.6.3 更新角色
    //跟新角色
    @Test
    public void updateTest(){
        SysRole sysRole = new SysRole();
        sysRole.setId(1L);
        sysRole.setRoleName("普通管理员111");

        int i = mapper.updateById(sysRole);
        System.out.println(i);
    }

在这里插入图片描述

3.3.6.4 删除角色
    //根据id删除角色
    @Test
    public void deleteTest(){
        int i = mapper.deleteById(9);
        System.out.println(i);
    }

在这里插入图片描述

    //批量删除角色
    @Test
    public void deleteBatchTest(){
        //Arrays.asList将数组转换成list
        int i = mapper.deleteBatchIds(Arrays.asList(1,2));
        System.out.println(i);
    }

在这里插入图片描述
在这里插入图片描述

3.3.6.5 条件查询
    //条件查询
    @Test
    public void queryTest(){
        //new一个wrapper
        //QueryWrapper<SysRole> sysRoleQueryWrapper = new QueryWrapper<>();
        //设置条件,注意第一个参数为数据库表的字段名,不是实体类的字段名
        //sysRoleQueryWrapper.eq("role_code", "role");

        //使用lambdaquerywrapper可以避免字段名写错的问题
        LambdaQueryWrapper<SysRole> sysRoleQueryWrapper = new LambdaQueryWrapper<>();
        //设置条件,这种方式获取表字段名的原理是:首先会有一个缓存存储了实体类字段与表字段的对应关系
        //然后通过方法名得到对应的实体类字段名,再通过缓存查找相应字段名
        sysRoleQueryWrapper.eq(SysRole::getRoleCode,"role");

        //查询
        List<SysRole> sysRoles = mapper.selectList(sysRoleQueryWrapper);
        sysRoles.forEach(System.out::println);
    }

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1469291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

适合新手博主站长使用的免费响应式WordPress博客主题JianYue

这款JianYue主题之所以命名为 JianYue&#xff0c;意思就是简单而不简约的。是根据Blogs主题优化而成&#xff0c;剔除了一些不必要的功能及排版&#xff0c;仅保留一种博客布局&#xff0c;让新手站长能够快速手上WordPress。可以说这款主题比较适合新手博主站长使用&#xff…

B树的介绍

R-B Tree 简介特性B树特性m阶B树的性质&#xff08;这些性质是B树规定的&#xff09; B树的搜索B树的添加B树的删除——非叶子结点 简介 R-B Tree又称为Red-Black Tree&#xff0c;红黑树。是一种特殊的二叉查找树&#xff0c;红黑树的每个节点上都有存储为表示结点的颜色&…

源代码管理——码云Gitee

目录 Git安装 Gitee配置SSH 源代码管理常规操作 1.idea配置git 2.常规操作 Git安装 安装Git是进行源代码管理的基本步骤之一。以下是在本地安装Git的通用步骤&#xff0c;适用于Windows系统&#xff1a; 下载Git安装程序: 访问Git官网的下载页面&#xff1a;Git官网下载地…

2024 CKS 题库 | 12、Sysdig falco

不等更新题库 CKS 题库 12、Sysdig & falco Task&#xff1a; 使用运行时检测工具来检测 Pod tomcat123 单个容器中频发生成和执行的异常进程。 有两种工具可供使用&#xff1a; sysdigfalco 注&#xff1a; 这些工具只预装在 cluster 的工作节点 node02 上&#xff0c;…

信号处理 | 短时傅里叶变换实战

短时傅里叶变换(STFT)原理 短时傅里叶变换&#xff08;Short-Time Fourier Transform, STFT&#xff09;是一种分析时变信号频率特性的方法。它通过将长时间的信号分割成较短的时间片段&#xff0c;然后对每个时间片段进行傅里叶变换&#xff0c;从而克服了传统傅里叶变换无法…

【Java程序设计】【C00300】基于Springboot的足球社区管理系统(有论文)

基于Springboot的足球社区管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的足球社区管理系统&#xff0c;本系统有管理员以及教练角色权限&#xff1b; 管理员设置的功能有&#xff1a;添加并管理各种类型…

代码随想录day33-动态规划的应用1

LeetCode62.不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 …

可视化 RAG 数据 — 用于检索增强生成的 EDA

原文地址&#xff1a;Visualize your RAG Data — EDA for Retrieval-Augmented Generation 2024 年 2 月 8 日 Github&#xff1a;https://github.com/Renumics/rag-demo/blob/main/notebooks/visualize_rag_tutorial.ipynb 为探索Spotlight中的数据&#xff0c;我们使用Pa…

linux 文本编辑命令【重点】

目录 vi&vim介绍 vim安装 vim使用 查找命令 find grep 文本编辑的命令&#xff0c;主要包含两个: vi 和 vim vi&vim介绍 作用: vi命令是Linux系统提供的一个文本编辑工具&#xff0c;可以对文件内容进行编辑&#xff0c;类似于Windows中的记事本 语法: vi file…

NXP实战笔记(十):S32K3xx基于RTD-SDK在S32DS上配置CAN通信

目录 1、概述 2、SDK配置 2.1、配置目标 2.2、CAN配置 3、代码实现 4、测试结果 1、概述 S32K3xx的FlexCan与之前的S32K1xx很相似,Can的中断掩码寄存器(IMASK3)与中断标志位寄存器(IFLAG3)依赖于邮箱数。 FlexCan配置实例如下 FlexCan的整体图示如下 Protocol Engine…

MiKTeX安装后,Latex编译后PDF无法预览,是灰色的

解决方式删掉编译器就可以&#xff0c; 即删掉MiKTeX MiKTeX安装后会将编译器默认修改为MiKTeX&#xff0c;这个时候会显示报错&#xff0c;简单粗暴的方式是删掉MiKTeX软件

程序员可以做什么副业呢?

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…

纽约纳斯达克大屏投放受众群体有哪些-大舍传媒

纽约纳斯达克大屏投放受众群体有哪些-大舍传媒 1. 纳斯达克大屏的概述 纳斯达克大屏是全球金融市场中最出名的电子交易平台之一。作为一个重要的金融信息传递渠道&#xff0c;纳斯达克大屏吸引了来自全球的投资者的目光。在这个巨大的投放平台上&#xff0c;大舍传媒希望为客…

【机器学习基础】一元线性回归(适合初学者的保姆级文章)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…

python中的类与对象(1)

目录 一. 引子&#xff1a;模板 二. 面向过程与面向对象 &#xff08;1&#xff09;面向过程编程 &#xff08;2&#xff09;面向对象编程 三. 对象与类 &#xff08;1&#xff09;对象 &#xff08;2&#xff09;类 四. 面向对象程序设计的特点&#xff1a;封装&#…

互联网加竞赛 机器视觉opencv答题卡识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 答题卡识别系统 - opencv python 图像识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分…

【k8s资源调度-HPA(自动扩缩容)】

1、HPA可以做什么&#xff1f; 通过观察pod的cpu、内存使用率或自定义metrics指标进行自动的扩容或缩容pod的数量。通常用于Deployment&#xff0c;不适用于无法扩/缩容的对象&#xff0c;如DaemonSet。控制管理器每隔30s(可以通过-horizontal-pod-autoscaler–sync-period修改…

TensorRT及CUDA自学笔记003 NVCC及其命令行参数

TensorRT及CUDA自学笔记003 NVCC及其命令行参数 各位大佬&#xff0c;这是我的自学笔记&#xff0c;如有错误请指正&#xff0c;也欢迎在评论区学习交流&#xff0c;谢谢&#xff01; NVCC是一种编译器&#xff0c;基于一些命令行参数可以将使用PTX或C语言编写的代码编译成可…

STL容器之list

​ 1.封装除了对数据的保护、更好地管理数据之外&#xff0c;还有实现了对上层的统一&#xff1b; ​ 2.类模板参数的不同&#xff0c;一方面是为了实例化出来不同的类&#xff0c;另一方面是为了实现类的成员函数的不同&#xff1b; 一、认识list ​ 1.list是一种带头双向循…

软件实例,物流货运配货单打印模板软件单据打印查询管理系统软件教程,可以同时打印标签或补打

软件实例&#xff0c;物流货运配货单打印模板软件单据打印查询管理系统软件教程&#xff0c;可以同时打印标签或补打 一、前言 以下软件教程以 佳易王物流单打印查询系统V17.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 这个版本在原来基…