Jeesite 4.0 学习笔记

Jeesite 4.0 学习笔记

Jeesite简介

Jeesite是一个 Java EE 企业级快速开发平台。
框架:SpringBoot + SpringMVC + Apache Shiro + MyBatis + Beetl(模板) + Boostrap + AdminLTE(UI)
核心模块:组织机构、角色用户、菜单及按钮授权、数据授权、系统参数等。
技术选型:见官方文档。

环境配置

Java 1.8 环境配置
maven 环境配置
mysql 环境配置

eclipse安装与配置

详见 eclipse使用笔记 文档

https://www.jeesite.com/docs/install-deploy/)

Jeesite 文件结构与配置

一、聚合工程

SpringBoot是java领域微服务架构最优落地技术,springboot + MongoDB 方案是在微服务架构下数据治理的最佳方案之一

jeesite分层模式

[ 表现层:com.jeesite.modules.*.web     ]



[ 业务层:com.jeesite.modules.*.service ]

												[ Database ]

[ 持久层:com.jeesite.modules.*.dao     ]



[ 实体层:com.jeesite.modules.*.entity  ]

发布部署

从

 ⚪ ————> 负载均衡服务器 ————> 一系列tomcat高并发	(Cluster)

								  DataBase...
到

分布式架构

分布式架构例图

架构图

什么是聚合工程?

......

二、模块间依赖关系

三、配置文件

spring boot 默认大于配置(doge)

四、文件结构

具体的目录和用途可查看官方文档:
目录结构介绍、快速了解每个文件目录包的意图 - JeeSite 4.x

IDEA:从项目导入到模块创建

// 本例清空了之前的项目数据和项目部署下载的maven仓库

一、项目导入

step 01:打开项目
open打开项目,按照提示import,trust project

image-20210814161155051image-20210814161346394image-20210814161408117

注意,maven若非缺省,需要在 settings... 和 new projects settings 中都作修改

step 02:查看项目目录
查看项目目录,多数文件夹带有蓝色小方块,即maven项目导入成功的标志
image-20210814161454382
step 03:打开主启动类

打开 web 工程下主启动类,发现大量报红

image-20210814161559628
step 04:maven依赖配置

由大量试错踩坑分析得出结论,是由maven依赖导入冲突和失败引起的
右侧工具栏调出maven,进行reload

image-20210814161623718

打开 web 下pom文件,将eclipse插件注释掉,防止idea不需要的插件报错出现幺蛾子

image-20210814161712863

maven工具栏找到 Jeesite的root模块,依次进行clean和install,过程较长,耐心等待哦

image-20210814162259322

加载结束后,reload一下

image-20210814162930396

主启动类不报红了,泪目了家人们!

image-20210814163051728

// 补充:如果还是不行,可以试着再depoly一下或者到别的模块进行同样的操作;
秘诀就是对着maven工具栏疯狂clean、install和reload......

step 05:数据库连接和配置

先去powershell (管理员),net start mysql一下,启动mysql
mysql服务启动成功后,到 web \ src \ main \ resource \ application.yml 文件进行数据库配置

image-20210814164310916

然后启动web \ bin \ init-data.sh ,进行数据初始化,过程较长,去喝口茶,初始化完毕~

数据初始化相关说明
需要注意的是,
01 数据库初始化时,更改my.ini配置文件可能出现报错,导致mysql服务无法再次启动,此处提供重新安装mysql一种解决办法
02 官方提供的数据库授权语句等语法对于mysql 8.0 版本不一定适用,需要自行更改
03 不要直接cv,先cv到记事本中,再cv到powershell中,避免中英文的全角半角问题

step 06:启动项目

启动项目,验证项目部署是不是成功了(肯定成功了!)
打开登录网址 http://127.0.0.1:8980/js

image-20210814163309324

成功了,快乐!

二、创建新模块

step 07:数据库准备

第一步:创建数据表

只能说可视化建表确实不如直接敲sql语句方便

create table book_catalogue(
	id varchar(64) primary key,
	book_id int(64) not null,
	book_name varchar(64),
	book_author varchar(64),
	book_label varchar(64),
	status char(1),
	create_by varchar(64),
	create_date datetime,
	update_by varchar(64),
	update_date datetime,
	remarks nvarchar(500)
);

第二步:向新表中插入数据

