mybatis-flex

embedded/2024/11/18 9:31:58/

背景:

mybatis-plus 出现那么久,多表查询这块一直没有进展, mybatis-flex它出现了

总结:mybatis-flex在链式调用没有mybatis-plus做得好,mp是key-value形式入参,mf分开了显得代码冗余,mf好在支持联表查询,还有数度这块官方5-10倍有虚夸成分,用的都是同样得技术,怎么会有这样大得差距,就是在忽悠人

如果想用用mybatis-plus 又想要链表查询,可以使用mybatis-plus-join-boot-starter

<dependency>
    <groupId>com.github.yulichang</groupId>
    <artifactId>mybatis-plus-join-boot-starter</artifactId>
    <version>1.5.2</version>
</dependency>

1、很轻量

MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。

2、只增强

MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能。

3、高性能

MyBatis-Flex 采用独特的技术架构、相比同类框架(比如 MyBatis-Plus),MyBatis-Flex 的在增删改查等方面的性能均超越其 5~10 倍或以上。

maven

javascript"><?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.13</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ldj</groupId><artifactId>mybatis-flex</artifactId><version>0.0.1-SNAPSHOT</version><description>mybatis-flex-test</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--必须的3个--><dependency><groupId>com.mybatis-flex</groupId><artifactId>mybatis-flex-spring-boot-starter</artifactId><version>1.10.1</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></dependency><!--必须的3个--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

applicatiion.properties

javascript">spring.application.name=mybatis-flexspring.datasource.url=jdbc:mysql://192.168.208.200:3306/demo
spring.datasource.username=root
spring.datasource.password=rootlogging.level.com.ldj=debug
java">package com.ldj.mybatisflex.controller;import com.ldj.mybatisflex.model.dto.UserInfoReqDTO;
import com.ldj.mybatisflex.model.vo.UserInfoVO;
import com.ldj.mybatisflex.service.UserInfoService;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** User: ldj* Date: 2024/11/17* Time: 16:55* Description: No Description*/
@RestController
@RequestMapping("/userInfo")
@CrossOrigin(maxAge = 3600)
public class UserInfoController {@Autowiredprivate UserInfoService userInfoService;@PostMapping(value = "/selectOne")public UserInfoVO queryUserInfo(@RequestBody UserInfoReqDTO userInfoReqDTO){return userInfoService.queryUserInfo(userInfoReqDTO);}@PostMapping(value = "/update")public Boolean updateUserInfo(@RequestBody UserInfoReqDTO userInfoReqDTO){return userInfoService.updateUserInfo(userInfoReqDTO);}
}
java">package com.ldj.mybatisflex;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.ldj.mybatisflex.mapper")
public class MybatisFlexApplication {public static void main(String[] args) {SpringApplication.run(MybatisFlexApplication.class, args);}}

DAO

java">package com.ldj.mybatisflex.model.dao;import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;import java.io.Serializable;
import java.math.BigDecimal;/*** User: ldj* Date: 2024/11/17* Time: 16:57* Description: No Description*/
@Getter
@Setter
@Accessors(chain = true)
@Table("tb_user_info")
public class UerInfoDAO implements Serializable {private static final long serialVersionUID = 7032308989090502865L;@Id(keyType = KeyType.Auto)private Long id;private String username;private String password;private Integer age;private String sex;private String addr;private Integer married;private BigDecimal salary;
}

Mapper

java">package com.ldj.mybatisflex.mapper;import com.ldj.mybatisflex.model.dao.UerInfoDAO;
import com.mybatisflex.core.BaseMapper;/*** User: ldj* Date: 2024/11/17* Time: 17:28* Description: No Description*/
public interface UserInfoMapper extends BaseMapper<UerInfoDAO> {
}

Service

