文档章节

smart 后台 使用说明

奔跑的android
 奔跑的android
发布于 07/05 09:54
字数 1201
阅读 30
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

数据更新乐观锁

说明

如果想实现如下需求: 当要更新一条记录的时候,希望这条记录没有被别人更新,确保当前只有一个人在操作。

乐观锁的实现原理:

取出记录时,获取当前 version 2

更新时,带上这个 version 2

执行更新时, set version = yourVersion+1 where version = yourVersion

如果 version 不对,就更新失败。

示例SQL原理:

update tbl_user set name = 'update',version = 3 where id = 100 and version = 2

Version 不用手动增加,只需要在更新时,保证是最新的版本数据就行,这样可以保证数据的一致性,但是也增加了业务自身尝试的次数。

使用

步骤1 实体类增加注解

用于注解实体字段,必须要有,数据库中也应有对应的字段

@TableField(fill = FieldFill.INSERT)
    @Version
    private Integer version;

步骤2 配置乐观锁插件

@EnableTransactionManagement
@Configuration
public class MyBatisPlusConfig {

    /**
     * 乐观锁插件
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

}

步骤3 更新

 //更新操作  假设这个实体类是我们要更新到数据库的数据
        Employee employee = new Employee();
        employee.setId(4);
        employee.setLastName("乐观锁");
        employee.setGender("1");
        employee.setAge(29);
        /*
         * 添加@Version注解字段
         * spring配置文件中注册乐观锁插件
         * 假如有人手速比我们快,先更新,这时version不是2了,假设是3
         * 更新就会失败
         */
        employee.setVersion(2);
        Integer r = mapper.updateById(employee);
        System.out.println(r);

注意事项

支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime 整数类型下 newVersion = oldVersion + 1 newVersion 会回写到 entity 中

仅支持 updateById(id) 与 update(entity, wrapper) 方法

在 update(entity, wrapper) 方法下, wrapper 不能复用!!!


数据存储时,公共字段属性自动填充

说明

创建人ID,创建人名称,创建时间,更新人ID,更新人名称,更新时间自动填充。

使用

步骤1 模型属性配置

 @TableField(value="CREATE_DATE",fill = FieldFill.INSERT)
    private Date createDate;
	
@TableField(value="UPDATE_DATE",fill = FieldFill.INSERT_UPDATE)
    private Date updateDate;

fill 字段填充标记 ( FieldFill, 配合自动填充使用 )

值 描述

DEFAULT 默认不处理 INSERT 插入填充字段 UPDATE 更新填充字段 INSERT_UPDATE 插入和更新填充字段

在进行插入操作时对添加了注解@TableField(fill = FieldFill.INSERT)的字段进行自动填充。

对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)的字段在进行插入和更新时进行自动填充。

步骤2 配置自动填充

package com.yxl.smart.configuration;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 公共字段自动填充
 */
@Component
public class  MyBatisMetaObjectHandler  implements MetaObjectHandler {

    /**
     * 插入时自动填充策略
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {

        this.setFieldValByName("createDate",new Date(),metaObject);

    }

    /**
     * 更新时的填充策略
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {

        this.setFieldValByName("updateDate",new Date(),metaObject);
    }


}


步骤2 增加,更新数据时就会自动进行填充

3 注意事项

如果未自动填充,请检查模型字段是否增加注解。


从token中获取用户信息

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            System.out.println("principal:"+principal);

基于token存储自定义信息

使用

步骤1

在AuthUserDetails 类新增其他自定义属性。

/**
	 * 登陆用户全称
	 */
	private String userFullName;

步骤2

构造函数中增加自定义属性

步骤3

AuthUserDetailsServiceImpl.loadUserByUsername 内进行赋值


数据存储时,自动生成id

使用

步骤1:配置全局ID生成策略:

在spring boot application配置文件中添加

mybatis-plus:
 
