1、能干啥?

@Table 主要是用于给 Entity 实体类添加标识,用于描述 实体类 和 数据库表 的关系,以及对实体类进行的一些 功能辅助。

例如:

数据库有一张tb_member的会员表

这时候我们就可以使用@Table去绑定对应的实体和表的对应关系

2、怎么玩?

先看看@Table注解内部结构

public @interface Table {

    /**
* 显式指定表名称
*/
String value(); /**
* 数据库的 schema(模式)
*/
String schema() default ""; /**
* 默认为 驼峰属性 转换为 下划线字段
*/
boolean camelToUnderline() default true; /**
* 默认使用哪个数据源,若系统找不到该指定的数据源时,默认使用第一个数据源
*/
String dataSource() default ""; /**
* 监听 entity 的 insert 行为
*/
Class<? extends InsertListener> onInsert() default NoneListener.class; /**
* 监听 entity 的 update 行为
*/
Class<? extends UpdateListener> onUpdate() default NoneListener.class; /**
* 监听 entity 的查询数据的 set 行为,用户主动 set 不会触发
*/
Class<? extends SetListener> onSet() default NoneListener.class; /**
* 在某些场景下,我们需要手动编写 Mapper,可以通过这个注解来关闭 APT 的 Mapper 生成
*/
boolean mapperGenerateEnable() default true;
}

(1) value

显式指定表名称,不写默认就是value

(2) schema

数据库的 schema(模式)

比如说在某些情况下,我们需要将数据隔离;

(3) camelToUnderline

是否开启驼峰属性转为下划线字段, 默认为 true (开启)

例如:

数据库有一个nick_name的字段

实体类有一个nickName的属性

关闭驼峰转下划线

@Test
public void testCamelToUnderline() {
QueryWrapper wrapper = QueryWrapper.create()
.select(MEMBER.ALL_COLUMNS)
.from(MEMBER)
.where(MEMBER.ID.eq(10));
Member member = memberMapper.selectOneByQuery(wrapper);
log.info("member:{}", member);
Assertions.assertNotNull(member, "数据不存在");
}

可以返现字段值映射不上,开启试试

(4) dataSource

默认使用哪个数据源,若系统找不到该指定的数据源时,默认使用第一个数据源;这个后面整理到多数据源再说

(5) onInsert

监听 entity 的 insert 行为

例如:我们可以在insert时候对我们的create_time、、update_time进行赋值,等等...

// Listener
public class MemberInsertListener implements InsertListener {
@Override
public void onInsert(Object entity) {
System.out.println("=========================" + entity.getClass() + "=========================");
Member member = (Member) entity;
member.setNickName("测试OnInsert");
}
} // test

(6) onUpdate

监听 entity 的 update 行为

和上面的OnInsert同理

// listener
public class MemberUpdateListener implements UpdateListener { @Override
public void onUpdate(Object entity) {
Member member = (Member) entity;
// 不让用户修改openid
member.setOpenid(null);
}
} // test
@Test
public void testOnUpdate() {
Member member = new Member();
member.setName("ly");
member.setOpenid("111222333");
QueryWrapper wrapper = QueryWrapper.create()
.where(MEMBER.ID.eq(50));
int rows = memberMapper.updateByQuery(member, wrapper);
Assertions.assertTrue(rows > 0);
}

(7) onSet

监听 entity 的查询数据的 set 行为,用户主动 set 不会触发

package com.ly.listener;

import com.mybatisflex.annotation.SetListener;

/**
* @author : ly
*/
public class MemberSetListener implements SetListener {
@Override
public Object onSet(Object entity, String property, Object value) {
System.out.println("执行了MemberSetListener...");
// 例如对字段值进行加密
if (isName(property)) {
if (value != null) {
return ((String) value).codePoints()
.mapToObj(code -> "\\u" + code)
.reduce(String::concat)
.orElse("");
}
return null;
}
// 例如用户对某个字段没有权限查看,则设为null
if (isOpenid(property)) {
String currUser = "张三";
boolean flag = hasPermission(currUser);
if (flag) {
return value;
}
return null;
}
return value;
} private boolean hasPermission(String currUser) {
return "李四".equals(currUser);
} private boolean isOpenid(String property) {
return "openid".equals(property);
} private boolean isName(String property) {
return "name".equals(property);
} public static void main(String[] args) {
String name = "张三";
String res = name.codePoints().mapToObj(code -> "\\u" + code)
.reduce(String::concat)
.orElse("");
System.out.println("res = " + res);
}
}

(8) mapperGenerateEnable

暂时还没用过

