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. 聊聊HuggingFace Transformer

    概述 参见:聊聊HuggingFace 项目组件 一个完整的transformer模型主要包含三部分:Config.Tokenizer.Model. Config 用于配置模型的名称.最终输出的样式. ...

  2. AtCoder ABC183F Confluence

    题意 \(n\)个人,每个人属于一个班级\(ci\),这些人会有些小团体(并查集) 两种操作: \(1\) \(a\) \(b\),将\(a\)所在的集体和\(b\)所在的集体合并 \(2\) \(x ...

  3. vue3 甘特图(一):选择与初始化甘特图

    vue3 甘特图(一) 1.功能使用背景: 甘特图是一种项目管理工具,以图形直观的方式显示项目的时间轴和任务计划,为了可扩展和定制相关任务的开发,故此选择dhtmlx-gantt 2.vue3 初始化 ...

  4. 【krpano】 ASP说一说插件

    简述 这是一个Asp版krpano说一说案例,运用asp+jquery读写存储入xml文件数据库,结合krpano代码实现的功能:现将案例上传网站供大家学习研究,希望对大家有所帮助. 功能 用户可在网 ...

  5. 【uniapp】【微信小程序】wxml-to-canvas

    真是搞吐了,研究了整整两天,困死我了 本来使用生成二维码插件好好的,插件页也支持导出二维码图片,可是领导说要带上文件的名称,那就涉及html转图片了,当然也可以改二维码插件的源码,不过源码做了混淆,看 ...

  6. mysqlbinlog输出sql

    ./mysqlbinlog -v --base64-output=DECODE-ROWS ~/Downloads/tymysql2|grep -A4 'ALTER' >~/Downloads/a ...

  7. dedebiz 清理冗余废弃未引用图片方法

    原理描述: 在原有织梦后台菜单中增加"清理冗余图片按钮",实现清理冗余图片的功能. 操作步骤: 1. 打开后台admin\sys_sql_query.php代码 在该文件中搜索如下 ...

  8. mpi转以太网连接300PLC在气动系统中的应用

    mpi转以太网连接300PLC在气动系统中的应用 某企业装备有限公司 摘要 工业通讯迅速发展的今天,MPI转以太网通讯已经发展为成熟,稳定,高效通讯 方式,兴达易控自主研发的MPI转以太网模块MPI- ...

  9. Springboot简单功能示例-2 KEY初始化功能和全局错误处理

    springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot hutool-all 非常好的常用java工具库 ...

  10. 数据泵(impdb)导入Oracle分片的数据库dump文件

    数据泵(impdb)导入Oracle数据库 一.sqlplus登录目标数据库,创建导入的目录路径 #该目录要在导入的数据库本机建立,如果是docker就在容器内部创建 create directory ...