云尚办公-0.0.1

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-oaprofiles: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.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: 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 {/*** 这里使用*/@Autowiredprivate SysRoleMapper mapper;}
3.3.6.1 查询所有角色
    //查询所有用户测试@Testpublic void getAllRole(){List<SysRole> sysRoles = mapper.selectList(null);sysRoles.forEach(System.out::println);}

在这里插入图片描述

3.3.6.2 添加角色
    //insert测试@Testpublic 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 更新角色
    //跟新角色@Testpublic 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删除角色@Testpublic void deleteTest(){int i = mapper.deleteById(9);System.out.println(i);}

在这里插入图片描述

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

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

3.3.6.5 条件查询
    //条件查询@Testpublic 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://xiahunao.cn/news/2807735.html

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

相关文章

Mac OS 下载安装与破解Typora

文章目录 下载Typora破解Typora1. 进入安装目录2. 找到并打开Lincense文件3. 修改激活状态4. 重新打开Typora 下载Typora 官网地址&#xff1a;typora官网 下载最新Mac版&#xff0c;正常安装即可 破解Typora 打开typora,可以看到由于未激活&#xff0c;提示使用期限还剩下15…

【Linux】--- 详解Linux软件包管理器yum和编辑器vim

目录 一、Linux软件包管理器 - yum1.1 yum和软件包是什么1.2 Linux系统(Centos)的生态1.3 yum相关操作1.4 yum本地配置 二、Linux编辑器 - vim使用2.1 vim的基本概念2.2 vim命令模式命令集2.3 vim末行模式命令集2.4 关于vim的几个相关问题 一、Linux软件包管理器 - yum 1.1 yu…

hbuilder 发布为微信小程序

发布为微信小程序&#xff1a; 申请微信小程序AppID&#xff0c;参考&#xff1a;微信教程。在HBuilderX中顶部菜单依次点击 "发行" > "小程序-微信"&#xff0c;输入小程序名称和appid点击发行即可在 unpackage/dist/build/mp-weixin 生成微信小程序项…

Debezium发布历史149

原文地址&#xff1a; https://debezium.io/blog/2023/06/21/debezium-2-3-final-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 2.3.0.Final Released June 21, 2023 by Chris Cranford re…

计网 - 深入理解HTTPS:加密技术的背后

文章目录 Pre发展历史Http VS HttpsHTTPS 解决了 HTTP 的哪些问题HTTPS是如何解决上述三个风险的混合加密摘要算法 数字签名数字证书 Pre PKI - 数字签名与数字证书 PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 发展历史 HTTP&#xff08;超文本传输协…

jQuery瀑布流画廊,瀑布流动态加载

jQuery瀑布流画廊&#xff0c;瀑布流动态加载 效果展示 手机布局 jQuery瀑布流动态加载 HTML代码片段 <!-- mediabanner --><div class"mediabanner"><img src"img/mediabanner.jpg" class"bg"/><div class"text&qu…

字符串(算法竞赛)--Manacher(马拉车)算法

1、B站视频链接&#xff1a;F05 Manacher(马拉车)_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】manacher - 洛谷 ​ #include <bits/stdc.h> using namespace std; const int N3e7; char a[N],s[N]; int d[N];//回文半径函数void get_d(char*s,int n){d[1]1;for(int…

Vue+SpringBoot打造校园二手交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手商品档案管理模块2.3 商品预约管理模块2.4 商品预定管理模块2.5 商品留言板管理模块2.6 商品资讯管理模块 三、实体类设计3.1 用户表3.2 二手商品表3.3 商品预约表3.4 商品预定表3.5 留言表3.6 资讯…

Docker 第十九章 : 阿里云个人镜像仓使用

Docker 第十九章 : 阿里云个人镜像仓使用 本章知识点: 如何创建镜像库,如何设置密码,如何登录与退出个人镜像仓,如何本地打镜像,如何将本地镜像推送到个人镜像库。 背景 在项目YapiDocker部署中,因读取mongo:latest 版本不一致,导致后续执行步骤的异常。遇到此场景…

