一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

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

Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis關(guān)于項(xiàng)目工程化與常規(guī)操作流程

前言

接著上一篇:Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 上

倉庫地址: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);

方法實(shí)現(xiàn),這里我們改用了mapper來實(shí)現(xiàn)一下官方給出的查詢語法模式。

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: 基礎(chǔ)操作接口實(shí)現(xiàn) */
@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 = "查詢數(shù)據(jù)1", notes = "查詢數(shù)據(jù)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);
  }
}

調(diào)試一下接口

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

一眼望去貌似沒問題,但是長期后端開發(fā)的朋友應(yīng)該能看出來,這個(gè)實(shí)現(xiàn)方式如果一旦age或者name參數(shù)為空的話,那么肯定查不出結(jié)果。因?yàn)榘凑照Z句的寫法,會強(qiáng)制比較age和name兩個(gè)參數(shù)。

我們將其中一個(gè)參數(shù)設(shè)置為空字符串試試看。

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

不出意料。現(xiàn)在我可以就該方法做調(diào)整,參數(shù)判斷然后替換select語句,為了更優(yōu)雅的實(shí)現(xiàn),我去官方文檔再找找。

查詢寫法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: 基礎(chǔ)操作接口實(shí)現(xiàn) */
@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());
          }
        }
      });
}
}

代碼說明

我對比了一下官方文檔的寫法,發(fā)現(xiàn)我這個(gè)版本的fm該listByMap方法多一個(gè)isColumn的布爾型參數(shù)。所以我追了一下源碼。

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

只影響錯(cuò)誤打印,主要就是設(shè)置的map參數(shù)必須要是列名或者實(shí)體對象內(nèi)的參數(shù)名。就不管了。

驗(yàn)證一下

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

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

新問題

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

驗(yàn)證一下

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

咳咳,報(bào)錯(cuò)了。

所以我還是老老實(shí)實(shí)先把代碼參數(shù)判空優(yōu)化一下。

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: 基礎(chǔ)操作接口實(shí)現(xiàn) */
@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());
          }
        }
      });
}
}

驗(yàn)證一下

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

 

添加通過ID刪除數(shù)據(jù)的接口方法

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

實(shí)現(xiàn)接口方法

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

驗(yàn)證一下

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

刪除成功

 

總結(jié)

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

如果本文對你有幫助,請點(diǎn)個(gè)贊支持一下吧。

Java Fluent Mybatis 項(xiàng)目工程化與常規(guī)操作詳解流程篇 下

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女撒尿毛片免费看 | 17个农民工婉莹第一部 | 男人j放进女人的p视频免费 | 欧美大片一区二区 | 国产精品www| 国产清纯白嫩大学生正在播放 | 国产偷窥女洗浴在线观看亚洲 | 日日摸日日添日日透 | 亚洲视频999 | 国产成人无精品久久久 | 日本妇人成熟免费不卡片 | 草榴色导航 | 99re5精品视频在线观看 | 夫妻性生活影院 | 99热最新在线观看 | 色噜噜狠狠狠综合曰曰曰88av | 国产拍拍视频一二三四区 | 精品AV综合导航 | 福利视频一区二区牛牛 | 久久精品熟女亚洲AV国产 | 国产成人精品日本亚洲网站 | caoporn超碰 | 2018亚洲男人天堂 | 亚洲H成年动漫在线观看不卡 | 男人影院天堂网址 | 国产高清自拍 | 欧美成人精品福利在线视频 | 成人日批视频 | 欧美人妖另类性hd | 日韩影院在线观看 | bdsm中国精品调教 | 操小女人| 成人国产第一区在线观看 | 99国产精品 | 亚洲国产精品嫩草影院永久 | 四虎网址在线 | 好男人影视社区www在线观看 | 全彩孕交漫画福利啪啪吧 | 无限时间看片在线观看 | 交换朋友夫妇3中文字幕 | 香蕉久草 |