新兴崛起的优雅框架Mybatis-Flex

目录

介绍

基础使用

简单入门

 插入数据

insertSelective

 insertOrUpdate

insertBatch 

 注意事项

删除数据

​编辑 条件删除

 批量删除

 注意事项

 更新数据

​编辑

条件更新

UpdateEntity使用

 UpdaerWrapper使用

注意事项

 查询数据

查询一条数据

selectOneById​编辑

 selectOneByMap

 selectOneByCondition

 selectOneByQuery

查询多条数据

 查询单列数据

查询Map数据 

 映射查询

​编辑 实体集合映射

 单列数据集合映射

 QueWrapper

原生写法 

lamabada表达式写法 

字符串写法 

三者混用写法

​编辑 CPI

监听器

onInsert和onUpdate

onSet

逻辑删除 

 乐观锁

数据脱敏

flex内置脱敏

自定义数据脱敏 

跳过脱敏 

关联查询

分页查询

 xml文件配置分页

 Active Record 

 代码生成


介绍

MyBatis-Flex是一个Java持久层框架,旨在提供简化和灵活的数据库访问解决方案。它通过巧妙地结合Java对象和关系数据库表,将数据访问过程变得更加优雅。

这个框架通过使用XML配置文件来定义SQL映射,使得数据库操作变得直观且可维护。它为开发人员提供了强大的工具,可以轻松地编写和执行数据库查询,而无需过多关注底层的数据库细节。

MyBatis-Flex还引入了动态SQL的概念,允许根据不同的条件来动态生成SQL语句。这使得查询变得非常灵活和可定制,适应了各种复杂的业务需求。

此外,MyBatis-Flex还提供了缓存机制,可以显著提高查询性能。它还支持批量操作,可以大大减少与数据库的通信次数,提高数据操作的效率。

基础使用

简单入门

MyBatis-Flex - MyBatis-Flex 官方网站

根据官方文档的快速开始步骤操作即可

这里也简单演示下

引入所需依赖

yml文件配置

 

实体类建表和mapper文件 根据创建官网配置即可

添加配置类打印控制台sql

根据官网配置建表查询数据库

编写测试类 

注意target目录下的编译文件

 

这里会对每个实体生成一个Def文件

点击查看

 后面flex封装的api查询基本都会围绕这个Def文件来进行操作,,注意这个文件只有在编译后才会生成在target目录里,在原先源码文件里是不存在的

再查看一个单个查询名字为张三的

注意这里需要事先静态引入前面的Def文件,没有Def文件的先进行编译下再引入

 

如果不引入这里的全拼是:

 

再来看一组插入的方法,在MP中,默认新增和修改的api在实体字段为null时会默认不更新或者插入为null的字段,那如果刚好碰到需要将字段插入或者更新为null的场景时Mp处理起来就比较麻烦些

在flex里面可以手动设置是否忽略null字段的更新

 

 插入数据

 在前面简单使用的时候已经演示过insert的手动设置是否忽略null值的情况了,这里就不再演示insert了

insertSelective

为该表添加一个字段性别 ,0:女 ,1:男  默认值:2 不男不女

 

注意实体类中要添加相对应的字段属性,并重新编译,此时再使用insertSelective和手动设置不忽略null的insert插入数据查看有什么区别

观察sql区别

 查看数据库结果

 insertOrUpdate

没有主键情况

 

 有主键情况

 

insertBatch 

可以看到直接就是批量插入的sql,不忽略null值

 

 注意事项

删除数据

先查看下现在表中有的数据

 条件删除

 

 

 

 批量删除

 

 注意事项

 更新数据

条件更新

默认忽略null值

先来看下数据库原有的数据

 

 

 

 

 指定年龄加3

UpdateEntity使用

myabtis-flex在更新中是默认忽略null值的,但是如果有这样一个场景,不让其忽略null,但是只把实体的指定字段入库时设置为null,显然只是设置不忽略null是不可行的,因为只设置不忽略null会把所有字段都不忽略,而这时只想让指定字段不忽略,就需要用到UpdateEntity了

