iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下
  • 344
分享到

Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下

2024-04-02 19:04:59 344人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言查询查询写法1查询写法2代码说明新问题删总结前言 接着上一篇:Java Fluent mybatis 项目工程化与常规操作详解流程篇 上 仓库地址:GitHub仓库 查询 定

前言

接着上一篇:Java Fluent mybatis 项目工程化与常规操作详解流程篇 上

仓库地址:GitHub仓库

查询

定义查询请求体


package com.hy.fmp.dto.req;
 
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
 

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TestFluentMybatisQueryReq {
  private String age;
  private String name;
}

查询写法1

查询接口方法定义


  
  List<TestFluentMybatisEntity> query1(TestFluentMybatisQueryReq queryReq);

方法实现,这里我们改用了mapper来实现一下官方给出的查询语法模式。


package com.hy.fmp.service.Impl;
 
import cn.hutool.core.util.StrUtil;
import com.hy.fmp.dto.req.TestFluentMybatisQueryReq;
import com.hy.fmp.fluent.dao.intf.TestFluentMybatisDao;
import com.hy.fmp.fluent.entity.TestFluentMybatisEntity;
import com.hy.fmp.fluent.helper.TestFluentMybatisMapping;
import com.hy.fmp.fluent.mapper.TestFluentMybatisMapper;
import com.hy.fmp.fluent.wrapper.TestFluentMybatisQuery;
import com.hy.fmp.service.IBaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.HashMap;
import java.util.List;
 

@Slf4j
@Service
public class BaseServiceImpl implements IBaseService {
 
  @Autowired private TestFluentMybatisDao testFluentMybatisDao;
  @Autowired private TestFluentMybatisMapper testFluentMybatisMapper;
 
  @Override
  public TestFluentMybatisEntity insertOrUpdate(TestFluentMybatisEntity param) {
    testFluentMybatisDao.saveOrUpdate(param);
    return param;
  }
 
  @Override
  public List<TestFluentMybatisEntity> query1(TestFluentMybatisQueryReq queryReq) {
    return testFluentMybatisMapper.listEntity(
        new TestFluentMybatisQuery()
            .selectAll()
            .where
            .age()
            .eq(queryReq.getAge())
            .and
            .name()
            .eq(queryReq.getName())
            .end());
  }
 
}