Elasticsearch安装需编译的版本分词器,出现的编译问题

一般来说&#xff0c;网上很多教程在讲如何安装es的ik分词器&#xff0c;包括项目文档也有提及&#xff1a;​​​​​​Releases medcl/elasticsearch-analysis-ik GitHub 如果是对应版本作者已经编译好的还比较容易安装&#xff0c;如下图&#xff1a; 但如果是只有源代码…

【数据结构-字符串 五】【字符串转换】字符串转为整数

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【字符串转换】&#xff0c;使用【字符串】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

提高自定义词汇的 RAG 性能

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research),及时查看最新内容 原文标题:Improve RAG performance on custom vocabulary 原文地址:https://medium.com/datadriveninve…

Qt RGB三色灯上位机

今天突发奇想做一个Qt RGB三色灯上位机&#xff0c;刚好手上有一个RGB三色灯和arduion开发板。 我是想实现一个颜色选择器界面然后鼠标点击颜色区域就可以发出rgb的值&#xff0c;然后把这个值通过串口线发送给arduion,arduion再解析出数据发送给RGB三色灯。 实现界面如下&…

【图片公式识别】图片公式转Word与LaTeX文档:智能识别与转换

前言 嘿&#xff0c;大家好呀&#xff01;&#x1f44b; 谁都知道&#xff0c;写 Word 文档里的公式可不是一件简单的事情&#xff01;你辛辛苦苦在键盘上敲出的数学公式&#xff0c;结果随着 Word 版本的更新&#xff0c;竟然变成了一张图片&#xff01;&#x1f624; 这简直就…

智慧城市与数字孪生:共创未来城市新篇章

一、引言 随着科技的飞速发展&#xff0c;智慧城市与数字孪生已成为现代城市建设的核心议题。智慧城市注重利用先进的信息通信技术&#xff0c;提升城市治理水平&#xff0c;改善市民生活品质。而数字孪生则通过建立物理城市与数字模型之间的连接&#xff0c;为城市管理、规划…

【杂谈】还能这么骗Github开源者?

起因 StarkNet给Github前5000的账户空投了一波STRK代币,一般有资格获得空投的开发者&#xff0c;大概能获得 110个 STRK 代币&#xff0c;按目前价格计算大概 1500人民币左右。 什么是有资格的开发者呢&#xff1f;按 Starknet要求&#xff0c;如果你给在 GitHub上排名前 5000…

动态规划课堂1-----斐波那契数列模型

目录 动态规划的概念&#xff1a; 动态规划的解法流程&#xff1a; 题目: 第 N 个泰波那契数 解法&#xff08;动态规划&#xff09; 代码&#xff1a; 优化&#xff1a; 题目&#xff1a;最小花费爬楼梯 解法&#xff08;动态规划&#xff09; 解法1&#xff1a; 解…

【深度学习】Pytorch 教程(十一):PyTorch数据结构:4、张量操作(2):索引和切片操作

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

现在学Oracle是49年入国军么?

今天周末&#xff0c;不聊技术&#xff0c;聊聊大家说的最多的一个话题 先说明一下&#xff0c;防止挨喷&#x1f606; 本人并不是职业dba&#xff0c;对数据库就是爱好&#xff0c;偶尔兼职&#xff0c;以下仅个人观点分析&#xff0c;如有不同观点请轻喷&#xff0c;哈哈&…

U盘乱码与文件丢失:恢复指南与预防策略

U盘乱码文件丢失是一种常见的技术问题&#xff0c;通常表现为存储在U盘中的文件名显示为不可识别的字符或文件无法正常打开&#xff0c;有时甚至文件会完全消失。这种情况可能由多种原因引起&#xff0c;包括但不限于文件系统损坏、不正确的拔插操作、病毒感染、兼容性问题等。…