查看当前数据库数据

 

 

可以看到虽然account实体中age没有set值,也就是age字段也是null,但是sql打印中并没有更新age字段 

 UpdaerWrapper使用

先查看目前数据库数据

 

注意事项

 查询数据

查询一条数据

注意前三者都最后都只会返回一条数据, 也就是说如果查询出来是多条符合数据的数据前三个都不会报错,但是最后一个会报错

 还是先看下数据库数据

selectOneById

查看下源码 根据主键id进行查询,返回的肯定是一条数据

 selectOneByMap

 查看源码可以看到该方法在最后的sql拼接了limit 1从实现只返回一条数据

 selectOneByCondition

 查看源码可以知晓该方法也是拼接了limit 1 

 selectOneByQuery

 查看源码  后面什么都没有拼接

 这里测试下如果返回的是多个符合条件的数据会怎么样

年龄大于20的数据有两条,直接报错

查询多条数据

 

查询多条数据的指定字段

 

其他方法不再演示,和之前的用法大同小异

 查询单列数据

 

查询Map数据 

 

 映射查询

先看下数据库数据

 实体集合映射

 新建一个vo实体进行映射

 

 单列数据集合映射

 QueWrapper

 关于QueryWrapper的使用官网提供的也很详细了

这里只做简单演示,具体使用方法可以参看官网

原生写法 

  

支持所有原sql的格式拼接

还有许多原生mysql的聚合函数,具体使用参考官网 

lamabada表达式写法 

字符串写法 

三者混用写法

 CPI

 mybatis-Flex对queryWrapper提供了CPI来进行QueryWrapper的set和get

 举例使用

 

 查询出QueryWrapper查询的列名  其他具体使用查看官网即可

监听器

onInsert和onUpdate

用户在操作插入h和更新数据时可以指定监听器来进行监听用户的操作,从而自动插入或者更新一些数据,比如创建时间和更改时间等

还是先查看数据库

记得代码中实体属性要与数据库一一对应

 新增监听器

 调用监听器

 测试

可以看到这里只设置了userName,但是打印sql和实体的创建时间和idNumber都有值,插入的监听器将这两个字段进行设值

 修改监听器

 

onSet

监听实体的set方法

先查看数据库

实现字典回写

 添加性别字典字段

 书写set监听器

 测试

还有全局监听器不再演示,具体操作参考官网即可

逻辑删除 

 为数据库表添加逻辑删除字段 del_flag 0:flase 1:true

 

测试逻辑删除查询数据

 

可以看到默认只查询了delFlag为0的数据

测试删除数据

 

 

删除数据也是走的update语句

跳过逻辑删除处理

 

走的是delete语句

 乐观锁

 添加版本号字段

 

 

数据脱敏

 

flex内置脱敏

数据库添加手机号字段进行测试

 

 ​​​​​​​

 查询测试

 

自定义数据脱敏 

我们在使用时如果flex提供的脱敏方式不够满足我们的需求时还可以通过自定义脱敏方式来进行脱敏

将数据库中的id_number字段中的小写英文字母全部大写来模拟脱敏处理

 书写自定义脱敏

 配置注册全局脱敏

字段使用

 

测试

 

小写全部脱敏为大写

跳过脱敏 

刚才脱敏的手机号和idNumber字段都明文显示了 

关联查询

再创建两个表

 插入模拟数据

 

 

主表添加阵营id字段和部门(称号)字段

编造模拟插入两个从表数据 以便进行联表查询

 

创建表对应实体层和持久层 不再截图演示

先查看下联表的sql写法

 配置映射vo对象

 

 

查询测试

查看sql