insert into book_catalogue(
	id,book_id,book_name,book_author,book_label
)values(
	"2191320001",1,"瓦尔登湖","梭罗","哲学"
);
insert into book_catalogue(
	id,book_id,book_name,book_author,book_label
)values(
	"2191320002",2,"围城","钱钟书","小说"
);
insert into book_catalogue(
	id,book_id,book_name,book_author,book_label
)values(
	"2191320003",3,"中国哲学简史","冯友兰","哲学"
);
insert into book_catalogue(
	id,book_id,book_name,book_author,book_label
)values(
	"2191320004",4,"资治通鉴","司马光","历史"
);
insert into book_catalogue(
	id,book_id,book_name,book_author,book_label
)values(
	"2191320005",5,"庄子","庄子","人生"
);
insert into book_catalogue(
	id,book_id,book_name,book_author,book_label
)values(
	"2191320006",6,"活着","余华","小说"
);

在Navicat中查看,插入成功咯!

image-20210814164229978附录:建表和插入数据的语法模板

创建数据表

create table table_name(
	id varchar(64) primary key,
    #推荐添加: table_id int(64) not null,
    ## 添加自己的属性
	status char(1),
    #状态(0正常 1删除 2停用 3冻结 4审核 5驳回 9草稿)
	create_by varchar(64), #创建者
	create_date datetime, #创建时间
	update_by varchar(64), #更新者
	update_date datetime, #更新时间
	remarks nvarchar(500) #备注
);

插入数据

insert into book_catalogue(
	id,book_id,book_name,book_author,book_label
)values(
	"2191320001",1,"围城","钱钟书","小说"
);
step 08:创建新模块

在Jeesite界面创建新模块生成代码

到 系统管理\研发工具\代码生成工具 下,点击新增

image-20210814175523970

选择之前创建的数据表(而且如果能看到这张表也验证了数据库连接是没有问题滴)

image-20210814164644475

按照提示填入相关信息

image-20210814164719490

默认生成即可,有特殊需求可以自行更改

image-20210814164737146
统一的生成包路径按缺省即可
生成基础路径需要改到 modules\模块名 下,方便以后的模块管理
(改为web工程的同级目录modules下以模块名命名的文件夹中,本次示例中为 ...\modules\book)

image-20210814165409689

点击保存并生成代码

image-20210814165429733

出现绿绿的提示信息,大成功了属于是,那么去哪里查看呢
点击界面如图所示图标,进行菜单创建,按照提示信息输入菜单名称和权限等就可以辣~

image-20210814165036379

去康康新建的菜单吧

image-20210814165109182

发现找不到,为什么呢?
来到了另一个高血压级别的bug.......

image-20210814165128092

又去看了看官方指导文档
哦!原来是module没有声明引入啊

在root下pom文件添加如图语句

<module>../modules/module_name</module>

image-20210814165549407

在web下pom文件,添加如图依赖

copy一下核心模块的代码,然后改个名字,再paste一下就好辣

image-20210814165618648

image-20210902104241886

当然,梦幻般地报红了(啊这)
通过笔者积极地重复试验、探索和瞎搞,终于发现,
原来是idea根本就没有把我们添加的book模块作为maven module识别到(你看book上都没有蓝色小方块),
我们需要给它加一个pom文件

image-20210814165653938

打开 modules\temlate\pom,xml ,copy下来,
然后在book文件夹上右键,建立一个新File,命名为pom.xml,
将之前copy的内容paste到该book下的pom文件中,将下图所示位置改为我们的模块名book

image-20210814165757599

在maven工具栏中reload一下,发现我们新建的book模块也拥有了梦寐以求的蓝色小方块

image-20210814165954814

热更新一下项目,去Jeesite菜单界面看看吧

image-20210814175504197

???我的数据呢?我的数据呢?
不过,既然出现属性栏,说明模块已经成功添加了
我们试着新增一行数据,看看出现什么问题了
点击新增,填入数据后,打开Nacivat,发现我们新增的一行(id很奇怪的那一行),status是0,于是我们给它们都改成0

image-20210814170732314

再看一下

image-20210814170746285

大!胜!利!好耶!

补充:手动创建

如果想手动创建一个新的模块,可以参考以下方法:
注意,
本项目整体为一个maven project,当我们创建新模块时,选择maven module
创建时,create from archetype 可以用来创建maven module的模板,如无需要可以不必勾选
step 01 创建
File ——> New ——> Module ——> 选择maven ——>选择SDK ——>
是否勾选 create from archetype ——> 选择parent ——> 输入name ——>
设置Location,选择jeesite-web目录下modules文件夹路径,然后在该目录下添加新模块同名文件夹 ——>
创建完成
step 02 配置
在 new module 的pom文件中添加以下依赖

		<!-- 核心模块 -->
		<dependency>
			<groupId>com.jeesite</groupId>
			<artifactId>jeesite-module-core</artifactId>
			<version>${project.parent.version}</version>
		</dependency>

