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

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

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:28劍客阿良_ALiang Java教程

Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內又以Mybatis用的多,基于mybatis上的增強框架,又有mybatis plus和TK mybatis等。今天我們介紹一個新的mybatis增強框架 fluent mybatis

前言

接著上一篇,上篇已經測試通過,成功添加了數據。那么這篇主要是繼續上一個項目,將項目進行工程化包裝,增加一些必要配置,并且生成增刪改查接口。

GitHub代碼倉庫:GitHub倉庫

 

Maven依賴

增加了druid數據庫連接池,所以之前的配置文件也需要調整,下面會發出來。

      <dependency>
          <groupId>cn.hutool</groupId>
          <artifactId>hutool-all</artifactId>
          <version>5.5.2</version>
      </dependency>        
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid-spring-boot-starter</artifactId>
          <version>1.2.3</version>
      </dependency>
      <dependency>
          <groupId>com.github.xiaoymin</groupId>
          <artifactId>knife4j-spring-boot-starter</artifactId>
          <version>3.0.2</version>
      </dependency>

 

配置文件調整

原來的application.properties就不用了,換成yml,看得清楚一點。

server:
port: 8080
spring:
application:
  name: fluent
datasource:
  druid:
    db-type: mysql
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.0.108:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&verifyServerCertificate=false&allowMultiQueries=true&serverTimezone=GMT%2b8
    username: root
    password: 123456
    # 使用druid數據源
    # 下面為連接池的補充設置,應用到上面所有數據源中
    # 初始化大小,最小,最大
    initialSize: 10
    minIdle: 10
    maxActive: 200
    # 配置獲取連接等待超時的時間
    maxWait: 6000
    # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一個連接在池中最小生存的時間,單位是毫秒
    minEvictableIdleTimeMillis: 100000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打開PSCache,并且指定每個連接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用于防火墻
    filters: stat,wall,slf4j
    # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合并多個DruidDataSource的監控數據
    #useGlobalDataSourceStat: true

 

Knife4j配置

這部分配置主要是為了后面調試接口方便。

上代碼

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.hy.fmp.dto.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger.web.UiConfigurationBuilder;

import java.util.HashMap;

@EnableOpenApi
@Configuration
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfig {

@Value("${knife4j.enable:true}")
private boolean enable;

@Bean
UiConfiguration uiConfig() {
  return UiConfigurationBuilder.builder().build();
}

@Bean
public Docket nlpRestApi(ServerProperties serverProperties) {
  return new Docket(DocumentationType.OAS_30)
      .enable(enable)
      .apiInfo(apiInfo("FluentMybatis測試服務接口"))
      .pathMapping(serverProperties.getServlet().getContextPath())
      .groupName("FluentMybatis測試")
      .select()
      .apis(RequestHandlerSelectors.basePackage("com.hy.fmp.ctrl"))
      .paths(PathSelectors.any())
      .build();
}

private ApiInfo apiInfo(String title) {
  return new ApiInfoBuilder()
      // 標題
      .title(title)
      // 描述
      .description("所有的接口響應在現有接口定義外包裝了一層標準結構:" + Result.ok(new HashMap<>(1)))
      // 作者信息
      .contact(new Contact("劍客阿良ALiang", "", "[email protected]"))
      // 版本號
      .version("1.0.0")
      .build();
}
}

 

添加必要實體

增加control層接口返回實體以及錯誤碼枚舉類。

結果實體

package com.hy.fmp.dto;

import cn.hutool.json.JSONUtil;
import lombok.AccessLevel;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Result<T> {
private String code = "0";
private String message = "請求成功";
private boolean success = true;
private T data;

public Result(String code, String message, boolean success) {
  this.code = code;
  this.message = message;
  this.success = success;
}

public Result(String code, String message, boolean success, T data) {
  this.code = code;
  this.message = message;
  this.success = success;
  this.data = data;
}

public Result(T data) {
  this.data = data;
}

/**
 * 針對異常返回響應體
 *
 * @param success 是否成功
 * @param code 錯誤碼
 * @param message 錯誤信息
 */
public Result(boolean success, String code, String message) {
  this.success = success;
  this.code = code;
  this.message = message;
}

public static <T> Result<T> ok(T obj) {
  return new Result<>(obj);
}

public static <T> Result<T> ok() {
  return new Result<>();
}

public static <T> Result<T> error(String code, String message) {
  return new Result<>(code, message, false);
}

public static <T> Result<T> error(String code, String message, T data) {
  return new Result<>(code, message, false, data);
}

public Result<T> setMsg(String message) {
  this.message = message;
  return this;
}

@Override
public String toString() {
  return JSONUtil.toJsonStr(this);
}
}

