激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

2022-03-04 00:32劍客阿良_ALiang Java教程

Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內又以Mybatis用的多,基于mybatis上的增強框架,又有mybatis plus和TK mybatis等。今天我們介紹一個新的mybatis增強框架 fluent mybatis關于項目工程化與常規操作流程

前言

接著上一篇:Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 上

倉庫地址:GitHub倉庫

查詢

定義查詢請求體

package com.hy.fmp.dto.req;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/** @Author huyi @Date 2021/10/20 19:37 @Description: 查詢條件 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TestFluentMybatisQueryReq {
private String age;
private String name;
}

查詢寫法1

查詢接口方法定義

/**
 * 查詢接口1
 *
 * @param queryReq 查詢請求
 * @return 列表
 */
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;

/** @Author huyi @Date 2021/10/20 17:10 @Description: 基礎操作接口實現 */
@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);
  }
}

調試一下接口

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

一眼望去貌似沒問題,但是長期后端開發的朋友應該能看出來,這個實現方式如果一旦age或者name參數為空的話,那么肯定查不出結果。因為按照語句的寫法,會強制比較age和name兩個參數。

我們將其中一個參數設置為空字符串試試看。

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

不出意料。現在我可以就該方法做調整,參數判斷然后替換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;

/** @Author huyi @Date 2021/10/20 17:10 @Description: 基礎操作接口實現 */
@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的布爾型參數。所以我追了一下源碼。

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

只影響錯誤打印,主要就是設置的map參數必須要是列名或者實體對象內的參數名。就不管了。

驗證一下

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

沒什么問題,還是可以查出來。

新問題

但是按照這個查詢方法,如果兩個值都傳空字符串會查出全表數據嗎?

驗證一下

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

咳咳,報錯了。

所以我還是老老實實先把代碼參數判空優化一下。

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;

/** @Author huyi @Date 2021/10/20 17:10 @Description: 基礎操作接口實現 */
@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());
          }
        }
      });
}
}

驗證一下

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

 

添加通過ID刪除數據的接口方法

/**
 * 刪除接口
 *
 * @param id id
 */
void deleteById(Integer id);

實現接口方法

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

驗證一下

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

刪除成功

 

總結

這兩篇文章主要是將之前的項目進行工程化改造,增加了文檔、接口等一些列常規化操作。實現了數據庫表的基本增刪改查功能。其他的功能會在之后慢慢更新,fm融合了很多其他orm框架的東西,需要慢慢摸索摸索。

如果本文對你有幫助,請點個贊支持一下吧。

Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下

到此這篇關于Java Fluent Mybatis 項目工程化與常規操作詳解流程篇 下的文章就介紹到這了,更多相關Java Fluent Mybatis內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://huyi-aliang.blog.csdn.net/article/details/120875177

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 嫩草91在线 | av在线免费电影 | 精品三级内地国产在线观看 | 国产精品久久久久久久亚洲按摩 | 婷婷久久综合九色综合色多多蜜臀 | 深夜福利视频免费观看 | 成人在线网站 | 成人毛片一区二区三区 | 免费黄色入口 | 国产精品一区网站 | av在线直播观看 | 250pp久久新 黄色网址免费在线播放 | 麻豆视频网 | 人与xxxxhdxxxhdxx| 久久久久久99| 日韩午夜一区二区三区 | 18一20岁一级毛片 | 在线看91 | 久久最新视频 | 国产精品区一区二区三区 | 欧美一区黄色 | 91 在线免费观看 | 二区三区四区 | 一区二区三区日韩精品 | 国产91对白叫床清晰播放 | 国产精品av久久久久久久久久 | 久久亚洲成人 | 国产一级一级片 | 中文字幕一二区 | xxxeexxx性国产| 视频一区二区在线播放 | 曰韩毛片 | 黄色毛片视频在线观看 | 亚洲字幕av | av成人在线电影 | 午夜色视频在线观看 | 一区二区精品视频 | 欧美一级毛片一级毛片 | 色综合久久久久久久久久 | 亚洲网站在线 | 午夜色视频在线观看 |