软件研究之JeecgBoot
前言
这里我主要是采用了jeecg-boot进行体验,主要就是讲如何运行官方的代码。这里我测试和安装了jeecg-boot 3.0版本,2021年12月05日最新版吧。
1.【JeecgBoot】关于 jeecg-boot 的项目理解、使用心得和改进建议
2.Jeecg-Boot 技术文档 v2.0 Jeecg-Boot文档
3.java开源项目jeecgboot全解析
1.后端启动
(1)安装MySQL
安装MySQL,创建数据库 jeecg-boot,并导入相应的数据
(2)创建数据库
1 | ## 登录数据库 |
(3)导入数据
1 | mysql -h localhost -u root -p jeecg-boot < jeecgboot-mysql-5.7.sql |
(4)修改配置文件
打开后端工程 jeecg-boot,修改 jeecg-boot-module-system模块的application-dev.yml配置文件,找到其中的数据库配置,修改数据库的用户名和密码
(5)启动工程
启动 jeecg-boot-module-system 工程,浏览器中输入 :http://localhost:8080/jeecg-boot/
即可访问项目
问题
(1) Table ‘jeecg-boot.QRTZ_LOCKS’ doesn’t exist
因为数据库大小写敏感了,又不允许在数据目录初始化之后,修改 lower_case_table_names 的值,只能删除数据目录,修改值,然后重新初始化。
1 | ## 停止MySQL |
1.JeecgBoot启动提示:QRTZ_LOCKS表不存在 这里是在mysql的配置文件/etc/my.cnf中增加 lower_case_table_names=1,关闭大小写,但是我的添加之后,直接就启动不了mysql了。
2.JeecgBoot常见问题大全
3.Mysql8.0开启忽略表大小写,无法启动,解决方案 删除数据之后,重新初始化
4.mysql8.0设置忽略大小写后无法启动
5.mysql8.0修改大小写敏感配置方法 在 MySQL 8 中,数据目录初始化之后,不再允许更改 lower_case_table_names = 1 的 值;MySQL 基于某些原因,禁止在重新启动 MySQL 服务时将 lower_case_table_names 设置 成不同于初始化 MySQL 服务时设置的 lower_case_table_names 值。也就是说启动(重启)MySQL 时,lower_case_table_names的值必须于,初始化 MySQL 时(安装 MySQL 后的首次启动)的值相同。
6.linux下mysql8,表名称设置不区分大小写
2.启动前端
~~下载源代码,打开 ant-design-vue-jeecg 文件,执行依赖安装。~~
1 | ## 安装依赖 |
刚开始我用的是pnpm安装的依赖,总是饱错,后来使用的yarn进行依赖的安装,竟然奇迹般的没有报错。
1 | ## 安装依赖 |
问题
(1) Failed to resolve loader: cache-loader
我在github仓库中下载了源码,进入了 ant-design-vue-jeecg 目录,然后执行了依赖安装 ,运行
1 | ## 依赖安装 |
结果出现了依赖不满足:Failed to resolve loader: cache-loader
【尝试】
我尝试安装了依赖,但是又跳出来了其他的依赖不满足
1 | pnpm add cache-loader babel-loader file-loader url-loader vue-style-loader css-loader postcss-loader |
【结果】
结果就是出现了新的问题:Syntax Error: TypeError: this.getOptions is not a function
【尝试】
我觉得可能是pnpm有问题,我换成了官网的yarn 安装,安装完成之后,直接报错了:this.getOptions is not a function
3.自定义模块
我在idea中新建了自定义的模块,命名为 disasterapi
(1) 引入 jeecg-boot-core 模块
在自定义模块中,引入jeecg-boot的核心模块。
1 | <dependency> |
(2) jeecg-system-start 模块引入自定义的模块
1 | <dependency> |
(3) 修改Application路径扫描
因为我的代码没有按照官方的指导进行创建,所以需要修改 start 的启动类 JeecgSystemApplication,使bean能被扫描。
1 |
(4) 修改 mybatis-plus 的类扫描路径
修改 application-dev 中的mybatis-plus配置,增加自定义的 Mapper.xml 路径。
1 | mybatis-plus: |
在 启动类 JeecgSystemApplication中添加 MapScan。
1 |
1.快速创建module模块
4.独立页面
jeecg-boot是一个后端管理框架,那么这个后端管理的页面整个的框架就是菜单栏和内容页决定好的了,如何开发一个独立的页面呢?
这部分需要修改源码实现,因为全部的页面的模版都是使用的 layouts/default/index.vue 这个模版,会有左侧菜单,右侧的内容页,要想跳转到自定义页面,需要独立修改这部分的内容。主要修改 src/router/helper/routeHelper.ts 文件里面的内容。
1 | // Dynamic introduction |
1.vue-roter 4报错: Error: Invalid route component/Uncaught (in promise) Error: Invalid route component解决
2.关于jeecg登录后跳转单独页面记录贴 这里通过了静态的路由配置,并且修改了权限,实现了独立跳转这个方法。
5.Postgresql
为了特殊的原因,我需要使用 postgresql 数据库,于是我将 mysql 转换为postgresql数据库。
(1) 数据库脚本
我原先将mysql脚本转换成了postgresql,后来再次遇到这个问题的时候,我竟然忘记当初到底是怎么搞的了。
1.增加postgresql数据库脚本 这里建议使用navicat进行转换
(2) 修改pom.xml,加入postgresql的依赖。这部分其实不用写,在 jeecg-boot-base-core 模块中,已经写了多个驱动的依赖。
1 | <!-- postgresql驱动 --> |
(3) 修改 jeecg-module-system/jeecg-system-start 的配置文件,增加下面的配置。
1 | spring: |
(4) 执行类型转换
将mysql数据转到postgres,原tinyint类型会转成int2类型,这时实体属性是布尔类型 ,会导致插入数据失败。比如出现了:column “hidden” is of type integer but expression is of type boolean(字段 “hidden” 的类型为 integer, 但表达式的类型为 boolean)。下面提示的是:You will need to rewrite or cast the expression。
【尝试方案】
我开始的时候,尝试在Dbeaver中使用sql查询进行下面的数据转换,结果出现 $$ 符号不存在的错误。于是我只能通过 psql 命令行进行命令的操作。使用 psql 命令连接数据库,然后使用 \c 切换数据库,再次执行下面的代码。
1 | --- 每一个分号分开执行 |
我尝试多次执行上面的代码,也执行了 drop function,drop cast (bool as int2),最后还是报错。
【解决方案】
经过不懈的努力,尝试了使用下面的更新语句进行更新,结果竟然有效果了,再插入的时候,不再报错了。
1 | --- 每一个分号分开执行 |
1.PostgreSQL 整型int与布尔boolean的自动转换设置(含自定义cast与cast规则介绍) 如果数据库已经内置了转换规则,那么可以通过更新系统表的方式,修改自动转换规则。update pg_cast set castcontext=’a’ where castsource =’integer’::regtype and casttarget=’boolean’::regtype;
2.PostgreSQL 自定义自动类型转换(CAST) 自定义CAST的语法如下。AS IMPLICIT,表示在表达式中,或者在赋值操作中,都对类型进行自动转换。
3.PostgreSQL 自动(隐式)类型转换,解决类型不匹配报错问题 DROP CAST (bigint as varchar);
4.postgresql 自动类型转换 字段 “is_leaf” 的类型为 integer, 但表达式的类型为 boolean 建议:你需要重写或转换表达式 位置:126 (在jeecgboot平台的菜单管理中会出现该问题)
(5) 解决大小写问题。
修改了配置文件,倒入数据后,还是会报错:ERROR: column “trigger_name” does not exist。查了资料,说是因为 postgresql 是识别大小写的,要讲 表里面的字段改为小写才行。
查询整个数据库中有大写字段的表
1
2
3select * from information_schema.columns
where table_schema='public'
and column_name <> lower(column_name);创建函数 exec 如下:
1
2
3
4
5
6
7
8
9
10
11CREATE OR REPLACE FUNCTION "public"."exec"("sqlstring" varchar)
RETURNS "pg_catalog"."varchar" AS $BODY$
declare
res varchar(50);
BEGIN
EXECUTE sqlstring;
RETURN 'ok';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100执行函数 exec,将表 qrtz_triggers 中的全部大写改为小写。
1
2
3
4
5
6
7
8SELECT
exec('alter table "' || table_name || '" rename column "' || column_name || '" to ' || lower( column_name ) || ';')
FROM
information_schema.COLUMNS
WHERE
table_schema = 'public'
AND column_name <> lower(column_name)
AND table_name = 'qrtz_triggers';
将全部的 “qrtz” 开头的表,全部的大写转为小些,就不会报错了。
1.postgresql数据库兼容问题 这里提到的函数转化,需要在数据从mysql倒入之后进行。
2.切换其他数据库 Oracle数据、SQL server数据、postgresql数据库。
3.Jeecg-boot入门学习搭建开发环境(数据库改用PostgreSQL) 查了很多方法都不行,还试了Navicat全转小写,但是导致更多坑,所以我解决的方法是数据库的字段名人工改成小写,启动就不会报错了。这里提供了方法,但是没有提供具体的操作,人工其实还是很费时间的。
4.PostgreSQL批量修改列名大小写 这里提供了一个查询那些表里有大写字段的方法
5.PostgreSQL 大小写问题 一键修改表名、字段名为小写 阅读模式 这里针对某一个表进行批量字段大写改为小些的方法,非常的有用。
6.JEECG-Boot使用(一)PostgreSQL替换Mysql数据库 这里用了navcat进行了转换。
(6)增量脚本的问题
升级的时候,官方提供的也是mysql的增量脚本,如果使用了 postgresql 数据库,那么在使用增量脚本的时候,可能就会出现问题。
1 | ----MySQL----- |
1.PostgreSQL 索引 这里是postgresql创建索引的方法
2.mysql 中添加索引的三种方法
3.PostgreSQL修改表(ALTER TABLE语句)
4.PostgreSQL ALTER TABLE 命令
5.postgresql 修改字段长度 LTER TABLE your_table_name alter COLUMN your_column_name type character varying(3000);
6.Postgresql修改字段的长度 alter table table_name alter column column_name type varchar(200)
(7)操作符不存在: smallint = boolean
和 bool_to_int 方式类似,执行如下的 sql 语句,定义转换方式。
1 | CREATE OR REPLACE FUNCTION boolean_to_smallint(b boolean) RETURNS smallint AS $$ |
注意
每一次重新插入数据的时候,需要重新调用 CREATE CAST 语句
1.PostgreSQL错误: 操作符不存在: smallint = boolean 这里的方法可以尝试一下。
3.代码生成
(1) 导入表
第一次的时候,我在低代码开发里面找到了这个表,简简单单的就可以。 低代码开发 -> 导入数据库表,选择自己需要导入的数据库表,直接导入,但是后来我把其中一个表删除之后,就再也无法新增新的表了,全部还是原先的25个表。
(2) 然后在Online开发上直接生成代码就可以了。
1.Jeecg-Boot 代码生成和添加菜单操作 这个讲了关于如何将生成的代码放到自己的工程中
2.Online功能如何配置成菜单 jeecg-boot开发文档
3.代码生成器配置 jeecg-boot-module-system/src/main/resources/jeecg/jeecg_config.properties 中配置路径。