Mybatis-Flex核心功能之@Table
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的更多相关文章
- Shiro 核心功能案例讲解 基于SpringBoot 有源码
Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...
- MyBatis的核心配置、动态sql、关联映射(快速总结)
MyBatis的核心对象和配置 #1. SqlSessionFactory对象: 单个数据库映射关系经过编译的内存镜像: 作用:创建SQLSession对象. //读取配置文件 InputSteam ...
- Mybatis的核心配置
之前了解了Mybatis的基本用法,现在学习一下Mybatis框架中的核心对象以及映射文件和配置文件,来深入的了解这个框架. 1.Mybatis的核心对象 使用MyBatis框架时,主要涉及两个核心对 ...
- 掌握Mybatis的核心配置文件
一.配置文件结构 MyBatis的核心配置文件配置了MyBatis的一些全局信息,包含数据库连接信息和MyBatis运行时所需的各种特性,以及设置和影响MyBatis行为的一些属性. 该配置文件的元素 ...
- Spring 核心功能演示
Spring 核心功能演示 Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 SpringBoot, ...
- 源码分析 | 手写mybait-spring核心功能(干货好文一次学会工厂bean、类代理、bean注册的使用)
作者:小傅哥 博客:https://bugstack.cn - 汇总系列原创专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 一个知识点的学习过程基本分为:运行helloworld ...
- 【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手开发及核心功能体验
1.MyBatis-Plus入门开发及配置 1.1.MyBatis-Plus简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变, ...
- 带连接池的netty客户端核心功能实现剖解
带连接池的netty客户端核心功能实现剖析 带连接池的netty的客户端核心功能实现剖析 本文为原创,转载请注明出处 源码地址: https://github.com/zhangxianwu/ligh ...
- Chrome扩展开发之四——核心功能的实现思路
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- ES6,ES2105核心功能一览,js新特性详解
ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...
随机推荐
- 论文解读(AdSPT)《Adversarial Soft Prompt Tuning for Cross-Domain Sentiment Analysis》
Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Adversarial Soft Prompt Tuning for Cross-Domain Senti ...
- codeforces600E. Lomsat gelral(dsu on tree笔记)
知识前驱:树链剖分 codeforces600E. Lomsat gelral 题意:给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和 分析:递归求解,对于一棵树,求出他的所有子树的颜色编号 ...
- IDEA 22.2.3 创建web项目及Tomcat部署与服务器初始界面修改(保姆版)
开始前请确认自己的Tomcat.JDK已经安装配置完毕 不同版本的IDEA创建配置流程可能不同,演示中的IDEA版本号为22.2.3 本教程创作时间为2023/09/14 1.创建项目 通过下图路径进 ...
- Falcon-7B大型语言模型在心理健康对话数据集上使用QLoRA进行微调
文本是参考文献[1]的中文翻译,主要讲解了Falcon-7B大型语言模型在心理健康对话数据集上使用QLoRA进行微调的过程.项目GitHub链接为https://github.com/iamaru ...
- Github的一个奇技淫巧
背景 前段时间给 VictoriaLogs 提交了一个 PR: https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4934 本来一切都很顺 ...
- @RequiredArgsConstructor和@Authwired
我们在java后端书写接口时,对service层成员变量的注入和使用有以下两种实现方式: 1) @RequiredArgsConstructor import lombok.RequiredArgsC ...
- Linux平台Oracle 23c单实例 安装部署配置 快速参考
转眼间已经2023年,再有一周就要过年了,在这里先给大家拜个早年,祝大家新的一年万事顺利. Oracle如今版本号也和年份挂钩,在前段时间的OCW上也宣布发布了beta版本的23c,因为23c是继19 ...
- 2023 ICPC 网络赛 II
开场顺着读了 AC 不会,B 是 KDT 优化建图板子,让 zsy 确认了一下并制止他现在做.把 D 转化转化成了经典问题·,当时以为是网络流,所以 zsy 签完 M 就上去写了,写一半发现假了,问了 ...
- c语言代码练习3改进
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int x = 0; printf("请输入一 ...
- Python常用模块-20个常用模块总结
目录 time模块 datetime模块 random 模块 os 模块 sys 模块 json 和 pickle 模块 hashlib和hmac 模块 logging 模块 numpy 模块 pan ...