    #ID策略
  global-config:
    db-config:
      id-type: uuid

id-type为ID生成策略,默认为Uuid。

当IdType的类型为ID_WORKER、ID_WORKER_STR或者UUID时,主键由MyBatis Plus的IdWorker类生成,idWorker中调用了分布式唯一 ID 生成器 - Sequence

步骤2:实体类中,用@TableId注解来设置ID自动生成策略

ID类型为一下几种:

1.@TableId(type=IdType.AUTO)----数据库ID自增

2.@TableId(type=IdType.UUID()----字符串全局唯一ID

将查询的将实体对象列表转换为列表类型的Dto

使用

//将实体对象转换为Dto List<AuthRoleMenuDto> list1 = BeanMapper.mapList(list, AuthRoleMenu.class,AuthRoleMenuDto.class);

常见问题

后台收不到前台发送的数据

请检查Dto模型是否缺少注解 @Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true)

后台提示缺少 CREATE_ID 列

原因:由于启用共通字段自动填充功能,需保持所有表设计时具有共通字段。

Unknown column 'CREATE_ID' in 'field list'

后台提示 Column 'CREATE_ID' cannot be null

执行保存更新时需确保前台传入创建人,创建人ID等字段。更新时框架会自动填充更新人及更新日期。

解决方法:
@TableField(strategy = FieldStrategy.NOT_NULL)  
@TableField(value="CREATE_ID",fill = FieldFill.INSERT,strategy = FieldStrategy.NOT_NULL)
 在前台增加创建人ID
奔跑的android
粉丝 0
博文 83
码字总数 44261
作品 0
私信 提问
加载中
请先登录后再评论。
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
8
智能手机操作系统--Smartisan OS

Smartisan OS (俗称锤子操作系统),罗永浩创立的锤子科技推出的基于安卓(android)深度定制的系统。Smartisan释义:Smart+Artisan 组合创意词,意为智能机时代的精细工匠。...

匿名
2013/03/27
1.2W
1
自定义表单系统--FormDesign

是基于 FLEX 开发的一款B/S的自定义表单系统 整个过程如下: 1、通过FormDesign自定义表单画出相应的表单; 2、将生成好的XML放到程序中,并通过后台自动编译成JSP; 注:FormDesing只是自定...

polliwog
2013/03/29
1.6W
1
Chrome页面自动刷新插件--smartF5

smartF5是一款chrome插件,用以实现监控页面资源,并自动刷新。 特别适合双屏情况下的DEMO开发,大大提高页面开发效率。 让你键盘上的F5键退休吧! 为什么选择smartF5 本插件具有以下特色: ...

YanisWang
2013/04/04
1.2W
0
SBook

实现基本的阅读器功能。 作者说:项目将几种技术整合在一起,做成的一步电子阅读器(木有UI和产品,界面比较粗糙)。可以读取沙盒中的小说和图片,也可以读取在线图片(SAE)。项目使用ARC。项...

匿名
2012/12/04
2K
0

没有更多内容

加载失败,请刷新页面

加载更多

人工神经网络分类器及BP算法相关数学推导和思考

人工神经网络相关数学推导和思考 今天凌晨今天凌晨的欧冠的八分之一决赛中,巴萨依靠朗格莱,梅西,苏亚雷斯三人的进球顺利挺进八强!梅老板的1V4更是让人直呼:爷青回!那么问题来了,如何根...

osc_873fteab
20分钟前
0
0
Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库

前言 最近在做阅读类的业务,需要记录用户的PV,UV; 项目状况:前期尝试业务阶段; 特点: 快速实现(不需要做太重,满足初期推广运营即可) 快速投入市场去运营 收集用户的原始数据,三要素...

osc_g96tdr1z
21分钟前
0
0
HFDS的数据写入流程

1.HFDS的数据写入流程的基本参数 首先了解数据写入过程中,什么是block, packet, chunk 1.block:数据块,当上传的文件太大时, 就需要分块,一个块默认设置时128M, 在客户端完成切割操作。...

osc_52r4y6wv
22分钟前
22
0
CVE-2020-14644 weblogic iiop反序列化漏洞分析

报告编号:B6-2020-081101 报告来源:360CERT 报告作者:ph4nt0mer 更新日期:2020-08-11 0x01 文章简述 2020年7月15日,Oracle发布2020年7月关键补丁更新,其中针对 WebLogic Server Core组件...

360CERT
今天
0
0
程序员到底要不要懂业务?

一、前言 给非互联网行业从业者科普一下,互联网公司一个项目团队的标准成员组成和职责分工:项目经理、架构师、产品经理、核心开发人员(TL)、开发、测试、运营(或业务方)。 项目经理:一...

osc_r0irdqn7
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部