control层方法定义


  @apiOperation(value = "查询数据1", notes = "查询数据1")
  @RequestMapping(value = "/query1", method = RequestMethod.POST)
  @ResponseBody
  public Result<List<TestFluentMybatisEntity>> query1(
      @RequestBody TestFluentMybatisQueryReq queryReq) {
    try {
      return Result.ok(baseService.query1(queryReq));
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }

调试一下接口

一眼望去貌似没问题,但是长期后端开发的朋友应该能看出来,这个实现方式如果一旦age或者name参数为空的话,那么肯定查不出结果。因为按照语句的写法,会强制比较age和name两个参数。

我们将其中一个参数设置为空字符串试试看。

不出意料。现在我可以就该方法做调整,参数判断然后替换select语句,为了更优雅的实现,我去官方文档再找找。

查询写法2

查询方法2


package com.hy.fmp.service.Impl;
 
import cn.hutool.core.util.StrUtil;
import com.hy.fmp.dto.req.TestFluentMybatisQueryReq;
import com.hy.fmp.fluent.dao.intf.TestFluentMybatisDao;
import com.hy.fmp.fluent.entity.TestFluentMybatisEntity;
import com.hy.fmp.fluent.helper.TestFluentMybatisMapping;
import com.hy.fmp.fluent.mapper.TestFluentMybatisMapper;
import com.hy.fmp.fluent.wrapper.TestFluentMybatisQuery;
import com.hy.fmp.service.IBaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.HashMap;
import java.util.List;
 

@Slf4j
@Service
public class BaseServiceImpl implements IBaseService {
 
  @Autowired private TestFluentMybatisDao testFluentMybatisDao;
  @Autowired private TestFluentMybatisMapper testFluentMybatisMapper;
 
  @Override
  public TestFluentMybatisEntity insertOrUpdate(TestFluentMybatisEntity param) {
    testFluentMybatisDao.saveOrUpdate(param);
    return param;
  }
 
  @Override
  public List<TestFluentMybatisEntity> query1(TestFluentMybatisQueryReq queryReq) {
    return testFluentMybatisMapper.listEntity(
        new TestFluentMybatisQuery()
            .selectAll()
            .where
            .age()
            .eq(queryReq.getAge())
            .and
            .name()
            .eq(queryReq.getName())
            .end());
  }
 
  @Override
  public List<TestFluentMybatisEntity> query2(TestFluentMybatisQueryReq queryReq) {
    return testFluentMybatisMapper.listByMap(
        true,
        new HashMap<String, Object>() {
          {
            if (!StrUtil.hasEmpty(queryReq.getAge())) {
              this.put(TestFluentMybatisMapping.age.column, queryReq.getAge());
            }
            if (!StrUtil.hasEmpty(queryReq.getName())) {
              this.put(TestFluentMybatisMapping.name.column, queryReq.getName());
            }
          }
        });
  }
}

代码说明

我对比了一下官方文档的写法,发现我这个版本的fm该listByMap方法多一个isColumn的布尔型参数。所以我追了一下源码

只影响错误打印,主要就是设置的map参数必须要是列名或者实体对象内的参数名。就不管了。

验证一下

没什么问题,还是可以查出来。

新问题

但是按照这个查询方法,如果两个值都传空字符串会查出全表数据吗?

验证一下

咳咳,报错了。

所以我还是老老实实先把代码参数判空优化一下。


package com.hy.fmp.service.Impl;
 
import cn.hutool.core.util.StrUtil;
import com.hy.fmp.dto.req.TestFluentMybatisQueryReq;
import com.hy.fmp.fluent.dao.intf.TestFluentMybatisDao;
import com.hy.fmp.fluent.entity.TestFluentMybatisEntity;
import com.hy.fmp.fluent.helper.TestFluentMybatisMapping;
import com.hy.fmp.fluent.mapper.TestFluentMybatisMapper;
import com.hy.fmp.fluent.wrapper.TestFluentMybatisQuery;
import com.hy.fmp.service.IBaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.HashMap;
import java.util.List;
 

@Slf4j
@Service
public class BaseServiceImpl implements IBaseService {
 
  @Autowired private TestFluentMybatisDao testFluentMybatisDao;
  @Autowired private TestFluentMybatisMapper testFluentMybatisMapper;
 
  @Override
  public TestFluentMybatisEntity insertOrUpdate(TestFluentMybatisEntity param) {
    testFluentMybatisDao.saveOrUpdate(param);
    return param;
  }
 
  @Override
  public List<TestFluentMybatisEntity> query1(TestFluentMybatisQueryReq queryReq) {
    return testFluentMybatisMapper.listEntity(
        new TestFluentMybatisQuery()
            .selectAll()
            .where
            .age()
            .eq(queryReq.getAge())
            .and
            .name()
            .eq(queryReq.getName())
            .end());
  }
 
  @Override
  public List<TestFluentMybatisEntity> query2(TestFluentMybatisQueryReq queryReq) {
    if (StrUtil.hasEmpty(queryReq.getAge()) && StrUtil.hasEmpty(queryReq.getName())) {
      return testFluentMybatisMapper.listEntity(new TestFluentMybatisQuery().selectAll());
    }
    return testFluentMybatisMapper.listByMap(
        true,
        new HashMap<String, Object>() {
          {
            if (!StrUtil.hasEmpty(queryReq.getAge())) {
              this.put(TestFluentMybatisMapping.age.column, queryReq.getAge());
            }
            if (!StrUtil.hasEmpty(queryReq.getName())) {
              this.put(TestFluentMybatisMapping.name.column, queryReq.getName());
            }
          }
        });
  }
}

验证一下

添加通过ID删除数据的接口方法


  
  void deleteById(Integer id);

实现接口方法


  @Override
  public void deleteById(Integer id) {
    testFluentMybatisMapper.deleteById(id);
  }

验证一下

删除成功

总结

这两篇文章主要是将之前的项目进行工程化改造,增加了文档、接口等一些列常规化操作。实现了数据库表的基本增删改查功能。其他的功能会在之后慢慢更新,fm融合了很多其他ORM框架的东西,需要慢慢摸索摸索。

如果本文对你有帮助,请点个赞支持一下吧。

到此这篇关于Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下的文章就介绍到这了,更多相关Java Fluent Mybatis内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下

本文链接: https://www.lsjlt.com/news/155732.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下
    目录前言查询查询写法1查询写法2代码说明新问题删总结前言 接着上一篇:Java Fluent Mybatis 项目工程化与常规操作详解流程篇 上 仓库地址:GitHub仓库 查询 定...
    99+
    2024-04-02
  • Java Fluent Mybatis 项目工程化与常规操作详解流程篇 上
    目录前言Maven依赖配置文件调整Knife4j配置添加必要实体增/改总结前言 接着上一篇,上篇已经测试通过,成功添加了数据。那么这篇主要是继续上一个项目,将项目进行工程化包装,增加...
    99+
    2024-04-02
  • Java Fluent Mybatis 聚合查询与apply方法详解流程篇
    前言 接着上一篇文章:Java Fluent Mybatis 分页查询与sql日志输出详解流程篇 我把分页已经调整好了,现在实验一下官方给出的聚合查询方法。 GitHub代码仓库:G...
    99+
    2024-04-02
  • Java Fluent Mybatis 分页查询与sql日志输出详解流程篇
    目录前言准备数据Sql日志配置官方分页查询PageHelper分页查询总结前言 接着我上一章:Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下 上一章我把项...
    99+
    2024-04-02
  • 详解Java目录操作与文件操作教程
    目录目录操作创建目录判断这个文件或目录是否存在判断是否是目录读取目录删除目录文件操作创建文件删除文件File对象常用函数目录操作 创建目录 File类中有两个方法可以用来创建文件夹:...
    99+
    2024-04-02
  • 解锁团队项目的潜力:PHP Git 与协作式工作流程
    在现代软件开发中,团队协作至关重要。PHP Git 与协作式工作流程为团队提供了一种高效且可扩展的解决方案,以释放其项目潜力。 Git 概述 Git 是一款分布式版本控制系统,允许团队成员协同管理代码更改。它提供了一个分支和合并模型,使团...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作