java">package com.ldj.mybatisflex.service;import com.ldj.mybatisflex.model.dao.UerInfoDAO;
import com.ldj.mybatisflex.model.dto.UserInfoReqDTO;
import com.ldj.mybatisflex.model.vo.UserInfoVO;
import com.mybatisflex.core.service.IService;/*** User: ldj* Date: 2024/11/17* Time: 17:12* Description: No Description*/
public interface UserInfoService extends IService<UerInfoDAO> {UserInfoVO queryUserInfo(UserInfoReqDTO userInfoReqDTO);
}-----------------
package com.ldj.mybatisflex.service.impl;import com.alibaba.fastjson.JSON;import com.ldj.mybatisflex.mapper.UserInfoMapper;
import com.ldj.mybatisflex.model.dao.UerInfoDAO;
import com.ldj.mybatisflex.model.dto.UserInfoReqDTO;
import com.ldj.mybatisflex.model.vo.UserInfoVO;
import com.ldj.mybatisflex.service.UserInfoService;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** User: ldj* Date: 2024/11/17* Time: 17:17* Description: No Description*/
@Slf4j
@Service
public class UserInfoServiceImpl implements UserInfoService {@Autowiredprivate UserInfoMapper userInfoMapper;@Overridepublic BaseMapper<UerInfoDAO> getMapper() {return userInfoMapper;}@Overridepublic UserInfoVO queryUserInfo(UserInfoReqDTO userInfoReqDTO) {// 第一种写法UerInfoDAO uerInfoDAO1 = queryChain().select(UerInfoDAO::getUsername, UerInfoDAO::getSex, UerInfoDAO::getSalary).from("tb_user_info").where(UerInfoDAO::getUsername).eq(userInfoReqDTO.getUsername()).one();// 第二种写法QueryWrapper queryWrapper = queryChain().toQueryWrapper().select(UerInfoDAO::getUsername, UerInfoDAO::getSex, UerInfoDAO::getSalary).and(UerInfoDAO::getUsername).eq(userInfoReqDTO.getUsername());UerInfoDAO uerInfoDAO2 = userInfoMapper.selectOneByQuery(queryWrapper);// 封装VOUserInfoVO userInfoVO = new UserInfoVO();BeanUtils.copyProperties(uerInfoDAO2, userInfoVO);log.info("result:{}", JSON.toJSONString(userInfoVO));return userInfoVO;}@Overridepublic Boolean updateUserInfo(UserInfoReqDTO userInfoReqDTO) {log.info("入参:{}", JSON.toJSONString(userInfoReqDTO));return updateChain().set(UerInfoDAO::getMarried, userInfoReqDTO.getMarried()).where(UerInfoDAO::getUsername).eq(userInfoReqDTO.getUsername()).and(UerInfoDAO::getIsDeleted).eq("N").and(UerInfoDAO::getAge).eq(18).update();}
}

补充:mapper装配 

705a862141654da9bb5904d653a0c60e.png

8562e3a22de04667859c171d9af06ab8.png

 


http://www.ppmy.cn/embedded/138497.html

相关文章

力扣(leetcode)面试经典150题——26. 删除有序数组中的重复项

题目 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#x…

2024年 Web3开发学习路线全指南

Web3是一个包含了很多领域的概念&#xff0c;不讨论币圈和链圈的划分&#xff0c;Web3包括有Defi、NFT、Game等基于区块链的Dapp应用的开发&#xff1b;也有VR、AR等追求视觉沉浸感的XR相关领域的开发&#xff1b;还有基于区块链底层架构或者协议的开发。 这篇文章给出的学习路…

StarRocks Summit Asia 2024 全部议程公布!

随着企业数字化转型深入&#xff0c;云原生架构正成为湖仓部署的新标准。弹性扩展、资源隔离、成本优化&#xff0c;帮助企业在云上获得了更高的灵活性和效率。与此同时&#xff0c;云原生架构也为湖仓与 AI 的深度融合奠定了基础。 在过去一年&#xff0c;湖仓技术与 AI 的结…

Unix进程

文章目录 命令行参数进程终止正常结束异常终止exit和_exitatexit 环境变量环境变量性质环境表shell中操作环境变量查看环境变量设置环境变量 环境变量接口获取环境变量设置环境变量 环境变量的继承性 进程资源shell命令查看进程的资源限制 进程关系进程标识进程组会话控制终端控…

大数据新视界 -- 大数据大厂之 Impala 性能优化:集群资源动态分配的智慧(上)(23 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

CKA认证 | Day3 K8s管理应用生命周期(上)

第四章 应用程序生命周期管理&#xff08;上&#xff09; 1、在Kubernetes中部署应用流程 1.1 使用Deployment部署Java应用 在 Kubernetes 中&#xff0c;Deployment 是一种控制器&#xff0c;用于管理 Pod 的部署和更新。以下是使用 Deployment 部署 Java 应用的步骤&#x…

【前端】技术演进发展简史

一、前端 1、概述 1990 年&#xff0c;第一个web浏览器诞生&#xff0c;Tim 以超文本语言 HTML 为基础在 NeXT 电脑上发明了最原始的 Web 浏览器。 1991 年&#xff0c;WWW诞生&#xff0c;这标志着前端技术的开始。 前端&#xff08;Front-end&#xff09;和后端&#xff08;…

lambdaQueryWrapper详细解释

LambdaQueryWrapper 是 MyBatis Plus 提供的一个强大的查询条件构建工具&#xff0c;它允许你使用 Lambda 表达式来构建查询条件&#xff0c;从而使代码更加简洁和易读。下面详细介绍 LambdaQueryWrapper 的使用方法及其底层原理。 什么是 LambdaQueryWrapper&#xff1f; La…