SELECT`a`.`id`,`a`.`age`,`a`.`sex`,`a`.`phone`,`a`.`camp_id`,`a`.`dept_id`,`a`.`version`,`a`.`birthday`,`a`.`id_number`,`a`.`user_name`,`a`.`create_date`,`a`.`update_date`,`b`.`id` AS `camp$id`,`b`.`troops`,`b`.`camp_name`,`c`.`id` AS `dept$id`,`c`.`dept_num`,`c`.`dept_name` 
FROM`tb_account` AS `a`LEFT JOIN `camp` AS `b` ON `a`.`camp_id` = `b`.`id`LEFT JOIN `dept` AS `c` ON `a`.`dept_id` = `c`.`id` 
WHERE`a`.`del_flag` = 0

分页查询

 

 xml文件配置分页

使用官网提供模板demo

 

 

 Active Record 

参考官网介绍 

实体属性继承Model

 

 

 

 注意使用Record模式时在1.5.9版本时实体字段和数据库字段一定要完全对应不然会报错抛异常

输入图片说明

 

输入图片说明

 

输入图片说明

 代码生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/112460.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)

一 Web开发模式 1. 前后端混合开发模式 前后端混合开发模式是一种开发方式,将前端和后端的开发工作结合在一起,以加快项目的开发速度和 提高协作效率。这种模式通常用于快速原型开发、小型项目或敏捷开发中。在前后端混合开发模式中,前端和…

改进YOLOv8系列:原创改进创新点 SIoU-NMS,EIoU-NMS,DIoU-NMS,CIoU-NMS,GIoU-NMS改进

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv8独家原创改进:原创改进创新点 DIoU-NMS,SIoU-NMS,EIoU-NMS,CIoU-NMS,GIoU-NMS改进。 💡对自己数据集改进有效的话,可以直接当做自己的原创改…

NSS [羊城杯 2020]easyser

NSS [羊城杯 2020]easyser 开题。很容易让人觉得环境坏了。 不要慌,无从下手时。看源码、扫目录、抓包。一套操作下来,发现几个可以下手的路由。 /index.php /robots.txt 访问 /star1.php,一说到百度,就猜测是否存在SSRF。 源码中…

Linux x86_64 C语言实现gdb断点机制

文章目录 前言一、trap指令简介二、调用ptrace三、创建breakpoints四、CONT 和 SINGLESTEP五、完整代码演示六、增加参数检测参考资料 前言 本文参考文章:Implementing breakpoints on x86 Linux 一、trap指令简介 将通过在断点地址向目标进程的内存中插入一条新…

图像二值化

目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术,用于将图像转换为二值图像。在固定阈值二值化中,像素值根据一个预定义的阈值进行分类,大于阈值的…

c语言实现二叉树(链式结构)

文章目录 前言一、二叉树的遍历1、二叉树的层序遍历2、二叉树的前序遍历3、二叉树的中序遍历4、二叉树的后序遍历5、代码实现 二、二叉树的一些操作的实现1、求二叉树的结点个数2、求二叉树叶子结点个数3、求二叉树第k层结点个数4、求二叉树深度5、二叉树中查找值为x的结点6、二…

streamlit-高级功能

缓存 st.cache_data st.cache_resource 为应用程序添加会话状态 会话状态 会话状态应用到应用程序 会话状态和小部件关联 可序列化会话状态 注意事项和限制 命令行选项 应用程序菜单 菜单选项 开发者选项 streamlit配置 按钮行为和示例 连接到数据 数据框 形式 小部件语义 …

前端vue引入高德地图入门教程

距离上一篇关于前端项目中使用高德地图的文章已经将近5年之久, 这是我的第一篇关于高德地图的文章 这期间前端技术日新月异,5年前JQuery还如日中天,如今已经销声匿迹,很少有公司招聘还在要求JQuery,更多的是Vue、React…

keras深度学习框架构建LeNet5神经网络模型实现手写数字识别

之前两篇文章分别通过keras深度学习框架构建简单神经网络和卷积神经网络实现过手写数字识别实验。这篇文章分享我根据LeNet5模型构建的卷积神经网络来实现手写数字识别。 这个实验是根据LeNet5模型构建卷积神经网络,LeNet5模型的原理图如下所示: 相信大家…

