Fluent Mybatis

news2024/11/26 13:57:02

官方文档:https://gitee.com/fluent-mybatis/fluent-mybatis/wikis

新的ORM框架,整个设计理念非常符合工程师思维。

  1. Fluent Mybatis 介绍

何为 Fluent Mybatis?

Fluent Mybatis, 是一款 Mybatis 语法增强框架, 综合了 Mybatis Plus, Dynamic SQL,JPA等框架特性和优点, 利用 annotation processor 生成代码。

Fluent Mybatis 有什么亮点?

使用 Fluent Mybatis 可以不用写具体的 XML 文件,通过 Java API 可以构造出比较复杂的业务 SQL 语句,做到代码逻辑和 SQL 逻辑的合一。不再需要在 Dao 中组装查询或更新操作,在 XML 或 Mapper 中再组装参数。

项目地址:https://gitee.com/fluent-mybatis/fluent-mybatis

  1. Fluent Mybatis 特性一览

  1. 各种实现方式对比
  2. Fluent Mybatis

我们可以看到 fluent api 的能力,以及 IDE 对代码的渲染效果。

  1. Mybatis

直接使用 Mybatis,实现步骤还是相当的繁琐,效率太低

  1. Mybatis Plus

Mybatis Plus 实现用到了比较多字符串的硬编码。字符串的硬编码,会给开发同学造成不小的使用门槛,个人觉的主要有 2 点:

  1. 字段名称的记忆和敲码困难
  2. Entity 属性跟随数据库字段发生变更后的运行时错误
  3. Fluent Mybatis 实战
  4. 引入依赖

新建 Maven 工程,设置项目编译级别为 Java8 及以上,引入 Fluent Mybatis 依赖包。

<dependencies>
    <!-- 引入fluent-mybatis 运行依赖包, scope为compile -->
    <dependency>
        <groupId>com.github.atool</groupId>
        <artifactId>fluent-mybatis</artifactId>
        <version>1.9.3</version>
    </dependency>
    <!-- 引入fluent-mybatis-processor, scope设置为provider 编译需要,运行时不需要 -->
    <dependency>
        <groupId>com.github.atool</groupId>
        <artifactId>fluent-mybatis-processor</artifactId>
        <version>1.9.3</version>
    </dependency>
</dependencies>

  1. 创建表
create schema fluent_mybatis;

create table hello_world
(
    id  bigint unsigned auto_increment primary key,
    say_hello    varchar(100) null,
    your_name    varchar(100) null,
    gmt_created   datetime   DEFAULTNULLCOMMENT'创建时间',
    gmt_modified datetime   DEFAULTNULLCOMMENT'更新时间',
    is_deleted   tinyint(2) DEFAULT0COMMENT'是否逻辑删除'
) ENGINE = InnoDB
  CHARACTERSET = utf8 comment'简单演示表';

  1. 创建数据库表对应的 Entity 类

创建数据库表对应的 Entity 类: HelloWorldEntity

  1. 根据驼峰命名规则命名 Entity 类和字段
  2. HelloWorldEntity 继承 IEntity 接口类
  3. 在 HelloWorldEntity 类上加注解 @FluentMybatis
@FluentMybatis
public class HelloWorldEntity extends RichEntity{
    private Long id;

    private String sayHello;

    private String yourName;

    private Date gmtCreated;

    private Date gmtModified;

    private Boolean isDeleted;

    // get, set, toString 方法

   @Override
   public Class<? extends IEntity> entityClass() {
      return HelloWorldEntity.class;
   }
}

执行编译。

IDE 编译:

Maven 编译:mvn clean compile

Gradle 编译:gradle clean compile

  1. 配置数据源
  2. 数据源 DataSource 配置
  3. Mybatis 的 mapper 扫描路径
  4. Mybatis 的 SqlSessionFactoryBean
@ComponentScan(basePackages = "cn.org.atool.fluent.mybatis.demo1")
@MapperScan("cn.org.atool.fluent.mybatis.demo1.entity.mapper")
@Configuration
public class HelloWorldConfig{
    /**
     * 设置dataSource属性
     *
     * @return
     */
    @Bean
    public DataSource dataSource(){
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/fluent_mybatis?useUnicode=true&characterEncoding=utf8");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }

    /**
     * 定义mybatis的SqlSessionFactoryBean
     *
     * @param dataSource
     * @return
     */
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean;
    }

