mybatis-flex入门体验(一)

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。
个人IP:shigen

趁着下午的空闲时间,研究了一下mybatis-flex,看着对我还是挺有吸引力的。于是打开了官网,先从代码生成开始:

代码生成

都是按照官方给的代码案例,

导入依赖

基本上都是很熟悉的依赖,必备的数据库连接JDBC、数据库连接池工具:

<dependency><groupId>com.mybatis-flex</groupId><artifactId>mybatis-flex-codegen</artifactId><version>1.8.2</version>
</dependency><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>4.0.3</version>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.32</version>
</dependency>
代码生成

在官方给的代码案例上,稍微改了一下数据库的连接配置。

public class Codegen {public static void main(String[] args) {//配置数据源HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/security?characterEncoding=utf-8");dataSource.setUsername("root");dataSource.setPassword("123456");//创建配置内容,两种风格都可以。GlobalConfig globalConfig = createGlobalConfigUseStyle1();//GlobalConfig globalConfig = createGlobalConfigUseStyle2();//通过 datasource 和 globalConfig 创建代码生成器Generator generator = new Generator(dataSource, globalConfig);//生成代码generator.generate();}public static GlobalConfig createGlobalConfigUseStyle1() {//创建配置内容GlobalConfig globalConfig = new GlobalConfig();//设置根包globalConfig.setBasePackage("com.gitee.shigen.mybatisflexdemo");//设置表前缀和只生成哪些表globalConfig.setTablePrefix("sys_");// globalConfig.setGenerateTable("tb_account", "tb_account_session");//设置生成 entity 并启用 LombokglobalConfig.setEntityGenerateEnable(true);globalConfig.setEntityWithLombok(true);//设置项目的JDK版本,项目的JDK为14及以上时建议设置该项,小于14则可以不设置// globalConfig.setJdkVersion(17);//设置生成 mapperglobalConfig.setMapperGenerateEnable(true);//可以单独配置某个列// ColumnConfig columnConfig = new ColumnConfig();// columnConfig.setColumnName("tenant_id");// columnConfig.setLarge(true);// columnConfig.setVersion(true);// globalConfig.setColumnConfig("tb_account", columnConfig);return globalConfig;}public static GlobalConfig createGlobalConfigUseStyle2() {//创建配置内容GlobalConfig globalConfig = new GlobalConfig();//设置根包globalConfig.getPackageConfig().setBasePackage("com.test");//设置表前缀和只生成哪些表,setGenerateTable 未配置时,生成所有表globalConfig.getStrategyConfig().setTablePrefix("tb_").setGenerateTable("tb_account", "tb_account_session");//设置生成 entity 并启用 LombokglobalConfig.enableEntity().setWithLombok(true).setJdkVersion(17);//设置生成 mapperglobalConfig.enableMapper();//可以单独配置某个列ColumnConfig columnConfig = new ColumnConfig();columnConfig.setColumnName("tenant_id");columnConfig.setLarge(true);columnConfig.setVersion(true);globalConfig.getStrategyConfig().setColumnConfig("tb_account", columnConfig);return globalConfig;}
}

运行测试类,生成对应的代码:

控制台输出

再来看下生成的代码:

生成的代码结构

基本上很符合我们用lombok+mybatis plus的规范了,接下来只需要专注业务逻辑的开发即可。

编码体验

选取官方的几个案例,测试一下使用的效果。

配置sql打印
    <dependency><groupId>com.mybatis-flex</groupId><artifactId>mybatis-flex-spring-boot-starter</artifactId><version>1.8.2</version></dependency>
@Configuration
public class MyConfigurationCustomizer implements ConfigurationCustomizer {@Overridepublic void customize(FlexConfiguration configuration) {configuration.setLogImpl(StdOutImpl.class);}
}
测试代码

MyBatis-Flex 使用了 APT(Annotation Processing Tool)技术,在项目编译的时候,会自动根据 Entity 类定义的字段帮你生成 “ACCOUNT” 类以及 Entity 对应的 Mapper 类, 通过开发工具构建项目(如下图),或者执行 maven 编译命令: mvn clean package 都可以自动生成。这个原理和 lombok 一致。

执行mvn clean package之后,需要刷新一下mvn,避免必要的包无法导入。

其实效果类似于lombok,我们看一下生成的代码:

mbtais-flex生成的代码

最后编写测试类测试一下。

查询

下边是根据ID进行查询:

