SpringCloud微服务架构搭建--Mybatis-Plus(三)

学而时习之,不亦说乎

前言

具体业务实现离不开与数据库交互,本章重点记录一下SpringBoot集成druid数据源,集成mybatis-plus,为了开发方便,基于mybatis-plus的代码生成器,实现对业务最基本的增删改查操作。

准备工作

  1. 在mysql数据库中创建mingx_user库,并创建sys_user表,用于后续查询验证。
    表生成代码如下:
DROP TABLE IF EXISTS `sys_user`;CREATE TABLE `sys_user` (  `id` varchar(32) NOT NULL,  `name` varchar(20) DEFAULT NULL COMMENT ‘姓名‘,  `sex` tinyint(4) DEFAULT NULL COMMENT ‘性别,0:男性,1:女生‘,  `birthday` date DEFAULT NULL COMMENT ‘出生日期‘,  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,  `create_by` varchar(255) DEFAULT NULL COMMENT ‘创建人‘,  `update_time` datetime DEFAULT NULL COMMENT ‘更新时间‘,  `update_by` varchar(255) DEFAULT NULL COMMENT ‘更新人‘,  `del_flag` tinyint(4) DEFAULT ‘0‘ COMMENT ‘删除标记,0:未删除,1:已删除‘,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------ Records of sys_user-- ----------------------------INSERT INTO `sys_user` VALUES (‘1‘, ‘寻的足迹‘, ‘0‘, ‘2020-02-24‘, ‘2020-02-24 15:32:44‘, ‘1‘, null, null, ‘0‘);
  1. 让STS实现对lombok的支持,具体方式可参考这里

Druid数据源

Druid的简介

Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池。

集成Druid

  1. 在父项目的pom.xml中,增加如下配置,用于版本号的统一配置
<properties>    <druid.version>1.0.29</druid.version></properties>

 <dependencyManagement>       <dependencies>        <!-- alibaba druid数据源主版本管理  -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>${druid.version}</version>        </dependency>    </dependencies></dependencyManagement>
  1. 在mingx-user微服务的pom.xml中增加mysql驱动依赖以及druid数据源依赖
<!-- Mysql数据库驱动依赖 --><dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId></dependency><!-- 阿里巴巴数据源 --><dependency>    <groupId>com.alibaba</groupId>    <artifactId>druid</artifactId></dependency>
  1. 登录nacos控制台,编辑mingx-user-dev.yml,增加数据源的相关配置。
spring:     datasource:        #数据源基本配置        type: com.alibaba.druid.pool.DruidDataSource        driver-class-name: com.mysql.cj.jdbc.Driver        url: jdbc:mysql://127.0.0.1:3306/mingx_user?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai        username: root        password: root        #数据源其他配置        initialSize: 5        minIdle: 5        maxActive: 20        maxWait: 60000        timeBetweenEvictionRunsMillis: 60000        minEvictableIdleTimeMillis: 300000        validationQuery: SELECT 1 FROM DUAL        testWhileIdle: true        testOnBorrow: false        testOnReturn: false        poolPreparedStatements: true        #配置监控统计拦截的filters,去掉后监控界面sql无法统计,‘wall‘用于防火墙          filters: stat,wall        maxPoolPreparedStatementPerConnectionSize: 20        useGlobalDataSourceStat: true          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

具体druid的的参数配置可以去官网看看

虽然配置了druid连接池的其它属性,但是不会生效。因为默认是使用的java.sql.Datasource的类来获取属性的,有些属性datasource没有。如果我们想让配置生效,需要手动创建Druid的配置文件。

  1. 在main/src/java下创建com.mingx.user.config包,创建DruidConfig.java配置类,具体代码如下:
package com.mingx.user.config;

import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;

import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.support.http.StatViewServlet;import com.alibaba.druid.support.http.WebStatFilter;

/** * DruidConfig配置类 * @author Jonas * */@Configurationpublic class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")    @Bean    public DruidDataSource druidDataSource(){          return new DruidDataSource();    }

    /**     * 配置监控服务器     * @return 返回监控注册的servlet对象     * @author SimpleWu     */    @SuppressWarnings({ "rawtypes", "unchecked" })    @Bean    public ServletRegistrationBean statViewServlet() {        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");        // 添加IP白名单        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");        // 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高        servletRegistrationBean.addInitParameter("deny", "127.0.0.1");        // 添加控制台管理用户        servletRegistrationBean.addInitParameter("loginUsername", "mingx");        servletRegistrationBean.addInitParameter("loginPassword", "123456");        // 是否能够重置数据        servletRegistrationBean.addInitParameter("resetEnable", "false");        return servletRegistrationBean;    }

    /**     * 配置服务过滤器     *     * @return 返回过滤器配置对象     */    @SuppressWarnings({ "rawtypes", "unchecked" })    @Bean    public FilterRegistrationBean statFilter() {        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());        // 添加过滤规则        filterRegistrationBean.addUrlPatterns("/*");        // 忽略过滤格式        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");        return filterRegistrationBean;    }}
  1. 启动mingx-user微服务成功后,浏览器中访问http://127.0.0.1:7001/druid/index,就可以来到druid控制台的登录页面,使用DuridConfig.java中配置的用户名密码mingx/123456登录,可以在控制台中看到数据库相关状况,如下图:

至此集成druid完成

Mybatis-Plus

Mybatis-Plus的介绍

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

我们的愿景是成为 Mybatis 最好的搭档,就像 魂斗罗 中的1P、2P,基友搭配,效率翻倍。

集成Mybatis-Plus

  1. 在父项目的pom.xml中,增加如下配置,用于版本号的统一配置
<properties>    <mybatis-plus.version>3.0.6</mybatis-plus.version></properties>

 <dependencyManagement>       <dependencies>        !-- mybatis-plus主版本管理  -->             <dependency>                <groupId>com.baomidou</groupId>                <artifactId>mybatis-plus-boot-starter</artifactId>                <version>${mybatis-plus.version}</version>            </dependency>    </dependencies></dependencyManagement>
  1. 在mingx-user微服务的pom.xml中增加Mybatis-Plus的依赖及码生成器与模板引擎的依赖
<!-- Mybatis-Plus依赖 --><dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-boot-starter</artifactId></dependency><!-- mybatis-plus代码生成器与模板引擎的依赖  --><dependency>    <groupId>org.freemarker</groupId>    <artifactId>freemarker</artifactId></dependency>
  1. 在com.mingx.user.config包下创建MybatisPlusConfig.java配置类,具体代码如下:
package com.mingx.user.config;

import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

/** * MybatisPlus分页插件 * @author Admin * */@Configuration@MapperScan("com.mingx.user.mapper")public class MybatisPlusConfig {

    /**     *     分页插件     */    @Bean    public PaginationInterceptor paginationInterceptor() {        return new PaginationInterceptor();    }}
  1. 登录nacos控制台,编辑mingx-user-dev.yml,增加Mybatis-Plus的相关配置。
#主键生成策略mybatis-plus:    global-config:        db-config:            id-type: uuid    mapper-locations: classpath:/mapper/*.xml
  1. com.mingx包下创建CodeGenerator.java文件,利用代码生成工具类,将需要的mapper、service、controller进行自动生成。代码如下,注意根据实际情况进行代码中数据源信息的配置
package com.mingx;

import java.util.ArrayList;import java.util.List;import java.util.Scanner;

import org.apache.commons.lang.StringUtils;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.InjectionConfig;import com.baomidou.mybatisplus.generator.config.DataSourceConfig;import com.baomidou.mybatisplus.generator.config.FileOutConfig;import com.baomidou.mybatisplus.generator.config.GlobalConfig;import com.baomidou.mybatisplus.generator.config.PackageConfig;import com.baomidou.mybatisplus.generator.config.StrategyConfig;import com.baomidou.mybatisplus.generator.config.TemplateConfig;import com.baomidou.mybatisplus.generator.config.po.TableInfo;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

/** *     代码生成工具,执行前先确认对应的数据库连接信息 *     执行main方法控制台输入模块表名回车自动生成对应项目目录中 * @author Jonas * */public class CodeGenerator {

 /**  * <p>  * 读取控制台内容  * </p>  */ @SuppressWarnings("resource")public static String scanner(String tip) {     Scanner scanner = new Scanner(System.in);     StringBuilder help = new StringBuilder();     help.append("请输入" + tip + ":");     System.out.println(help.toString());     if (scanner.hasNext()) {         String ipt = scanner.next();         if (StringUtils.isNotEmpty(ipt)) {             return ipt;         }     }     throw new MybatisPlusException("请输入正确的" + tip + "!"); }

 public static void main(String[] args) {     // 代码生成器     AutoGenerator mpg = new AutoGenerator();

     // 全局配置     GlobalConfig gc = new GlobalConfig();     String projectPath = System.getProperty("user.dir");     gc.setOutputDir(projectPath + "/src/main/java");     gc.setAuthor("Jonas");     gc.setOpen(false);     mpg.setGlobalConfig(gc);

     // 数据源配置     DataSourceConfig dsc = new DataSourceConfig();     dsc.setUrl("jdbc:mysql://127.0.0.1:3306/mingx_user?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true");//oa为我自己的数据库     dsc.setDriverName("com.mysql.cj.jdbc.Driver"); //设置数据库驱动,因为我的数据库版本是mysql5.7,所以使用该驱动     dsc.setUsername("root"); //数据库名称     dsc.setPassword("root"); //数据库密码     mpg.setDataSource(dsc);

     // 包配置     PackageConfig pc = new PackageConfig();     pc.setModuleName(scanner("模块名"));     pc.setParent("com.mingx");     mpg.setPackageInfo(pc);

     // 自定义配置     InjectionConfig cfg = new InjectionConfig() {         @Override         public void initMap() {             // to do nothing         }     };

     // 如果模板引擎是 freemarker     String templatePath = "/templates/mapper.xml.ftl";     // 如果模板引擎是 velocity     // String templatePath = "/templates/dao.xml.vm";

     // 自定义输出配置     List<FileOutConfig> focList = new ArrayList<>();     // 自定义配置会被优先输出     focList.add(new FileOutConfig(templatePath) {         @Override         public String outputFile(TableInfo tableInfo) {             // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!             return projectPath + "/src/main/resources/mapper/"                      + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;         }     });     cfg.setFileOutConfigList(focList);     mpg.setCfg(cfg);

     // 配置模板     TemplateConfig templateConfig = new TemplateConfig();

     // 配置自定义输出模板     //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别     // templateConfig.setEntity("templates/entity2.java");     // templateConfig.setService();     // templateConfig.setController();

     templateConfig.setXml(null);     mpg.setTemplate(templateConfig);

     // 策略配置     StrategyConfig strategy = new StrategyConfig();     strategy.setNaming(NamingStrategy.underline_to_camel);     strategy.setColumnNaming(NamingStrategy.underline_to_camel);     //strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");     strategy.setEntityLombokModel(true);     strategy.setRestControllerStyle(true);     // 公共父类     //strategy.setSuperControllerClass("com.mingx.common.controller.BaseController");     // 写于父类中的公共字段     //strategy.setSuperEntityColumns("id");     strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));     strategy.setControllerMappingHyphenStyle(true);     strategy.setTablePrefix(pc.getModuleName() + "_");     mpg.setStrategy(strategy);     mpg.setTemplateEngine(new FreemarkerTemplateEngine());     mpg.execute(); }

}
  1. 在CodeGenerator.java中右击--run as --Java Application执行,在控制台输入模块名称user,输入生成代码对应的数据库表名sys_user,回车执行代码生成操作。

  2. 刷新项目,可以发现包下生成了相应代码,之前提到的mingx-user-pojo微服务是专为用于放pojo类的,所以可以将com.mingx.user.entity下生成的实体类抽离出来。
    创建mingx-user-pojo微服务项目,按照之前创建mingx-user步骤一样,修改pojo项目下的pom.xml文件,进行如下设置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <parent>    <groupId>com.mingx</groupId>    <artifactId>mingx-demo</artifactId>    <version>0.0.1-SNAPSHOT</version>  </parent>  <groupId>com.mingx.user</groupId>  <artifactId>mingx-user-pojo</artifactId>  <packaging>jar</packaging>

  <dependencies>         <!-- lombok依赖  -->       <dependency>           <groupId>org.projectlombok</groupId>           <artifactId>lombok</artifactId>           <optional>true</optional>       </dependency>  </dependencies>

</project>
  1. 在mingx-user-pojo微服务src/main/java目录下创建com.mingx.entity包,将生成的实体类放入该包下。
    在mingx-user项目中删除com.mingx.entity包,并在pom.xml文件中需要将mingx-user-pojo引入。
    在标签下增加:
<dependency>   <groupId>com.mingx.user</groupId>     <artifactId>mingx-user-pojo</artifactId>   <version>0.0.1-SNAPSHOT</version></dependency>
  1. 在mingx-user微服务中,在生成的SysUserController.java控制类中,增加查询数据库用户的方法,进行数据库查询操作,来验证是否正常与数据库建立联系。
@RestController@RequestMapping("/user")public class SysUserController {

    @Autowired    private ISysUserService sysUserService;

    @GetMapping("/queryUserById")    public String queryUserById(String userId) {

        return sysUserService.getById(userId).toString();

    }}
  1. 启动mingx-user微服务,在浏览器中访http://127.0.0.1:7001/user/queryUserById?userId=1,查看响应结果。

至此整合Mybatis-Plus以及代码生成功能已经实现。

结束语

本章主要介绍Springboot整合Mybatis-Plus,以及代码生成工具的使用,少了一些理论相关的内容,更多的是代码上的实际操作,实用性比较多一些。

其实对于Mybatis-Plus实际的运用,CURD操作,特别是查询,需要你去官网进一步的了解,在实际的业务开发中肯定是会用到的。

下一章介绍统一入参校验,统一的响应,统一异常处理,对于一个对外提供服务的接口来说,这是必不可少的要求。

点关注,不迷路

微信搜索【寻的足迹】关注公众号,第一时间收到最新文章

原文地址:https://www.cnblogs.com/conswin/p/12358258.html

时间: 2024-10-09 15:50:12

SpringCloud微服务架构搭建--Mybatis-Plus(三)的相关文章

Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们应该如何进行网络请求的优化与处理呢? 到底有没有一些好的建议与方案呢? 下面这个文章将揭晓上面的问题,让你对SpringCloud微服务网络请求性能有一个全新的认识. 目录简介 01.网络请求异常分类 02.开发中注意问题 03.原始的处理方式 04.如何减少代码耦合性 05.异常统一处理步骤 06

基于SpringCloud 微服务架构下 广告系统设计与实现完整教程

var link="www.marenzy.top"//完整视频资源获取地址,复制链接在浏览器打开 var vx="aishangit666"//如链接失效可添加微信 基于Spring Cloud微服务架构 广告系统设计与实现 广告系统是互联网公司中的必备知识体系,但是关于怎样设计.实现广告系统的资料.课程却非常稀少 .本课程将从零开始逐步实现广告系统中最为核心的两个模块:广告投放系统与广告检索系统,并测试它们的可用性,让你在实战中学习广告系统的设计思想,实现方法,

(三)springcloud - 微服务架构代码结构

我们根据微服务化设计思想,结合spring cloud本身的服务发现.治理.配置化管理.分布式等项目优秀解决方案,我们使用Maven技术将框架进行模块化.服务化.原子化封装,也为后期的热插拔.持续集成做一些准备工作. particle云架构使用maven来构建的,使用maven不仅仅是jar包的管控,重要的是要抓住maven的一个核心作用,那就是将整个项目按照模块化的方式进行划分,业务与业务之间解耦,然后将模块化的业务再进行服务化或者组件化,这样可以进行任意的项目或者平台的业务移植.最后还要考虑

基于SpringCloud 微服务架构下 广告系统设计与实现

第1章 课程简介本章对这门课程进行说明,包括:广告系统的介绍.课程使用的技术介绍.课程的学习规划等. 第2章 广告系统概览与准备工作本章会介绍广告系统的思想.广告系统的技术实现架构.学习本课程之前的准备工作和广告系统的代码目录结构. 第3章 广告系统骨架开发广告系统使用SpringCloud微服务框架开发,并使用Maven做多模块管理.这一章完成项目骨架的开发,包括搭建注册中心和服务网关,同时也会对Maven的重要特性做介绍. 第4章 微服务通用模块开发本章实现广告系统微服务通用的功能,例如:统

构建SpringBoot,SpringCloud微服务架构分布式电商项目实战

Spring Cloud 微服务总体架构图 上面图中技术名词理解: 1.Sleuth-链路跟踪 为服务之间调用提供链路追踪.通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长.从而让我们可以很方便的理清各微服务间的调用关系. 2.断路器(Hystrix) 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务通常会集群

SpringCloud微服务架构第三篇

原文链接:https://www.javazhiyin.com/5130.html 微服务开发专栏:https://www.javazhiyin.com/category/springcloud Ribbon是什么? Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等.

微服务架构 ------ 插曲 Mybatis逆向工程

1.首先是pom.xml, 我们需要引入需要的mvn插件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m

Springboot/Springclound微服务架构

1.   什么是微服务? 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务之间是松耦合的,同时微服务之间,通常是采用轻量级的基于 HTTP 的 RESTful API通信机制互相沟通,互相配合.每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境. 2.   微服务有什么特点? (1).复杂度可控 在将应用分解的同时,规避了原本复杂度无止境的积累.每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界.由于体积小.复杂度低,每个微服务可由

Devops微服务架构下具有代码级穿透能力的精准测试

微服务是Devops场景下热门的开发框架,在大型项目中被广泛采用.它把一个大型的单个应用程序和服务拆分为数十个的支持微服务,独立部署.互相隔离,通过扩展组件来处理功能瓶颈问题,比传统的应用程序更能有效利用计算资源.微服务之间无需关心对方的模型,它通过事先约定好的接口进行数据流转,使业务可以高效响应市场变化.但微服务一个明显的表象就是随着服务的增多,传统的测试模式受到很大制约,无法有效进行下去,威胁到整体系统质量.所有J2EE代码层白盒采集工具都无法区分覆盖和具体功能的对应关系,只能以后台模式"笼