首页 > 其他分享 >Mybatis-Flex核心功能之@Column

Mybatis-Flex核心功能之@Column

时间:2023-10-14 22:55:58浏览次数:40  
标签:Flex 删除 Column 租户 default Mybatis true public

1、是什么?

MyBatis-Flex 提供了 @Column 用来对字段进行更多的配置

public @interface Column {

    /**
     * 字段名称
     */
    String value() default "";

    /**
     * 是否忽略该字段,可能只是业务字段,而非数据库对应字段
     */
    boolean ignore() default false;

    /**
     * insert 的时候默认值,这个值会直接被拼接到 sql 而不通过参数设置
     */
    String onInsertValue() default "";

    /**
     * update 的时候自动赋值,这个值会直接被拼接到 sql 而不通过参数设置
     */
    String onUpdateValue() default "";

    /**
     * 是否是大字段,大字段 APT 不会生成到 DEFAULT_COLUMNS 里
     */
    boolean isLarge() default false;

    /**
     * 是否是逻辑删除字段,一张表中只能存在 1 一个逻辑删除字段
     * 逻辑删除的字段,被删除时,会设置为 1,正常状态为 0
     */
    boolean isLogicDelete() default false;

    /**
     * 是否为乐观锁字段,若是乐观锁字段的话,数据更新的时候会去检测当前版本号,若更新成功的话会设置当前版本号 +1
     * 只能用于数值的字段
     */
    boolean version() default false;

    /**
     * 配置的 jdbcType
     */
    JdbcType jdbcType() default JdbcType.UNDEFINED;

    /**
     * 自定义 TypeHandler
     */
    Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;

}

2、怎么玩?

(1) value

value 是用来标识列名的,默认情况下, entity 中的字段转换为列名默认以下划线的方式进行转换, 例如,userId 对应的列名为 user_id。

image

(2) ignore

当我们为了业务需要,在 entity 类中添加了某个字段,但是数据库却不存在该列时,使用 @Column(ignore = true) 修饰。

image

值得注意的是,像List、Map等集合嵌套类型会被自动忽略,所以就不需要进行ignore=true进行忽略了
image

(3) onInsertValue、onUpdateValue

image

image

(4) isLarge

用于标识这个字段是否是大字段,比如存放文章的文章字段,在一般的场景中是没必要对这个字段进行查询的, 若字段被表示为 isLarge,那么 APT 生成 "ARTICLE" 类时,默认不会存放在 DEFAULT_COLUMNS 中

@Column(isLarge = true)
private String content;

image

image

(5) isLogicDelete

逻辑删除指的是在删除数据的时候,并非真正的去删除,而是将表中列所对应的状态字段(status)做修改操作, 实际上并未删除目标数据。

我们可以进行表的字段设计时,用一个列标识该数据的 "删除状态",在 mybatis-flex 中,正常状态的值为 0, 已删除 的值为 1(可以通过设置 FlexGlobalConfig 来修改这个值)。

@Column(value = "is_deleted", isLogicDelete = true)
private Boolean deleted;

image

跳过逻辑删除

@Test
    public void testRealDeleted() {
        Boolean res = LogicDeleteManager.execWithoutLogicDelete(() -> addressService.removeById(1880782697));
        Assertions.assertTrue(res);
    }
  • 逻辑删除的默认值配置
 FlexGlobalConfig defaultConfig = FlexGlobalConfig.getDefaultConfig();
        defaultConfig.setNormalValueOfLogicDelete(true);
        defaultConfig.setDeletedValueOfLogicDelete(false);

        LogicDeleteManager.setProcessor(new BooleanLogicDeleteProcessor());
(6) version

用于当有多个用户(或者多场景)去同时修改同一条数据的时候,只允许有一个修改成功。

使用一个字段,用于记录数据的版本,当修改数据的时候,会去检测当前版本是否是正在修改的版本,同时修改成功后会把 版本号 + 1。

/**
* 设置为乐观锁字段
*/
@Column(version = true)
private Integer version;

@Test
public void testVersion() {
	QueryWrapper wrapper = QueryWrapper.create()
		.from(ADDRESS)
		.where(ADDRESS.ID.eq(4));
	Address address = new Address();
	address.setProvince("江西省");
	address.setCity("南昌市");
	address.setDistrict("青山湖区");
	boolean res = addressService.update(address, wrapper);
	Assertions.assertTrue(res);
}

