mybatis-flex

背景:

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 倍或以上。

Mybatis-Flex支持的数据库类型

数据库

描述

mysql

MySQL 数据库

mariadb

MariaDB 数据库

oracle

Oracle11g 及以下数据库

oracle12c

Oracle12c 及以上数据库

db2

DB2 数据库

hsql

HSQL 数据库

sqlite

SQLite 数据库

postgresql

PostgreSQL 数据库

sqlserver2005

SQLServer2005 数据库

sqlserver

SQLServer 数据库

dm

达梦数据库

xugu

虚谷数据库

kingbasees

人大金仓数据库

phoenix

Phoenix HBase 数据库

gauss

Gauss 数据库

clickhouse

ClickHouse 数据库

gbase

南大通用(华库)数据库

gbase-8s

南大通用数据库 GBase 8s

oscar

神通数据库

sybase

Sybase ASE 数据库

OceanBase

OceanBase 数据库

Firebird

Firebird 数据库

derby

Derby 数据库

highgo

瀚高数据库

cubrid

CUBRID 数据库

goldilocks

GOLDILOCKS 数据库

csiidb

CSIIDB 数据库

hana

SAP_HANA 数据库

impala

Impala 数据库

vertica

Vertica 数据库

xcloud

行云数据库

redshift

亚马逊 redshift 数据库

openGauss

华为 openGauss 数据库

TDengine

TDengine 数据库

informix

Informix 数据库

greenplum

Greenplum 数据库

uxdb

优炫数据库

maven

<?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

spring.application.name=mybatis-flex

spring.datasource.url=jdbc:mysql://192.168.208.200:3306/demo
spring.datasource.username=root
spring.datasource.password=root

logging.level.com.ldj=debug
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 {

    @Autowired
    private 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);
    }
}
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

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

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

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 {

    @Autowired
    private UserInfoMapper userInfoMapper;

    @Override
    public BaseMapper<UerInfoDAO> getMapper() {
        return userInfoMapper;
    }

    @Override
    public 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);


        // 封装VO
        UserInfoVO userInfoVO = new UserInfoVO();
        BeanUtils.copyProperties(uerInfoDAO2, userInfoVO);
        log.info("result:{}", JSON.toJSONString(userInfoVO));

        return userInfoVO;
    }

    @Override
    public 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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值