錯誤碼枚舉

package com.hy.fmp.enm;

/** @Author huyi @Date 2021/10/20 17:19 @Description: 報錯code */
public enum ErrorCode {
/** 錯誤code */
BASE_ERROR_CODE("10001"),
;

private final String code;

ErrorCode(String code) {
  this.code = code;
}

public String getCode() {
  return code;
}
}

 

增/改

現在開始增加和修改表接口編寫,一般來說,新增和修改的方法都定義為同一個。邏輯為如果傳遞數據主鍵,則為改,如果不傳遞,則為增。

定義接口

package com.hy.fmp.service;

import com.hy.fmp.fluent.entity.TestFluentMybatisEntity;

/** @Author huyi @Date 2021/10/20 17:10 @Description: 基礎操作接口 */
public interface IBaseService {
/**
 * 新增/修改接口
 *
 * @param param 表實體
 * @return 表實體
 */
TestFluentMybatisEntity insertOrUpdate(TestFluentMybatisEntity param);
}

接口實現類

package com.hy.fmp.service.Impl;

import com.hy.fmp.fluent.dao.intf.TestFluentMybatisDao;
import com.hy.fmp.fluent.entity.TestFluentMybatisEntity;
import com.hy.fmp.service.IBaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/** @Author huyi @Date 2021/10/20 17:10 @Description: 基礎操作接口實現 */
@Slf4j
@Service
public class BaseServiceImpl implements IBaseService {

@Autowired private TestFluentMybatisDao testFluentMybatisDao;

@Override
public TestFluentMybatisEntity insertOrUpdate(TestFluentMybatisEntity param) {
  testFluentMybatisDao.saveOrUpdate(param);
  return param;
}
}

編寫control層

package com.hy.fmp.ctrl;

import com.hy.fmp.dto.Result;
import com.hy.fmp.enm.ErrorCode;
import com.hy.fmp.fluent.entity.TestFluentMybatisEntity;
import com.hy.fmp.service.IBaseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/** @Author huyi @Date 2021/10/20 17:04 @Description: 基礎操作 */
@Slf4j
@RestController
@RequestMapping("/base")
@Api(tags = "基礎操作")
public class BaseController {
@Autowired private IBaseService baseService;

@ApiOperation(value = "插入/更新數據", notes = "插入/更新數據")
@RequestMapping(value = "/insertOrUpdate", method = RequestMethod.POST)
@ResponseBody
public Result<TestFluentMybatisEntity> insertOrUpdate(@RequestBody TestFluentMybatisEntity param) {
  try {
    return Result.ok(baseService.insertOrUpdate(param));
  } catch (Exception exception) {
    return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
  }
}
}

啟動項目

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

打開Knife4j頁面:http://localhost:8080/doc.html#/home

點開我們剛剛寫好的接口進行測試。

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

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

OK,插入成功。

修改數據

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

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

OK,修改成功。

總結

下一篇繼續,地址:FluentMybatis 項目工程化、常規操作(增刪改查)(二)

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

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人综合亚洲一区 | 久久亚洲伊人 | 欧美高清免费一级在线 | 护士被多人调教到失禁h | 国产精品资源站 | 97se亚洲国产综合自在线观看 | 青山葵在线| 亚洲黑人巨大videos0 | 精品无码一区二区三区中文字幕 | yjsp妖精视频在线观看免费 | yellow在线| 4399h漫画| 亚洲欧美日韩在线观看看另类 | 69罗莉视频在线观看 | 午夜久久精品 | 日韩精品中文字幕久久 | 亚洲国产欧美在线人网站 | 咪咪爱小说 | 欧美vpswindows| 91九色jiuse006 | 日韩黄色录像 | 精品一区二区三区视频日产 | 19+韩国女主播激情vip视频在线 | 国内精品91东航翘臀女神在线 | 男人好大好硬好爽免费视频 | 欧美同性video | 久久99re热在线观看视频 | 曹逼网站 | 国产精品合集久久久久青苹果 | 91午夜视频| 女女宿舍互慰h文小说 | 国产成人99精品免费观看 | 国产免费一区不卡在线 | 98成人网| 欧亚尺码专线欧洲s码wmy | 四虎影音先锋 | 91精品国产免费久久国语蜜臀 | 国产一区二区在线观看美女 | 男男playh片在线观看 | 午夜精品一区 | 国产美女做爰免费视频软件 |