image

(7) tenantId

多租户技术(英语:multi-tenancy technology),是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。

多租户简单来说是指一个单独的实例可以为多个用户(或组织)服务。多租户技术要求所有用户共用同一个数据中心,但能提供多个客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。

多租户的数据隔离有许多种方案,但最为常见的是以列进行隔离的方式。MyBatis-Flex 内置的正是通过指定的列(租户ID tenant_id)进行隔离的方案。

@Column(value = "tenant_id", tenantId = true)
private Integer tenantId;
package com.ly.config;

import com.ly.factory.TenantIdFactory;
import com.mybatisflex.core.tenant.TenantFactory;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;

/**
 * @author ly (个人博客:https://www.cnblogs.com/ybbit)
 * @date 2023-10-14  16:47
 * @tags 喜欢就去努力的争取
 */
@SpringBootConfiguration
public class MyConfig {
    @Bean
    public TenantFactory tenantFactory() {
        return new TenantIdFactory();
    }
}

最后我们再执行CRUD的时候就会为我们评级上tenantId的值
image

全局配置多租户字段,这样就可以省略实体类属性上的@Column(tenantId = true)注解了。

// 全局设置租户ID字段
FlexGlobalConfig.getDefaultConfig().setTenantColumn("tenant_id");

忽略多租户信息

// 忽略租户信息
List<Address> addresses = TenantManager.withoutTenantCondition(() -> addressService.list());
addresses.forEach(System.out::println);

image

标签:Flex,删除,Column,租户,default,Mybatis,true,public
From: https://www.cnblogs.com/ybbit/p/17764401.html

相关文章

  • MybatisPlus的动态表名插件
          ......
  • Mybatis xml中in的用法
    一、前端多选传字符串类型给后端,用逗号(,)分隔开后端用String类型接收该字段/***所属部门编码list*/@ApiModelProperty(name="departmentCodeList",value="所属部门编码集")privateStringdepartmentCodeList;mybatis中写法如下:<iftest="vo.departmentC......
  • 不好意思,Mybatis Plus 该换了!
    使用fluentmybatis可以不用写具体的xml文件,通过javaapi可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。不再需要在Dao中组装查询或更新操作,在xml或mapper中再组装参数。那对比原生Mybatis,MybatisPlus或者其他框架,FluentMybatis提供了哪些便利呢?Part1仓库地......
  • MyBatis 动态 SQL 最全教程,这样写 SQL 太爽了!
    动态SQL是MyBatis的强大特性之一。在JDBC或其它类似的框架中,开发人员通常需要手动拼接SQL语句。根据不同的条件拼接SQL语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态SQL恰好解决了这一问题,可以根据场景动态......
  • SpringBoot 1项目创建及Mybatis-plus实现数据增删改查
    一.项目创建及配置1.项目创建点击finish完成创建pom.xml加上以下依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version>......
  • Mybatis之注解开发
    使用注解开发接口 @Select("select*frommybatis.user") List<User>getUserList();mybaits-config.xml中配置  <mappers><!--   <mapperclass="com.kuang.dao.UserMapper"/>-->    <packagename="com......
  • Mybatis之多对一处理
    多对一处理使用场景:老师有多名学生,对于学生而言就是多对一pojo.Student@DatapublicclassStudent{​  privateintid;  privateStringname;  privateTeacherteacher;}mybatis-config.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigura......
  • Mybatis之一对多处理
    一对多处理运用场景:一个老师有多名学生,对于老师而言就是一对多Teacher实体类@DatapublicclassTeacher{​  privateintid;  privateStringname;  List<Student>students;} mybatis-config.xml<?xmlversion="1.0"encoding="UTF-8"?><!DO......
  • Mybatis之缓存
    缓存简介引入:查询数据:需要连接数据库--好资源解决:把第一次查询的结果放到一个地方,再次查询时直接在这个地方访问就可以(内存--缓存),不需要在访问数据库什么是缓存?存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库查询文件)查询......
  • 第一个Mybatis项目
    1.mybatis-config.xml配置及pom文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfiguration    PUBLIC"-//mybatis.org//DTDConfig3.0//EN"    "https://mybatis.org/dtd/mybatis-3-config.dtd"><c......