    @Resourceprivate UserMapper userMapper;@GetMapping(value = "test/user/{id}")public User getUserById(@PathVariable("id") String id) {QueryWrapper queryWrapper = QueryWrapper.create().select().where(USER.ID.eq(id));return userMapper.selectOneByQuery(queryWrapper);}

查询日志

这样,一个简单的查询就可以完成。当然,官方的文档中,原生的sql查询也是可以的:

public interface UserMapper extends BaseMapper<User> {/*** 根据id查询用户信息** @param id id* @return 用户信息*/@Select(value = "select * from sys_user where id = #{id}")User getUserById(@Param("id") String id);
}
多条件查询

这里我就直接给出测试的代码了:

    @GetMapping(value = "test/user/select")public List<User> getUserList() {QueryWrapper queryWrapper = QueryWrapper.create().select().where(USER.PASSWORD.isNotNull()).and(USER.NICKNAME.likeRight("张%")).and(USER.ENABLED.eq(true));return userMapper.selectListByQuery(queryWrapper);}
更新数据

更新数据

删除就在这里不演示了。

说实话,shigen在最开始并没有觉得这个框架的牛掰之处,无非就是抄写了mybatis-plus的优点,无非就是写查询的条件就像写sql语句一样的丝滑了。最后看了文档,才发现它的妙处:连表查询

时间关系,这次的分享就到此为止了,连表查询我将会给出详细的案例,期待和大家一起探讨。

与shigen一起,每天不一样!

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

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

相关文章

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

2024.3.21div4晚训题解

晚训地址链接VJ地址点击即可传送 A题 相当简单的条件判断题 #include<bits/stdc.h> using namespace std; int main(){int t;cin>>t;while(t--){int x;cin>>x;cout<<"Division ";if(x>1900)cout<<1;else if(x>1600)cout<&l…

使用 Vite 和 Bun 构建前端

虽然 Vite 目前可以与 Bun 配合使用&#xff0c;但它尚未进行大量优化&#xff0c;也未调整以使用 Bun 的打包器、模块解析器或转译器。 Vite 可以与 Bun 完美兼容。从 Vite 的模板开始使用吧。 bun create vite my-app ✔ Select a framework: › React ✔ Select a variant:…

【Docker】Docker官方发布26.0.0社区版

官网下载地址&#xff08;For RHEL/CentOS 7.5&#xff09;&#xff1a; https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 本次官方更新的rpm包有 7 个&#xff0c;文件名如下&#xff1a; # ls -ltr 总用量 118588 -rw-r--r--. 1 root root 28398448 3…

excel所有知识点

1要加双引号 工作表&#xff08;.xlsx) 单击右键→插入&#xff0c;删除&#xff0c;移动、重命名、复制、设置标签颜色&#xff0c;选定全部工作表 工作表的移动&#xff1a;两个表打开→右键→移动&#xff08;如果右键是灰色的&#xff0c;可能是保护工作表了&#xff09…

YOLOv9有效改进|使用iRMB与RepNCSPELAN4融合

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 iRMB是CVPR2023即插即用的到残差注意力机制。 本文使用iRMB与RepNCSPELAN4进行融合 二、iRMB-RepNCSPELAN4模块详解 2.1 模块简介 这…

Flutter 运行 flutter doctor 命令长时间未响应

由于 Flutter 运行 flutter doctor 命令&#xff0c;会从 pub(https://pub.dev/ 类似于 Node.js 的 npm) 上进行资源的下载&#xff0c;如果没有配置国内镜像&#xff0c;可能会由于其服务器在国外导致资源下载慢或者下载不下来&#xff0c;所以出现了运行 flutter doctor 命令…

【单元测试】单元测试之Mockito的使用

目录 一、前期准备1、准备工作2、入门知识3、五分钟入门Demo 二、让我们开始学习吧&#xff01;1、行为验证2、如何做一些测试桩stub3、参数匹配器4、执行顺序验证5、确保交互&#xff08;interaction&#xff09;操作不会执行在mock对象上6、使用注解简化mock对象创建7、监控真…

【C语言基础】:字符串函数(二)

文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr函数的使用和模拟实现4.1 strstr函数的使用4.2 strstr函数的模拟实现 五、strtok函数的使用六、strerror函数的使用 上节回顾&#xff1a;【C语言基础】&#xff1a;字符函数和字符串函数 …

软考高级:软件架构评估-质量属性-安全性概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

子矩阵(十四届蓝桥杯python组A)

这题思路就是用两次单调队列。 下面是TIE的代码。9/10&#xff1b;用了priority_queue做单调队列&#xff0c;而不是手动写的。 &#xff08;手写单调队列好麻烦~~~&#xff0c;脑子晕死&#xff0c;考试的时候过了9个点也ok&#xff0c;&#xff09; #include<iostream&…

精确率(召回率)的权衡(Machine Learning研习十六)

精确率&#xff08;召回率&#xff09;的权衡 为了理解这种权衡&#xff0c;让我们看看 SGDClassifier如何做出分类决策。 对于每个实例&#xff0c;它根据决策函数计算分数。 如果该分数大于阈值&#xff0c;则将该实例分配给正类&#xff1b; 否则它会将其分配给负类。 图 3…

独孤思维:伪造收益图,进行副业收割

01 早年独孤混群。 刚开始只会发自己的副业项目资料。 资料里面全是钩子。 所以被群主踢了。 刚开始很生气&#xff0c;后来发现自己的社群也有人打广告。 才慢慢理解那种感受。 随后混的群&#xff0c;都是以价值分享和副业心得为主。 给社群的其他小伙伴&#xff0c;…

软考高级:软件架构评估:质量属性 - 易用性 和可测试性概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

什么是Scala语言?

Scala 是一种多范式的编程语言&#xff0c;集面向对象编程和函数式编程的特性于一身&#xff0c;运行在 Java 虚拟机&#xff08;JVM&#xff09;上&#xff0c;并兼容现有的 Java 程序。Scala 的名字来源于 Scalable Language&#xff0c;意味着它是为了适应大型复杂软件系统的…

基于Springboot+vue的在线试题题库管理系统+数据库+报告+免费远程调试

项目介绍: Springbootvue的在线试题题库管理系统&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的在线试题题库管理系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#x…

Github 2024-03-22 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10Swift项目1Python项目1Java生态系统中的Spring框架教程集合 创建周期:3980 天开发语言:Java协议类型:MIT LicenseStar数量:35802…

git tag标签使用

创建标签 git checkout test git tag -a v1.0.0 -m v1.0.0里程碑版本 git push origin v1.0.0 删除标签 git tag -d v1.0.0 git push origin :refs/tags/v1.0.0远程分支可以直接在页面删除

【MySQL】3.1MySQL索引的介绍

目录 一、索引的概念 数据库索引 索引的作用 索引的副作用 索引创建的原则&#xff08;应用场景&#xff09; 适合建立索引 二、索引的分类和创建 1.普通索引 创建普通索引 1.1直接创建 1.2修改表结构的方式创建普通索引 1.3创建表时创建普通索引 2.唯一索引 2.1…

[python]bar_chart_race绘制动态条形图

最近在 B 站上看到了一个宝藏 up 主&#xff0c;名叫 "Jannchie见齐"&#xff0c;专门做动态条形图相关的数据可视化。 可以看到做出的效果还是很不错的&#xff0c;但工具使用的是 JS&#xff0c;不是 Python&#xff0c;于是尝试搜索了一下&#xff0c;看看 Python…