jeecgBoot默认自动生成数据库中某些字段

JeecgBoot项目全套流程环境配置(本站最全) JeecgBoot项目环境配置,最细,保姆级别,前后端搭建完整教程。前端:node、yarn、idea;后端:jdk、maven、idea 阅读详情

在建表时jeecg保留一些默认的数据库字段
created_by、created_time、updated_by、updated_time、sys_org_code
并且这些字段只要存在,当保存实体类时 并不需要设置这些值平台可以实现自动的填充

通过mybatis拦截器org.jeecg.config.mybatis.MybatisInterceptor自动注入创建人、创建时间、修改人、修改时间

package org.jeecg.config.mybatis;

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.binding.MapperMethod.ParamMap;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.*;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.util.Date;
import java.util.Properties;

/**
 * mybatis拦截器,自动注入创建人、创建时间、修改人、修改时间
 * @Author scott
 * @Date  2019-01-19
 *
 */
@Slf4j
@Component
@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) })
public class MybatisInterceptor implements Interceptor {

	@Override
	public Object intercept(Invocation invocation) throws Throwable {
		MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
		String sqlId = mappedStatement.getId();
		log.debug("------sqlId------" + sqlId);
		SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
		Object parameter = invocation.getArgs()[1];
		log.debug("------sqlCommandType------" + sqlCommandType);

		if (parameter == null) {
			return invocation.proceed();
		}
		if (SqlCommandType.INSERT == sqlCommandType) {
			LoginUser sysUser = this.getLoginUser();
			Field[] fields = oConvertUtils.getAllFields(parameter);
			for (Field field : fields) {
				log.debug("------field.name------" + field.getName());
				try {
					if ("createBy".equals(field.getName())) {
						field.setAccessible(true);
						Object local_createBy = field.get(parameter);
						field.setAccessible(false);
						if (local_createBy == null || local_createBy.equals("")) {
							if (sysUser != null) {
								// 登录人账号
								field.setAccessible(true);
								field.set(parameter, sysUser.getUsername());
								field.setAccessible(false);
							}
						}
					}
					// 注入创建时间
					if ("createTime".equals(field.getName())) {
						field.setAccessible(true);
						Object local_createDate = field.get(parameter);
						field.setAccessible(false);
						if (local_createDate == null || local_createDate.equals("")) {
							field.setAccessible(true);
							field.set(parameter, new Date());
							field.setAccessible(false);
						}
					}
					//注入部门编码
					if ("sysOrgCode".equals(field.getName())) {
						field.setAccessible(true);
						Object local_sysOrgCode = field.get(parameter);
						field.setAccessible(false);
						if (local_sysOrgCode == null || local_sysOrgCode.equals("")) {
							// 获取登录用户信息
							if (sysUser != null) {
								field.setAccessible(true);
								field.set(parameter, sysUser.getOrgCode());
								field.setAccessible(false);
							}
						}
					}
				} catch (Exception e) {
				}
			}
		}
		if (SqlCommandType.UPDATE == sqlCommandType) {
			LoginUser sysUser = this.getLoginUser();
			Field[] fields = null;
			if (parameter instanceof ParamMap) {
				ParamMap<?> p = (ParamMap<?>) parameter;
				//update-begin-author:scott date:20190729 for:批量更新报错issues/IZA3Q--
				if (p.containsKey("et")) {
					parameter = p.get("et");
				} else {
					parameter = p.get("param1");
				}
				//update-end-author:scott date:20190729 for:批量更新报错issues/IZA3Q-

				//update-begin-author:scott date:20190729 for:更新指定字段时报错 issues/#516-
				if (parameter == null) {
					return invocation.proceed();
				}
				//update-end-author:scott date:20190729 for:更新指定字段时报错 issues/#516-

				fields = oConvertUtils.getAllFields(parameter);
			} else {
				fields = oConvertUtils.getAllFields(parameter);
			}

			for (Field field : fields) {
				log.debug("------field.name------" + field.getName());
				try {
					if ("updateBy".equals(field.getName())) {
						//获取登录用户信息
						if (sysUser != null) {
							// 登录账号
							field.setAccessible(true);
							field.set(parameter, sysUser.getUsername());
							field.setAccessible(false);
						}
					}
					if ("updateTime".equals(field.getName())) {
						field.setAccessible(true);
						field.set(parameter, new Date());
						field.setAccessible(false);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return invocation.proceed();
	}

	@Override
	public Object plugin(Object target) {
		return Plugin.wrap(target, this);
	}

	@Override
	public void setProperties(Properties properties) {
		// TODO Auto-generated method stub
	}

	//update-begin--Author:scott  Date:20191213 for:关于使用Quzrtz 开启线程任务, #465
	private LoginUser getLoginUser() {
		LoginUser sysUser = null;
		try {
			sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null;
		} catch (Exception e) {
			//e.printStackTrace();
			sysUser = null;
		}
		return sysUser;
	}
	//update-end--Author:scott  Date:20191213 for:关于使用Quzrtz 开启线程任务, #465

}

jeecgboot数据权限用法 jeecgboot数据权限的用法 阅读详情

相关推荐

jeecg系统管理的其他功能

where sa.send_status = ‘1’ and sa.del_flag = ‘0’ and sas.user_id = ? order by sa.send_time desc 3.我的部门 通过部门查询该部门下的人 SELECT FROM sys_user WHERE del_flag = ‘0’ AND id IN ( SELECT user_id FROM sys_user_depart WHERE dep_id =? ) LIMIT ?,? 4.分类字典 sys_catego

m0_69526738的博客 715

拦截mybatis(mybatis-plus)SQL

import java.lang.reflect.Field; import java.util.Date; import java.util.Properties; import org.apache.ibatis.binding.MapperMethod.ParamMap; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapp

猪之仆的博客 1998

《JeecgBoot系列》 JeecgBoot开发配置记录

1.JeecgBoot多数据源配置 2.JeecgBoot的Maven配置 3.如何设计表单实现"下拉组件二级联动" ? 以省市二级联动为例 4.表单"合计"列导出Excel合并单元格

https://blog.datasource.space 7410

MybatisPlusInterceptor实现sql拦截器(超详细)

2 . 配置下MybatisPlus的yml。5 . MybatisPlus的config。成功实现sql拦截并进行拼接。

a17331003724的博客 2万+

jeecgboot结构业务简单介绍

一.业务功能介绍 功能上jeecgboot主要提供了系列的代码生成器、模板页面、报表页面。 1.报表功能 主要提供报表的相关操作。提供了积木报表插件,可以自定义数据报表、图形报表。并将报表挂载到菜单上。 2.在线开发 也就是代码生成器,可以可视化的在页面上新建数据库表,并通过数据库表生成前后台代码。减少业务代码开发的时间。 3.系统管理 用户管理、角色管理、机构管理、消息管理等基础模块。 4.系统监控 主要负责各种日志、监控的统一处理。 5.页面组件样式 常见案例、详情页、结果页、异常页、列表页、表

weixin_43102784的博客 9880

jeecgboot实现值自增的方法

jeecgboot实现值自增的方法前言一、字段不能自增的原因2.实现方法 前言 jeecgboot的Online表单开发生成的代码中,表的字段需要手动输入值,才能存进数据库,无法实现自增的功能。下面一个简单的方法,通过将系统默认的主键id赋值给需要自增的字段,实现字段值无需手动输入而可以自增。 如果重写Service层的实现类,则操作较为复杂。 一、字段不能自增的原因 前端输入实体类的属性值,传到controller的add方法,此时实体类的值中主键id是为空的(如下图所示),不能直接赋值给自增的字段。

qq_28477985的博客 3341

jeecgBoot框架中保存实体后自动生成数据库中某些字段

mybatisplus

qq_42946963的博客 942

保姆级教程:在Linux上用IGH EtherCAT主站搞定从站时钟同步(附sync_datagram报文详解)

本文详细介绍了在Linux系统上使用IGH EtherCAT主站实现从站时钟同步的保姆级教程,重点解析了sync_datagram报文的结构和工作原理。通过实战案例和代码示例,帮助开发者掌握微秒级同步精度的实现方法,适用于工业自动化领域的高精度设备协同控制。

weixin_30733003的博客 260

JeecgBoot接口默认值失效问题解析与解决方案

在SpringBoot应用开发中,接口默认值处理是保证数据一致性的关键技术点。通过@TableField等注解与数据库约束的配合,可以实现字段的自动填充。本文以JeecgBoot框架为例,剖析默认值失效的典型场景,包括前端avue组件配置、MyBatis-Plus插入策略冲突等问题。针对这些常见痛点,提供了从前端表单到数据库的全链路解决方案,特别适用于低代码平台开发场景。通过分层检查策略和日志分析技术,开发者可以快速定位默认值传递中断的环节,确保用户状态等关键字段的正确初始化。

weixin_34015336的博客 504

【PDN仿真笔记9-使用Sigrity PowerDC进行IR Drop仿真的方法】

使用Sigrity PowerDC进行IR Drop进行仿真的方法

qq_42682826的博客 7999

CanOpen PDO映射实战:从原理到配置的完整指南

本文详细解析了CanOpen PDO映射的原理与配置流程,从基础通信机制到实战配置步骤,涵盖禁用PDO、清空映射、逐项映射和使能PDO等关键环节。特别针对西门子G120变频器、台达伺服和倍福CX控制器等不同厂商设备,提供了具体的配置技巧和常见问题排查指南,帮助工程师快速掌握多厂商设备间的PDO通信配置。

weixin_30718391的博客 515

jeecgboot开发笔记

官方文档为Online自定义按钮基础篇 · JeecgBoot 开发文档 · 看云自定义三种按钮如下实际效果如下可为自定义按钮实现JS增强,效果如下Popup控件官方文档为Popup控件 · JeecgBoot 开发文档 · 看云注意:关于检验字段中的字典说明Table表示想要选择的表(如果选择的控件类型是下拉框),Code表示存入数据库中的字段,Text表示显示的字段。

weixin_66813230的博客 4598

物理学建模及仿真平台Chrono安装

Chrono是一个基于物理学的建模和仿真基础设施,它是在C++中实现的独立于平台的开源设计。一个projectchrono库可以嵌入到一个软件项目中,例如在可变形地形上运行的轮式和履带式车辆、机器人、机械电子系统、顺应性机构和流体固体相互作用现象。系统可以由刚性和柔性/顺应性部件组成,并带有约束、电机和接触;部件可以具有三维形状,以便进行碰撞检测。然而安装还是出现了一些问题,所以在此总结。已经装好visual studio。

Already8888的博客 6500

JeecgBoot JimuReport集成SQL Server数据库时的字段映射问题解析

JeecgBoot JimuReport集成SQL Server数据库时的字段映射问题解析 【免费下载链接】jimureport 「数据可视化工具:报表、大屏、仪表盘」积木报表是一款类Excel操作风格,在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设计、图形报表、仪表盘门户设计等,完全免...

gitblog_01415的博客 1103

Win10插网线显示未识别网络的三种解决方法

本文介绍了三种解决Win10插网线显示未识别网络问题的方法:更新或重启网络设备驱动程序、重置Winsock目录、启用Network Setup Service服务。这些方法都是基于常见的网络问题和解决方案而设计的,适用于大多数Win10用户。如果你遇到了这一问题,可以按照上述步骤进行操作,相信一定能够找到解决问题的方法。需要注意的是,在进行任何操作之前,请务必备份重要数据以防万一。此外,如果你对计算机硬件或软件不熟悉,建议寻求专业人士的帮助以避免造成不必要的损失。

nntxthml的博客 6770

PICO+Unity MR空间网格开发实战:从零构建透视交互场景

本文详细介绍了使用PICO 4 Ultra与Unity引擎进行MR空间网格开发的完整实战流程。从环境准备、项目初始化、核心组件配置,到空间网格的生成、可视化与物理交互实现,手把手教你构建一个能识别真实环境并发射虚拟小球的透视交互场景。文章重点解析了PICO SDK中空间网格功能的关键配置与优化技巧,并提供了真机部署与调试的实用指南。

e3f4g5的博客 490

JeecgBoot项目中Bigint自增字段异常问题解析

JeecgBoot项目中Bigint自增字段异常问题解析 【免费下载链接】JeecgBoot ????企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成...

gitblog_01405的博客 277

ESD防护设计宝典(十九):元器件选型宝典——共模电感

然而,这位“大师”的脾气也颇为古怪,若设计者不解其性、用之不当,它非但不能抑制噪声,反而会引入信号完整性恶化、电源压降等新问题,甚至让您的系统EMC性能“雪上加霜”,导致项目在测试阶段功亏一篑。本文将带您深入共模电感的内在世界,从本质解析到参数详解,从设计陷阱到实战选型,全方位领悟其平衡艺术,掌握其应用核心,规避那些足以让项目翻车的致命陷阱。:这是存在于电路板内部的“家贼”。共模电感实质上是一个四端器件,它通过磁场的“加法”与“减法”运算,巧妙地实现了对共模噪声的抑制,同时为差模信号大开绿灯。

m0_56451176的博客 419

JeecgBoot代码生成器深度解析:从数据库表结构到前后端代码自动生成

🚀 JeecgBoot代码生成器是低代码开发平台的核心功能,能够将数据库表结构快速转换为完整的前后端代码,极大提升开发效率。本文将从核心原理、使用流程到实际应用,全方位解析这一强大工具。 ## 🔍 什么是JeecgBoot代码生成器? JeecgBoot代码生成器是基于Java的智能代码生成工具,它通过读取数据库表结构,结合预设的模板引擎,自动生成Controller、Service、Ma

gitblog_00597的博客 914

Unity零基础到进阶 | Unity Shader 深度硬核解析

Unity Shader 是运行在GPU上的可编程渲染程序,是整个引擎渲染体系的算法核心。它通过 Unity 封装的 ShaderLab 语法 + GPU 原生 HLSL 语言编写,定义了「网格数据如何经过光照计算、纹理采样、几何变换、混合测试,最终转化为屏幕像素颜色」的完整规则。 通俗来说:Shader 决定物体「怎么画」,材质(Material)只是 Shader 的参数实例,决定「用什么画」。没有 Shader,材质就是无渲染能力的空壳;没有材质,Shader 无法落地到具体物体。

努力前行,总会成为自己心中的那道光 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JeecgBoot项目在线表单生成器字段修改问题解析

在企业级低代码开发平台JeecgBoot中,在线表单生成器(Online Form Generator)是其核心功能之一。开发者通过可视化配置即可快速生成业务表单,极大提升了开发效率。然而,在实际使用过程中,字段修改问题往往是开发者遇到的最常见挑战之一。本文将深入分析JeecgBoot在线表单生成器字段修改的常见问题、解决方案和最佳实践。 ## 在线表单生成器架构概述 ### 技术架构 ```...

gitblog_01414的博客 649

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【JeecgBoot-Vue3】第6节 低代码平台如何快速生成代码(上)

低代码平台如何快速生成代码

ladymorgana的博客 3246

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

3步解决JeecgBoot权限查询字段映射异常

你是否遇到过JeecgBoot权限查询结果与配置不符?明明设置了权限却不生效?本文通过分析权限实体类与映射配置,教你3步定位并解决字段映射问题,让权限管理不再踩坑。 ## 权限字段映射原理 JeecgBoot权限系统基于RBAC(基于角色的访问控制)模型,核心通过`SysPermission`实体类与数据库表建立映射关系。当出现字段不匹配时,会导致权限查询结果异常。 **核心实体类**:[j...

gitblog_01416的博客 527

jeecgboot修改登录界面、背景图等的页面记录

jeecgboot修改登录界面、背景图等的页面记录页面及对应操作一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 页面及对应操作 userLayout.vue: 可修改登录背景图、标题、下方文字连接 login.vue: 登录模块的相应设 index.html: 可修改页面在浏览器中标签页的名称,以及全局配置 logo.vue: 可修改对应的logo,有logo路径 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步

weixin_46587496的博客 8007

订单系统jeecgboot

vue 1.获取当前坐标 2.文字不换行

二月鸟 2061

jeecgboot连接数据库配置在哪_jeecg-boot部署不能同步数据库

版本号:2.14问题描述:jeecg-boot部署成功后 不能同步数据库!只有全部删除默认的创建人、创建日期更新日期、所属部门部门后可以同步数据库。截图&代码:2020-03-23 20:18:17.435 [http-nio-9097-exec-8] ERROR org.jeecg.modules.online.cgform.a.a:483 - OnlCgformApiControlle...

weixin_39665847的博客 1390
上一篇: MyBatisPlus一个关键字匹配多个列
下一篇: SpringBoot Profiles官网学习记录
迷失的小鹿
博客等级 码龄8年 1万+粉丝 199原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值