   @Bean
   public MapperFactory mapperFactory(){
      returnnew MapperFactory();
   }
}

  1. @FluentMybatis

Fluent Mybatis 根据 Entity 类上 @FluentMybatis 注解在编译时, 会在 target 目录 class 目录下自动编译生成一系列文件:

这些文件的具体作用如下:

  • mapper/*Mapper : Mybatis 的 Mapper 定义接口, 定义了一系列通用的数据操作接口方法。
  • dao/*BaseDao : Dao 实现基类, 所有的 DaoImpl 都继承各自基类 根据分层编码的原则,我们不会在 Service 类中直接使用 Mapper 类,而是引用 Dao 类。我们在 Dao 实现类中根据条件实现具体的数据操作方法。
  • wrapper/*Query : Fluent Mybatis 核心类, 用来进行动态 sql 的构造, 进行条件查询。
  • wrapper/*Updater : Fluent Mybatis 核心类, 用来动态构造 update 语句。
  • helper/*Mapping : Entity 表字段和 Entity 属性映射定义类
  • helper/*SegmentQuery 和 Updater 具体功能实现, 包含几个实现: selectwheregroup byhaving byorder bylimit
  • IEntityRelation : 处理 Entity 关联(一对一, 一对多, 多对多)关系的接口
  • Ref : 引用 Fluent Mybatis 生成的对象的快捷入口工具类

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

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

相关文章

codetop标签双指针题目大全解析(C++解法),双指针刷穿地心!!!!!

写在前面&#xff1a;此篇博客是以[双指针总结]博客为基础的针对性训练&#xff0c;题源是codetop标签双指针近一年&#xff0c;频率由高到低 1.无重复字符的最长子串2.三数之和3.环形链表4.合并两个有序数组5.接雨水6.环形链表II7.删除链表的倒数第N个节点8.训练计划II9.最小覆…

python爬虫代理ip多线程配置的详细教程

在网络爬虫的世界里&#xff0c;代理IP和多线程配置是两个非常重要的技巧。它们不仅能帮助我们提高爬虫的效率&#xff0c;还能有效地避免被目标网站封禁。今天&#xff0c;我就带大家一起探讨如何在Python中配置代理IP和多线程&#xff0c;实现高效的网络爬取。 代理IP的基本…

【vue3|第19期】vue3一般组件与路由组件的探讨

日期&#xff1a;2024年8月2日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

stm32cubemx生成驱动程序里面的变量,如何被main函数调用

用stm32cubemx生成了一个串口中断程序&#xff0c;功能实现了对不定长输入字符的统计和输出打印&#xff0c;在主函数写了回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 想重新排版&#xff0c;把回调函数放到UART.c里面&#xff0c; 考虑到main.c和uart…

使用Adobe Photoshop CS5给图片加水印

使用Adobe Photoshop CS5给图片加水印 前言1.我这里使用的是Adobe Photoshop CS52.新建空白画布3.写入水印内容4.按 Ctrl T 将其倾斜5.右键图层选择“混合选项”6.选择描边&#xff0c;颜色选择灰色7.效果如下8.填充选择0&#xff0c;不透明度选择75%9.打开编辑&#xff0c;选…

上海冷链配送新篇章 华鼎冷链科技以卓越服务餐饮品牌

在快速发展的上海餐饮连锁行业中&#xff0c;冷链运输作为保障食品安全与品质的关键环节&#xff0c;正迎来前所未有的发展机遇与挑战。华鼎冷链科技作为该领域的佼佼者&#xff0c;正引领着上海乃至全国冷链运输行业的新风尚。 华鼎冷链科技的成功并非一蹴而就。首先&#xff…

1990-2023年上市公司常用变量数据(1400+指标)

1990-2023年上市公司常用变量数据&#xff08;1400指标&#xff09; 1、时间&#xff1a;1990-2023年 2、范围&#xff1a;上市公司 3、格式&#xff1a;dta 4、来源&#xff1a;上市公司年报 5、指标&#xff1a;包括上市公司基本信息&#xff08;性质、行业、地址&#…

Linux智能控制器用于非标自动化印刷包装机械

科技的不断发展&#xff0c;印刷包装机械行业也在不断寻求创新和突破。Linux 智能控制器、非标自动化以及二次开发等技术的出现&#xff0c;为该行业的发展带来了新的机遇。本文将结合 BLIoTLink 协议软件&#xff0c;探讨这些技术如何加速印刷包装机械产业的升级。 Linux 智能…

C++STL专题 vector底层实现

目录 一&#xff0c; vector的手搓 1.构造函数 2. 拷贝构造的实现 3.析构函数 4.begin() end() 的实现 5.reserve的实现 6.size和capacity的实现 7.push_back的实现 8.pop_back的实现 9.empty的实现 10.insert的实现 11.erase的实现 12.resize的实现 13.clear的实…

Cadence23学习笔记(十七)

吴老师的网站里面有很多cadence的开源项目&#xff0c;可以用来学习&#xff1a; 全志 H3 SOC 官方参考设计 DD3 16bitX2 原理图及PCB – 吴川斌的博客 (mr-wu.cn) cadence设置显示实时的走线长度&#xff1a; 在allegro进行布线时可以实时显示当先布线的实际长度有助于pcb的…

Javascript——NaN有什么用法

简介 在 JavaScript 中&#xff0c;NaN&#xff08;Not a Number&#xff09;是一个特殊的值&#xff0c;用来表示非数字的结果&#xff0c;例如一个不合法的数学运算的结果。根据 IEEE 754 浮点数标准&#xff0c;NaN 不等于任何值&#xff0c;包括它自己。这意味着 NaN 是唯…

腾讯云服务器windows系统如何转linux系统

本人购买了腾讯云服务&#xff0c;进去后发现是windows系统的&#xff0c;有点郁闷&#xff08;使用不习惯&#xff09;&#xff0c;于是就去查查看看能不能将Windows系统转成linux系统&#xff0c;网上也有解决办法&#xff0c;但是貌似跟现在的腾讯云后台不一致&#xff0c;下…

dlid源码快速安装——百分百成功

前言 之前安装过一次dlib折腾了很久&#xff0c;最近子啊新的服务器上重新安装dlib这个包又遇到了一些问题&#xff0c;这里简单记录一下。 安装 我这里选择的是直接使用源码安装&#xff08;之前尝试过其他的安装方法&#xff0c;但是都失败了&#xff0c;索性这次就直接使用…

基于Java和Mysql的多人命题系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S架构、SSM框架 工具&#xff1a;Eclipse开发工具 系统展示 首页 管理员界面 教师管理界面 学生…

OZON热销文具产品,OZON文具有哪些热销品

OZON平台上的热销文具产品种类繁多&#xff0c;这些产品不仅满足了消费者在日常学习、办公中的需求&#xff0c;还体现了市场的趋势和消费者的偏好。以下是一些OZON平台上的热销文具产品及其特点&#xff1a; OZON热销文具产品地址&#xff1a;D。DDqbt。COm/74rD Top1 蓝色…

揭秘!结构健康自动化监测:高效精准,为何远超传统人工监测?

人工检测是依靠目测检查或借助于便携式仪器测量得到的信息&#xff0c;但是随着整个行业的发展&#xff0c;传统的人工检测方法已经不能满足检测需求&#xff0c;从人工检测到自动化监测已是必然趋势。 a. 从检测方式看 人工检测需要耗费大量的精力&#xff0c;从摆放检测工具到…

机器学习算法———深度学习(常见的结构)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【wiki知识库】07.用户管理前端模块的添加-前端部分

&#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 目录 &#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 一、今日目标 二、前端部分的改造 2.1 修改the-header文件 2.2 用户展示/admin/user组件添加 2.2.1 /admin/user代码如下…

杂谈c语言——3.内存对齐

先看两个例子&#xff1a; typedef struct S {int a;double b;char c; }S;typedef struct B {int a;char b;double c; }B;int main() {printf("S : %d\n", sizeof(S));printf("B : %d\n", sizeof(B));return 0; } 结果为&#xff1a; S:24; B:16&#xff…

【Qt】项目代码

main.cpp文件 argc&#xff1a;命令行参数个数。*argv[ ]&#xff1a;每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序&#xff0c;一定需要QApplication对象。 widget w; 在创建项目的时候&#xff0c;勾选widg…