中欧财富:分布式数据库的应用历程和 TiDB 7.1 新特性探索

作者:张政俊 中欧财富数据库负责人 中欧财富是中欧基金控股的销售子公司,旗下 APP 实现业内基金品种全覆盖,提供基金交易、大数据选基、智慧定投、理财师咨询等投资工具及服务。中欧财富致力为投资者及合作伙伴提供一站式互联网财富管理解决方…

js优雅的统计字符串字符出现次数

题目如下 统计一串字符串中每个字符出现的频率 示例字符串 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd小白写法 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfdlet result {}; for (let i 0; i < str.length; i) {if (result[str[i]]) {result[str[…

论文笔记: One Fits All:Power General Time Series Analysis by Pretrained LM

1 intro 时间序列领域预训练模型/foundation 模型的研究还不是很多 主要挑战是缺乏大量的数据来训练用于时间序列分析的基础模型——>论文利用预训练的语言模型进行通用的时间序列分析 为各种时间序列任务提供了一个统一的框架 论文还调查了为什么从语言领域预训练的Transf…

【ag-grid-vue】column

网格中的每一列都使用列定义(ColDef)来定义。列根据在网格选项中指定的列定义的顺序在网格中定位。 列定义 下面的例子展示了一个定义了3列的简单网格: <template><ag-grid-vuestyle"height: 300px; width: 1000px"class"ag-theme-balham":colum…

get√接口自动化核心知识点浓缩,为面试加分

日常接触到的接口自动化从实际目标可以划分为两大类&#xff1a; 1、为模拟测试数据而开展的接口自动化 这种接口自动化大多是单次执行&#xff0c;目的很明确是为了功能测试创造测试数据&#xff0c;节约人工造数据的时间和人工成本&#xff0c;提高功能测试人员的测试效率。…

chain of thought (思维链, cot)

定义 思维链 (Chain-of-thought&#xff0c;CoT) 的概念是在 Google 的论文 "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models" 中被首次提出。思维链&#xff08;CoT&#xff09;是一种改进的提示策略&#xff0c;用于提高 LLM 在复杂推理…

【UE5】给模型指定面添加自定义材质

实现步骤 1. 首先我们向UE中导入一个简单的模型&#xff0c;可以看到目前该模型的材质插槽只有一个&#xff0c;当我们修改材质时会使得模型整体的材质全部改变&#xff0c;如果我们只想改变模型的某些面的材质就需要继续做后续操作。 2. 选择建模模式 3. 在模式工具栏中点击…

Linux学习之Ubuntu 20使用systemd管理OpenResty服务

sudo cat /etc/issue可以看到操作系统的版本是Ubuntu 20.04.4 LTS&#xff0c;sudo lsb_release -r可以看到版本是20.04&#xff0c;sudo uname -r可以看到内核版本是5.5.19&#xff0c;sudo make -v可以看到版本是GNU Make 4.2.1。 需要先参考我的博客《Linux学习之Ubuntu 2…

SpringBoot Mybatis 多数据源 MySQL+Oracle

一、背景 在SpringBoot Mybatis 项目中&#xff0c;需要连接 多个数据源&#xff0c;连接多个数据库&#xff0c;需要连接一个MySQL数据库和一个Oracle数据库 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot</groupId&…

【Golang】go条件编译

交叉编译只是为了能在一个平台上编译出其他平台可运行的程序&#xff0c;Go 作为一个跨平台的语言&#xff0c;它提供的类库势必也是跨平台的&#xff0c;比如说程序的系统调用相关的功能&#xff0c;能根据所处环境选择对应的源码进行编译。让编译器只对满足条件的代码进行编译…

【Linux】centos8安装cmake3.27.4

第一步&#xff0c;去官网下安装包&#xff0c;一定不要下错了 下好了之后&#xff0c;用ftp软件传到云服务器或者虚拟机上&#xff0c;我用的是centos8系统&#xff0c;安装之前先准备好这些依赖项 yum install -y gcc gcc-c make automake yum install -y openssl openssl-…