参考自官方文档:快速开始、环境搭建、修改包名、新建模块、正式部署 - JeeSite 4.xhttps://www.jeesite.com/docs/install-deploy/)

以图书管理目录为例的数据流转分析

新增功能

views \ modules \ book \ bookCatalogueList.html

[11]
<a href="${ctx}/book/bookCatalogue/form" class="btn btn-default btnTool" title="${text('新增book_catalogue')}"><i class="fa fa-plus"></i> ${text('新增')}</a>

step 01 点击此处【新增】按钮跳转到表单页面

views \ modules \ book \ bookCatalogueForm.html

<!--form标签内-->
[29]
<span class="required hide">*</span> ${text('book_name')}:<i class="fa icon-question hide"></i></label>
console.log(${text('book_name')})

[69]
<% if (hasPermi('book:bookCatalogue:edit')){ %>
<button type="submit" class="btn btn-sm btn-primary" id="btnSubmit">
    <i class="fa fa-check"></i> ${text('保 存')}
</button>
    
<% } %>
<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()">		<i class="fa fa-reply-all"></i> ${text('关 闭')}
</button>

点击保存,将数据进行提交
点击关闭,触发关闭函数
    
<script>
$("#inputForm").validate({
	submitHandler: function(form){
		js.ajaxSubmitForm($(form), function(data){
			js.showMessage(data.message);
			if(data.result == Global.TRUE){
				js.closeCurrentTabPage(function(contentWindow){
					contentWindow.page();
				});
			}
		}, "json");
    }
});
</script>

web \ BookCatalogueController.java

[80]
	/**
	 * 获取数据
	 */
	@ModelAttribute
	public BookCatalogue get(String id, boolean isNewRecord) {
		return bookCatalogueService.get(id, isNewRecord);
	}
	System.out.println("----------------我是控制层的获取数据1--------------------------------------");
	System.out.println(bookCatalogueService);
	
[77]
	/**
	 * 保存数据
	 */
	@RequiresPermissions("book:bookCatalogue:edit")
	@PostMapping(value = "save")
	@ResponseBody
	public String save(@Validated BookCatalogue bookCatalogue) {
		bookCatalogueService.save(bookCatalogue);
		return renderResult(Global.TRUE, text("保存book_catalogue成功!"));
	}
	System.out.println("----------------我是控制层的获取数据2--------------------------------------");
	System.out.println(bookCatalogueService);

service \ BookCatalogueSerivce.java

[44]
	/**
	 * 保存数据(插入或更新)
	 * @param bookCatalogue
	 */
	@Override
	@Transactional(readOnly=false)
	public void save(BookCatalogue bookCatalogue) {
		super.save(bookCatalogue);
	}

entity \ BookCatalogue.java

// 创建图书管理目录(BookCatalogue)类
程序结构{
    属性
    get和set方法
    数据约束和数据格式
}

dao \ BookCatalogueDao.java

book_catalogueDAO接口
@MyBatisDao
public interface BookCatalogueDao extends CrudDao<BookCatalogue> { null }

控制台分析

从登录页面到点击新增到保存数据的控制台记录(后续信息在此不表)
登录到点击列表

image-20210816102336514 image-20210816102414942 image-20210816102447126 image-20210816102522961

点击新增

image-20210816102628875

录入数据并保存

image-20210816102916882 image-20210816103000288

由此可以得出,
点击新增按钮跳转页面时,
【我是控制层的获取数据】——>【我是控制层的查看编辑表单】
录入信息到点击保存的过程,可以看出:
【我是控制层的获取数据】——>【我是业务层的保存数据】——>【我是控制层的保存数据】——>
也验证了SpringMVC的三层架构
点击保存的同时触发了到目录列表的页面跳转,由此,
【我是控制层的获取数据】——>【我是控制层的查询列表数据】——>【我是业务层的查询分页数据】

简单地说,
用户录入一个数据,数据从View被发送到表现层(Controller)
Controller获取到数据后,将数据发配给Service层的对应处理方法
数据在service层进行一定的业务逻辑处理(调用相关方法处理数据)
处理后的数据被返回提交给Controller对应的部门,执行Controller相应的方法,
然后返回给页面

查询功能

image-20210816103859457
posted @ 2021-08-14 22:34  草系编程苦手  阅读(485)  评论(0编辑  收藏  举报