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

news2025/1/15 0:45:19

目录

介绍

基础使用

简单入门

 插入数据

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.coloradmin.cn/o/944637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深圳前海公司财政补贴

前海公司财政补贴 1.扶持领域 一般类项目和港资企业创新创业发展项目均须符合下列产业领域: 1.1金融业。围绕跨境人民币业务、财富管理、资产管理、股权投资、要素交易市场建设、金融产品创新、金融中介服务领域开展的有利于金融业改革创新发展的项目。 1.2现代…

视频融合平台EasyCVR视频汇聚平台关于小区高空坠物安全实施应用方案设计

近年来,随着我国城市化建设的推进,高楼大厦越来越多,高空坠物导致的伤害也屡见不鲜,严重的影响到人们的生命安全。像在日常生活中一些不起眼的小东西如烟头、鸡蛋、果核、易拉罐,看似伤害不大,但只要降落的…

架构之选:评价Spring Cloud在微服务完整性方面的独到观点!

大家好,我是小米!今天我们要来聊一个非常热门的话题:Spring Cloud在微服务架构方面的完整度情况。随着技术的不断演进,微服务架构已经成为了众多企业构建灵活、可扩展系统的首选。而Spring Cloud作为微服务架构的佼佼者&#xff0…

Java 8 新特性——Lambda 表达式(2)

一、Java Stream API Java Stream函数式编程接口最初在Java 8中引入,并且与 lambda 一起成为Java开发里程碑式的功能特性,它极大的方便了开放人员处理集合类数据的效率。 Java Stream就是一个数据流经的管道,并且在管道中对数据进行操作&…

POI实现百万数据导出

1、概述 ​ 我们都知道Excel可以分为早期的Excel2003版本(使用POI的HSSF对象操作)和Excel2007版本(使用POI的XSSF操作),两者对百万数据的支持如下: ​ Excel 2003:在POI中使用HSSF对象时&#…

Java代码通过经纬度计算省份。

直接上代码,需要市区县可自己解析 String areaName addressUtil.getPosition(longitude, latitude); package com.skyable.device.utils.velicle;import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import l…

如何把视频压缩到最小?

如何把视频压缩到最小?现在是自媒体非常流行的时代,视频的使用也变得非常的频繁,不管你是出于个人爱好还是在工作中,都需要拍摄和制作视频,因此对于视频文件的操作和处理对于我们每个人就非常的重要。随着现在手机拍摄…

基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)

一、项目简介 本项目是一套基于java Swing 和 mysql实现的飞机订票系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过…

20个常用Matplotlib图的Python代码,全文干货建议收藏!

今天分享给大家25个Matplotlib图的汇总,在数据分析和可视化中最有用。 # !pip install brewer2mpl import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns import warnings; warnin…

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

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

Linux(扩展篇)

Linux扩展篇 软件包管理RPMRPM概述RPM查询命令RPM卸载命令RPM安装命令 YUM仓库配置YUM概述YUM的常用命令修改网络 YUM 源安装 wget, wget 用来从指定的 URL 下载文件在/etc/yum.repos.d/目录下,备份默认的 repos 文件下载网易 163 或者是 aliyun 的 repos 文件使用下…

大数据学习:Hive基础与DDL操作

Hive基础与DDL操作 1. 数据仓库 1.1 数据仓库的基本概念 数据仓库的英文名称为Data Warehouse,可简写为DW或DWH。 数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决…

leetcode410. 分割数组的最大值(java)

分割数组的最大值 题目描述二分法代码演示 题目描述 难度 - 困难 410. 分割数组的最大值 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 1: 输入&…

数字化会员系统如何落地?数字化会员运营机制设计方式

对于企业而言,如何对自身客户进行标签划分、挖掘潜在价值并进行后续运营、转化,是每个企业的必修课。在业务开展的过程中,企业也需要知道什么样的客户更值得维护、以及如何让更多的客户发挥更大的价值。因此,不少企业选择开发数字…

驱动开发错误汇编

本博文将会不定期更新。以便记录我的驱动开发生涯中的一些点点滴滴的技术细节和琐事。 生成时link找不到导出函数,比如"LNK2019 无法解析的外部符号 _FltCreateCommunicationPort32"。出现这种情况的原因是,驱动的编译环境忽略了所有的默认库&…

【ppt技巧】PPT文件常见的几种格式有哪些?

PPT文件大家都不陌生,那么PPT文件的几种格式,大家也可以学习一下: .ppt & .pptx 这两种PPT格式是最基本的ppt文件后缀,就是我们普通可以编辑的PPT文件格式,2003版的PowerPoint的文件格式是.ppt,而在0…

VR反欺诈模拟体验:揭秘防骗技巧和方法

在我们的日常生活中,安全问题始终是我们不能忽视的重要环节。尤其是近年来,网络诈骗案件屡见不鲜,给人们的生活带来了极大的困扰。然而,随着科技的发展,一种全新的安全教育方式——VR反欺诈模拟体验,正在逐…

现货白银的优势到底在哪?

现货白银可不是一般的白银投资方式,而是一种具有成熟灵活交易机制,以及高杠杆属性的、优势明显的投资方式,本文将为大家简单的介绍一下它的核心优势,具体体现在哪些地方。 首先,现货白银是采用保证金交易制度的投资品种…

HUT23级训练赛

目录 A - tmn学长的字符串1 B - 帮帮神君先生 C - z学长的猫 D - 这题用来防ak E - 这题考察FFT卷积 F - 这题考察二进制 G - 这题考察高精度 H - 这题考察签到 I - 爱派克斯,启动! J - tmn学长的字符串2 K - 秋奕来买瓜 A - tmn学长的字符串1 思路&#x…

八、隔离式与非隔离式

1、非隔离式拓扑结构 2、隔离式拓扑结构 在一些应用中,输入与输出进行隔离,所以基于buck、boost、buck-boost这三种拓扑,推导出其他拓扑结构; 优点: 保护人员,隔离另一端的危险瞬态电压损害 去除隔离电路…