Mybatis-Flex核心功能之@Table的更多相关文章

  1. Shiro 核心功能案例讲解 基于SpringBoot 有源码

    Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...

  2. MyBatis的核心配置、动态sql、关联映射(快速总结)

    MyBatis的核心对象和配置 #1. SqlSessionFactory对象: 单个数据库映射关系经过编译的内存镜像: 作用:创建SQLSession对象. //读取配置文件 InputSteam ...

  3. Mybatis的核心配置

    之前了解了Mybatis的基本用法,现在学习一下Mybatis框架中的核心对象以及映射文件和配置文件,来深入的了解这个框架. 1.Mybatis的核心对象 使用MyBatis框架时,主要涉及两个核心对 ...

  4. 掌握Mybatis的核心配置文件

    一.配置文件结构 MyBatis的核心配置文件配置了MyBatis的一些全局信息,包含数据库连接信息和MyBatis运行时所需的各种特性,以及设置和影响MyBatis行为的一些属性. 该配置文件的元素 ...

  5. Spring 核心功能演示

    Spring 核心功能演示 Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 SpringBoot, ...

  6. 源码分析 | 手写mybait-spring核心功能(干货好文一次学会工厂bean、类代理、bean注册的使用)

    作者:小傅哥 博客:https://bugstack.cn - 汇总系列原创专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 一个知识点的学习过程基本分为:运行helloworld ...

  7. 【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手开发及核心功能体验

    1.MyBatis-Plus入门开发及配置 1.1.MyBatis-Plus简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变, ...

  8. 带连接池的netty客户端核心功能实现剖解

    带连接池的netty客户端核心功能实现剖析 带连接池的netty的客户端核心功能实现剖析 本文为原创,转载请注明出处 源码地址: https://github.com/zhangxianwu/ligh ...

  9. Chrome扩展开发之四——核心功能的实现思路

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  10. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

随机推荐

  1. crontab定时任务不执行的一些原因总结

    参考博文地址: https://www.jb51.net/article/154290.htm声明:本文章是在以上地址博文基础上进行整理学习,如有侵权,请联系博主删除,感谢知识共享,一起进步,加油鸭 ...

  2. 从驾考科目二到自动驾驶,聊聊GPU为什么对自动驾驶很重要

    "下一个项目,坡道起步." -- "考试不合格,请将车子开到起点,重新验证考试.你的扣分项是:起步时间超30秒:扣100分.行驶过程中车轮轧到边线:扣100分." ...

  3. Web攻防--Java_SQL注入--XXE注入-- SSTI模板注入--SPEL表达式注入

    预编译 编译器在编译sql语句时,会依次进行词法分析.语法分析.语义分析等操作, 预编译技术会让数据库跳过编译阶段,也就无法就进行词法分析,关键字不会被拆开,注入语句也就不会被识别为SQL的关键字,从 ...

  4. Burp Suite Extension Development Guide

    Burp Suite是什么? Burp Suite是一款Web应用程序渗透测试工具,可以帮助用户发现和利用Web应用程序中的漏洞,提高渗透测试的效率和精度. Web应用程序最常用的传输数据的协议就是H ...

  5. HTML一键打包APK工具最新版1.9.1更新(附下载地址)

    HMTL网址打包APK,可以把本地HTML项目, Egret游戏,网页游戏,或者网站打包为一个安卓应用APK文件,无需编写任何代码,也无需配置安卓开发环境,支持在最新的安卓设备上安装运行. HTML一 ...

  6. 兴达易控modbus转profinet网关三菱变频器通讯

    兴达易控modbus转profinet网关与三菱变频器通讯 本案例分享兴达易控modbus转profinet网关(MDPN100)连接西门子1200plc,实现三菱变频器485通讯兼容转modbusT ...

  7. 【纯干货】IOS手机使用Charles抓包

    一.Charles 下载地址 https://www.charlesproxy.com/ 二.Charles 激活 1.生成激活码 生成激活码:https://www.zzzmode.com/myto ...

  8. Util应用框架Web Api开发环境搭建

    要使用Util应用框架开发项目,首先需要搭建合适的开发环境. 迈出第一步,对于很多.Net新人可能并不简单. 如果你对.Net环境并不熟悉,请尽量按照本文档进行操作. 操作系统 请安装 Windows ...

  9. 详解GuassDB数据库权限命令:GRANT和REVOKE

    本文分享自华为云社区<GuassDB数据库的GRANT & REVOKE>,作者: Gauss松鼠会小助手2 . 一.GaussDB的权限概述 在数据库中,对象的创建者将成为该对象 ...

  10. 如何写出优雅的代码?试试这些开源项目「GitHub 热点速览」

    又是一期提升开发效率的热点速览,无论是本周推特的检查 Python 语法和代码格式的 ruff,或者是 JS.TS 编译器 oxc,都是不错的工具,有意思的是它们都是 Rust 写的. 此外,还有用来 ...