文章目录
项目实训1
项目实训1主要讲解了数据库,SpringBoot,模板技术,脚手架以及项目的部署,远程开发。
开发环境:win10 IDEA 2021 CentOS 8
1.阅读系统使用手册
1.角色的分类
角色名称 | 角色描述 | 可访问功能 |
---|---|---|
经理 | 公司经理主要负责把控项目流程、进度。 | 分组管理 |
普通员工 | 每个用户必备角色。 | 日报管理、周报管理、周报查看 |
工作负责人 | 当前工作(项目)的负责人 | 日报审查、 |
人力负责人 | 主要管理人员变动等 | 周期定义 |
系统管理员不参与业务的操作,只参与后台管理部分
通过用例图描述业务,业务之间也有扩展。表示当前系统的角色和功能。
经理、工作负责人、人力负责人首先是普通员工(extend) 子类
多态:完成新的功能
不同的人属于不同的角色,拥有不同的权限
2.系统功能
角色关联功能(操作项)菜单项,准确是权限
角色是权限的载体
变化的配置数据字典
不变的写到代码里面
2.数据库设计
核心为ER图
三种关系:一对一,一对多,多对多
一对多,多对多的关系引出主外键
详细设计的每张表,1.表名大写(1.查询快,2.linux下区分大小写,系统可移植性强)
2.无驼峰命名下划线区分单词 3.表要加前缀模块名 4.中文注释
数据库设计,数据库表的模板
工作组信息(WM_GROUP)
名称 | 代码 | 数据类型 | 长度 | 精度 | 主要的 |
---|---|---|---|---|---|
主键 | GRP_ID | char(36) | 36 | TRUE | |
组名 | GRP_NAME | char(36) | 36 | FALSE | |
类型 | GRP_TYPE | varchar(32) | 32 | FALSE | |
父节点 | GRP_PID | char(36) | 36 | FALSE | |
状态 | GRP_STATE | varchar(32) | 32 | FALSE | |
成立时间 | GRP_START_TIME | date | FALSE | ||
结束时间 | GRP_END_TIME | date | FALSE | ||
排序 | GRP_NUMBER | integer | FALSE |
数据库设计要满足三大范式。
1.主键 数据记录独一无二 bigint java(long)
分布式避免自增长,一般用雪花算法生成,单体系统可以考虑自增长
数据库编码:utf8mb4
gbk中国的 utf8国际的
微信表情存放都为utf8mb4,数据库默认编码为utf8mb4
3.git安装及使用
git --version 查看版本 git是linux伪环境,有linux伪命令
1.添加环境变量(伪命令目录)D:\IDEA\Git\Git\usr\bin
检测git是否配好
2.通过cmd运行伪命令
git无密码,分布式
git初此设置用户名,邮箱
4.sql注意事项
sql文件放在根目录下
数据库sql
1.结构化sql 2.datasql
sql文件命名:模块名拼音(文件名建议小写)
CREATE DATABASE if not exists `zy-wm` default charset utf8mb4;
USE `zy-wm`;
DROP TABLE IF EXISTS `WM_BOOK`;
create table if not exists `BOOK`
(
`BOOK_ID` int auto_increment comment '图书的主键',
`BOOK_NAME` varchar(255) not null comment '图书的名称',
`BOOK_PRICE` decimal(10, 2) not null comment '图书的价格',
primary key(`BOOK_ID`)
) comment '图书信息表';
字段的命名显而易见,为名词,日期统一
5.Maven本地配置
1.本地仓库
<localRepository>D:/Maven/MavenRepository/microservice</localRepository>
2.阿里云镜像
<mirror>
<!-- 使用阿里云 -->
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
3.环境变量
MAVEN_HOME
path添加 %MAVEN_HOME%\bin
检测Maven是否配好
IDEA配Maven (建议配新项目设置New Projects Setup的那部分Maven)
6.建Maven项目
1.创建普通Maven项目(项目名不以数字开头)
Maven核心思想:约定大于配置
main/java目录:java代码 resourses目录:配置文件 test/java:单元测试 webapp:web开发
Maven的灵魂:pom.xml
当前项目的坐标:GAV
G:域名 A:项目名 V:版本号 properties里大于等于8
2.添加依赖
官网根据GAV找 https://search.maven.org/
自动提示
加入git版本控制,可以回退
.gitignore插件,创建.gitignore文件,添加忽略文件。.idea和.gitignore
子模块创建
module
项目实战
1.构建父子模块,用列表实现CRUD
https://gitee.com/yfeifei/crud
2.增加用户,能够返回自增的主键(MVC实现)
https://gitee.com/yfeifei/springbootdemo
3.实现用户登录显示数据库中的数据(全局异常处理使用)
https://gitee.com/yfeifei/spring-boot-login
7.VSC远程连接服务器
1.本地连接
本地通过git完成
1.生成公钥私钥
ssh-keygen -t rsa
2.本地hosts添加
ip 服务器名称
3.复制公钥
ssh-copy-id root@CentOS8.5
1.VSC连接
1.安装插件
2.使用插件
通过点击电脑形状,新建,输入ssh root@CentOS8.5 连接,最后如下图
8.Docker安装
- 安装必要的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 - 设置 Docker 的安装源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast - 安装 Docker 社区版本
yum install docker-ce docker-ce-cli containerd.io - 测试是否安装成功
systemctl start docker && systemctl enable docker - docker run hello-world
9.Docker镜像
1.mysql
10.脚本运行
1.前期准备
linux 安装 jdk,gitMaven。jdk和git都可直接通过yum命令,省去了配置环境变量,Maven用weget
wget 地址
例如:下载3.6.3
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -zxvf 压缩包名
例如解压 tar -zxvf apache-maven-3.6.3-bin.tar.gz
mv 文件名 maven363
例如移动文件 apache-maven-3.6.3
mv apache-maven-3.6.3 maven363
建议配置加上版本号
2.配置maven
export MAVEN_HOME=/usr/local/maven363
export PATH=
P
A
T
H
:
PATH:
PATH:MAVEN_HOME/bin(环境变量)
source /etc/profile (执行脚本)
配置阿里云仓库
从gitee克隆本地所上传的项目
git clone https://gitee.com/yfeifei/spring-boot-login.git
克隆后进入含有pom.xml的目录
git config --global credential.helper store
3.编写脚本
目录结构
mysql的Dockerfile56
FROM mysql:5.6
COPY sql/* /docker-entrypoint-initdb.d
spring-boot-login的Dockerfile
FROM openjdk:8
COPY target/SpringBoot1-2-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Xms256m","-Duser.timezone=GMT+8","-Xmx512m","-jar","/app.jar"]
rj.sh(家目录下)
# !bin/bash
result=` docker network ls | grep jdnetwork `
if [[ "$result" != "" ]]
then
echo "已经创建了jdnetwork"
else
docker network create jdnetwork
fi
cd project/docker/mysql
docker stop `docker ps -aq`
#删除mysql容器
docker rm jdmysql
#删除mysql镜像
docker rmi zymysql:5.6
#再次构建mysql镜像
docker build -f Dockerfile56 -t zymysql:5.6 .
#通过mysql镜像创建并运行容器
docker run -itd --name jdmysql -p3306:3306 --network=jdnetwork -v /my/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root zymysql:5.6
testPath="project/spring-boot-login"
cd ~/project
#指定的文件夹不存在,则从gitlab仓库克隆项目
if [[ ! -d "$testPath" ]]
then
git clone https://gitee.com/yfeifei/spring-boot-login.git;
fi
cd spring-boot-login
git pull
mvn clean install -Dmaven.test.skip=true
docker rm wmSpringboot
docker rmi wmboot
docker build -t wmboot .
docker run -itd --name wmSpringboot -p8080:8080 --network=jdnetwork wmboot
4.运行脚本
查看容器是否运行
通过外网访问
最后显示出了数据库中的数据
11.若依脚手架
1.克隆部署到本地
构建dev分支,运行通过表构建增删改查
自动产生grp_id (数据库字段为char)
import java.util.UUID;
String grp_id = UUID.randomUUID().toString();
wmGroup.setGrpId(grp_id);
通过预览编辑生成的代码,加入字典管理
2.实现字典下拉框
1.对于工作组的分组设置字典
2.代码生成部分添加字典
3.查看生成代码部分
实际引用 required="required"必填项
<div class="form-group">
<label class="col-sm-3 control-label">分组类型:</label>
<div class="col-sm-8">
<select name="grpType" class="form-control m-b" th:with="type=${@dict.getType('grp_type')}" required="required">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
前端显示界面
以上通过字典回显,代码部分主要是
<script th:inline="javascript">
var grpTypeDatas = [[${@dict.getType('grp_type')}]];
$(function() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "工作组信息",
columns: [{
checkbox: true
},
{
field: 'grpId',
title: '主键ID',
visible: false
},
{
field: 'grpName',
title: '分组名称'
},
{
field: 'grpType',
title: '分组类型',
formatter: function(value, row, index) {
return $.table.selectDictLabel(grpTypeDatas, value);
}
}]
};
$.table.init(options);
});
</script>
3.实现部分前端验证
jquery实现部分前端验证
<style> .col-sm-3:before{content: '*';color: red;}</style>
<script th:inline="javascript">
var prefix = ctx + "system/group"
$("#form-group-add").validate({
focusCleanup: true,
rules:{
grpName:{
required: true
},
grpNumber: {
required: true,
digits: true
}
},
messages:{
grpName:{
required:'请输入组名'
},
grpNumber:{
required:'请输入数字',
digits:'排序请输入整数'
}
}
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-group-add').serialize());
}
}
</script>
通过name字段实现,如图
使用若依脚手架的过程中要适应系统的代码,根据系统的代码去完善自己想要生成的代码。