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

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

2024-04-02 19:04:59 104人浏览 薄情痞子

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

摘要

目录前言Maven依赖配置文件调整Knife4j配置添加必要实体增/改总结前言 接着上一篇,上篇已经测试通过,成功添加了数据。那么这篇主要是继续上一个项目,将项目进行工程化包装,增加

前言

接着上一篇,上篇已经测试通过,成功添加了数据。那么这篇主要是继续上一个项目,将项目进行工程化包装,增加一些必要配置,并且生成增删改查接口。

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", "", "3614322595@qq.com"))
        // 版本号
        .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;
  }
 
  
  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;
 

public enum ErrorCode {
  
  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;
 

public interface IBaseService {
  
  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;
 

@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.*;
 

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

启动项目

打开Knife4j页面:Http://localhost:8080/doc.html#/home

点开我们刚刚写好的接口进行测试。

OK,插入成功。

修改数据

OK,修改成功。

总结

下一篇继续,地址:Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下

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

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

--结束END--

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

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

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

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

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

下载Word文档
猜你喜欢
  • Java Fluent Mybatis 项目工程化与常规操作详解流程篇 上
    目录前言Maven依赖配置文件调整Knife4j配置添加必要实体增/改总结前言 接着上一篇,上篇已经测试通过,成功添加了数据。那么这篇主要是继续上一个项目,将项目进行工程化包装,增加...
    99+
    2024-04-02
  • Java Fluent Mybatis 项目工程化与常规操作详解流程篇 下
    目录前言查询查询写法1查询写法2代码说明新问题删总结前言 接着上一篇:Java Fluent Mybatis 项目工程化与常规操作详解流程篇 上 仓库地址:GitHub仓库 查询 定...
    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开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作