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
注意,maven若非缺省,需要在 settings... 和 new projects settings 中都作修改
step 02:查看项目目录
查看项目目录,多数文件夹带有蓝色小方块,即maven项目导入成功的标志
step 03:打开主启动类
打开 web 工程下主启动类,发现大量报红
step 04:maven依赖配置
由大量试错踩坑分析得出结论,是由maven依赖导入冲突和失败引起的
右侧工具栏调出maven,进行reload
打开 web 下pom文件,将eclipse插件注释掉,防止idea不需要的插件报错出现幺蛾子
maven工具栏找到 Jeesite的root模块,依次进行clean和install,过程较长,耐心等待哦
加载结束后,reload一下
主启动类不报红了,泪目了家人们!
// 补充:如果还是不行,可以试着再depoly一下或者到别的模块进行同样的操作;
秘诀就是对着maven工具栏疯狂clean、install和reload......
step 05:数据库连接和配置
先去powershell (管理员),net start mysql一下,启动mysql
mysql服务启动成功后,到 web \ src \ main \ resource \ application.yml 文件进行数据库配置
然后启动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
成功了,快乐!
二、创建新模块
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中查看,插入成功咯!
附录:建表和插入数据的语法模板
创建数据表
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界面创建新模块生成代码
到 系统管理\研发工具\代码生成工具 下,点击新增
选择之前创建的数据表(而且如果能看到这张表也验证了数据库连接是没有问题滴)
按照提示填入相关信息
默认生成即可,有特殊需求可以自行更改
统一的生成包路径按缺省即可
生成基础路径需要改到 modules\模块名 下,方便以后的模块管理
(改为web工程的同级目录modules下以模块名命名的文件夹中,本次示例中为 ...\modules\book)
点击保存并生成代码
出现绿绿的提示信息,大成功了属于是,那么去哪里查看呢
点击界面如图所示图标,进行菜单创建,按照提示信息输入菜单名称和权限等就可以辣~
去康康新建的菜单吧
发现找不到,为什么呢?
来到了另一个高血压级别的bug.......
又去看了看官方指导文档
哦!原来是module没有声明引入啊
在root下pom文件添加如图语句
<module>../modules/module_name</module>
在web下pom文件,添加如图依赖
copy一下核心模块的代码,然后改个名字,再paste一下就好辣
当然,梦幻般地报红了(啊这)
通过笔者积极地重复试验、探索和瞎搞,终于发现,
原来是idea根本就没有把我们添加的book模块作为maven module识别到(你看book上都没有蓝色小方块),
我们需要给它加一个pom文件
打开 modules\temlate\pom,xml ,copy下来,
然后在book文件夹上右键,建立一个新File,命名为pom.xml,
将之前copy的内容paste到该book下的pom文件中,将下图所示位置改为我们的模块名book
在maven工具栏中reload一下,发现我们新建的book模块也拥有了梦寐以求的蓝色小方块
热更新一下项目,去Jeesite菜单界面看看吧
???我的数据呢?我的数据呢?
不过,既然出现属性栏,说明模块已经成功添加了
我们试着新增一行数据,看看出现什么问题了
点击新增,填入数据后,打开Nacivat,发现我们新增的一行(id很奇怪的那一行),status是0,于是我们给它们都改成0
再看一下
大!胜!利!好耶!
补充:手动创建
如果想手动创建一个新的模块,可以参考以下方法:
注意,
本项目整体为一个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 }
控制台分析
从登录页面到点击新增到保存数据的控制台记录(后续信息在此不表)
登录到点击列表
点击新增
录入数据并保存
由此可以得出,
点击新增按钮跳转页面时,
【我是控制层的获取数据】——>【我是控制层的查看编辑表单】
录入信息到点击保存的过程,可以看出:
【我是控制层的获取数据】——>【我是业务层的保存数据】——>【我是控制层的保存数据】——>
也验证了SpringMVC的三层架构
点击保存的同时触发了到目录列表的页面跳转,由此,
【我是控制层的获取数据】——>【我是控制层的查询列表数据】——>【我是业务层的查询分页数据】
简单地说,
用户录入一个数据,数据从View被发送到表现层(Controller)
Controller获取到数据后,将数据发配给Service层的对应处理方法
数据在service层进行一定的业务逻辑处理(调用相关方法处理数据)
处理后的数据被返回提交给Controller对应的部门,执行Controller相应的方法,
然后返回给页面