GVKun编程网logo

springboot+swagger2.10.5+mybatis-plus 入门详解(springboot mybatis generator)

9

如果您想了解springboot+swagger2.10.5+mybatis-plus入门详解和springbootmybatisgenerator的知识,那么本篇文章将是您的不二之选。我们将深入剖析

如果您想了解springboot+swagger2.10.5+mybatis-plus 入门详解springboot mybatis generator的知识,那么本篇文章将是您的不二之选。我们将深入剖析springboot+swagger2.10.5+mybatis-plus 入门详解的各个方面,并为您解答springboot mybatis generator的疑在这篇文章中,我们将为您介绍springboot+swagger2.10.5+mybatis-plus 入门详解的相关知识,同时也会详细的解释springboot mybatis generator的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

springboot+swagger2.10.5+mybatis-plus 入门详解(springboot mybatis generator)

springboot+swagger2.10.5+mybatis-plus 入门详解(springboot mybatis generator)

这篇文章主要介绍了springboot+swagger2.10.5+mybatis-plus 入门,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

目录

springboot简介:

1.最大优势:简化配置

2.将原始的 tomcat 等 web 容器默认引入,不需要配置 web 容器

开始简单搭建:

0.所属环境:

1.jdk环境,

2.开发工具 idea

3.maven 环境,

1.开始搭建项目

2.对 swagger-ui 2.10.5 的引入

最新idea2020安装部署超详细教程

懂得懂的

2020.3

2020.2.4

2020.2.3

2020.2.2

20.2.1

2019.3

2018.3

最新2020永久

springboot简介:

个人对springboot的一点小的理解:

1.最大优势:简化配置

区别于传统的 MVC 模式,对于配置进行了大量的简化,魔鬼注解:SpringBootApplication 中包含了的注解

@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan

基本包含了传统项目启动所需要的注解

2.将原始的 tomcat 等 web 容器默认引入,不需要配置 web 容器

2020-12-23 14:56:23.683 INFO 11124 --- [main] c.l.d.DataStandardApplication : The following profiles are active: dev 2020-12-23 14:56:24.871 INFO 11124 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2020-12-23 14:56:24.877 INFO 11124 --- [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]

可以看出 默认选取 tomcat 为 web 启用容器。

开始简单搭建:

0.所属环境:

1.jdk环境,

在cmd后天输入: java -version 查看是否为jdk1.8版本以上(个人建议1.8,目前稳定版本有1.8 1.11和1.14 版本)

C:Usershzp>java -version java version "1.8.0_251" Java(TM) SE Runtime Environment (build 1.8.0_251-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

如果没有出现,可以到 oracle 官网下载 jdk,官网地址:JDK官网下载地址,但是需要 oracle 账号,当然你可以直接从我的网盘下载:

Linux系统jdk1.8网盘地址,

链接: https://pan.baidu.com/s/1IS0e-rSleFzW5YHo0aTMPw

提取码: ktmd

windows 系统jdk1.8网盘地址,

链接: https://pan.baidu.com/s/1RGThC5gvbX3LjHA3nc8pHQ

提取码: d23k

可以自行百度进行jdk安装和配置,此处不做详细介绍。

2.开发工具 idea

去官网下载,建议下载低2个大版本的,因为网上pojie版本很少找到新版本pojie的方法。

下载地址:idea下载地址

建议下载一个版本的 idea 如图:

目前版本为2020.3,建议选择版本为 2020.2及以后版本

3.maven 环境,

建议安装一下 maven 环境,便于从国内镜像地址 aliyun 下载。

下载 maven 的地址,建议下载 3.6.1maven3下载地址

安装 maven 进行配置(此处不做详细介绍)

配置完成后在终端输入: mvn -v

C:Usershzp>mvn -v Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: H:apache-maven-3.6.3bin.. Java version: 1.8.0_251, vendor: Oracle Corporation, runtime: H:Javajdk1.8.0_251jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

对 settings.xml 进行配置(我的maven在F盘,H:apache-maven-3.6.3conf 为settings),将mirrors替换如下,详细配置如下:

aliyunmaven*阿里云公共仓库https://maven.aliyun.com/repository/centralnexus-aliyuncentralNexus aliyunhttps://maven.aliyun.com/repository/publicaliyunmaven*阿里云spring插件仓库https://maven.aliyun.com/repository/spring-pluginrepo2Mirror from Maven Repo2https://repo.spring.io/plugins-release/central

打开 idea 从 左上角 file 中找到 Settings 对 maven 进行配置,如图:

1.开始搭建项目

1.打开idea,找到最左边的 file ,点击file,然后选择 new ,再选择右边的 Project ,如下图:

选择后出现如下图片:

点击选择红色方框:

点击next进行下一步选择:

选择后点击 Next 下一步:

按照图片显示的方法进行选择开发所需要的依赖,点击 next .进行project名称的选择,也可以选择直接点击 finish,如图:

项目的初步架子已经搭建起来了。

2.等待项目从aliyun下载依赖。

大概要等待 1-3分钟,根据自己的网络快慢决定。

1.出现的 pom.xml 如下图所示:

1.8org.springframework.bootspring-boot-starter-webMysqLmysql-connector-javaruntimeorg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engine

此时的以来主要文件,下面引入 mybatis-plus 3.3.2 版本:

com.baomidoumybatis-plus-boot-starter3.3.2

将上面的文件复制放入到 MysqL 依赖后面(主要是放在dependencies里面都可以)

然后安装官网给定的分页配置,在文件中建立一个config ,结构如图:

再创建一个MybatisPlusConfig.java,具体代码如下:

import com.baomidou.mybatisplus.core.injector.DefaultsqlInjector; import com.baomidou.mybatisplus.core.injector.IsqlInjector; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; import org.springframework.context.annotation.Bean; /** * @author hzp */ public class MybatisPlusConfig { /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false // paginationInterceptor.setoverflow(false); // 设置最大单页限制数量,默认 500 条,-1 不受限制 // paginationInterceptor.setLimit(500); // 开启 count 的 join 优化,只针对部分 left join paginationInterceptor.setCountsqlParser(new JsqlParserCountOptimize(true)); return paginationInterceptor; } }

添加后完成了 mybatis-plus 的分页插件。

2.对 swagger-ui 2.10.5 的引入

首先在 pom.xml 文件中的 properties 下引入 2.10.5

1.82.10.5

再在po.xml 文件中的 dependencies 文件中引入一下配置:

io.springfoxspringfox-swagger2${swagger.version}io.springfoxspringfox-swagger-ui${swagger.version}io.swaggerswagger-annotationsio.swaggerswagger-modelsio.swaggerswagger-annotations1.5.21io.swaggerswagger-models1.5.21io.springfoxspringfox-spring-webmvc2.10.5

为什么要先剔除 swagger-annotations 和 swagger-models ,再引入它们,可以看看另一个链接:springboot使用 swagger-ui 2.10.5 有关版本更新带来的问题

当然为什么要引入: springfox-spring-webmvc 2.10.5 也可以看看上面这个链接。

引入依赖后,在config 包下创建一个 SwaggerConfig.java 文件:

import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; /** * @author hzp * @date 2020.12.05 */ @EnableSwagger2WebMvc @Configuration public class SwaggerConfig { @Value("${swagger.enabled}") private Boolean enabled; @Bean @SuppressWarnings("all") public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .enable(enabled) .apiInfo(apiInfo()) .pathMapping("/") .select() .apis(RequestHandlerSelectors.basePackage("com.example.hzp.demo.web")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("app 接口文档") .description("后台登录") .version("1.0") .build(); } }

添加 druid 如下面所示:

1.82.10.51.1.17

添加 druid依赖:

com.alibabadruid-spring-boot-starter${druid.version}

然后建立一个 web 包,结构如下:

成初步的TestController.java 编写,如下图所示:

TestController.java

文件如下:

import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @author hzp */ @RestController @Api(tags = "Test") public class TestController { @ApiOperation(value = "测试", httpMethod = "GET") @GetMapping("/hello") public String testController(){ return "hello,world!"; } }

完善application.yml 文件如下:

server: port: 8088 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.MysqL.cj.jdbc.Driver url: jdbc:MysqL://loaclhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: 123456 druid: initial-size: 5 #连接池初始化大小 min-idle: 10 #最小空闲连接数 max-active: 20 #最大连接数 # web-stat-filter: # exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据 stat-view-servlet: #访问监控网页的登录用户名和密码 login-username: druid login-password: druid #是否开启 swagger-ui swagger: enabled: true mybatis-plus: # 如果是放在src/main/java目录下 classpath:/com/*/*/mapper/*Mapper.xml # 如果是放在resource目录 classpath:/mapper/**.xml mapper-locations: classpath:/mapper/**.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

记住一定要有数据库连接哟,这要的话 中间的 druid 等引入起来比较方便。

启动项目后如图所示:

当然你也可以直接使用 链接进行访问:

localhost:8088/test 出现如图所示:

至此,整个介绍基本完成,后续会上传代码到 git 上,感谢您的观看。

到此这篇关于springboot+swagger2.10.5+mybatis-plus 入门的文章就介绍到这了,更多相关springboot swagger2.10.5 mybatis-plus 入门内容请搜索小编以前的文章或继续浏览下面的相关文章希望大家以后多多支持小编!

Mybatis 插件之 Mybatis-Plus(SpringBoot)

Mybatis 插件之 Mybatis-Plus(SpringBoot)

这边只在 SpringBoot 下进行简单查询的测试,接下来会博客会介绍增删改的操作。

 

数据库表结构如下:

开始测试:

1、新建工程(trymp_springboot)并把项目结构建立好

2、导入 pom.xml 的依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>
    <dependencies>
        <!--测试的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--mysql驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!--日志依赖-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
        <!--Druid数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.20</version>
        </dependency>
    </dependencies>

3、日志文件(log4j.properties)配置如下:

log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.Al.layout.ConversionPattern=[%t] [%c]-[%p]  %m%n

4、SpringBoot 核心配置文件(application.yml),如下:

server:
  port: 8080
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql:///chw?CharacterEncoding=utf8
      username: root
      password: root

5、Mapper 接口内容如下:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jieku.pojo.User;

public interface UserMapper extends BaseMapper<User> {
}

6、实体类内容如下:

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@TableName("tb_user")
public class User {
    @TableId(type = IdType.AUTO) // 需要指定,否则无法新增后拿到回调的id,以及进行删除等操作
    private Integer uid;
    private String uname;
    private Integer age;

    public User(String uname, Integer age) {
        this.uname = uname;
        this.age = age;
    }
}

7、启动类内容如下:

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.jieku.mapper") // 设置mapper接口的扫描路径
public class MPApplication {
    public static void main(String[] args) {
        SpringApplication.run(MPApplication.class);
    }
}

 

8、测试类内容如下:

import com.jieku.mapper.UserMapper;
import com.jieku.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest // SpringBoot的测试
public class TestMPSpringboot {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void test01(){
        // 1.进行查询
        List<User> users = userMapper.selectList(null);
        // 2.遍历打印输出
        for (User user : users) {
            System.out.println(user);
        }
    }
}

9、运行结果如下:

至此,简单查询测试结束!

MyBatis(1)( springboot+mybatis plus)

MyBatis(1)( springboot+mybatis plus)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、 mybatisplus 是什么?
    • 1.简介
    • 2.特征
  • 二、框架
  • mybatisplus 入门例子 (官网的例子)
  • mybatisplus 自动代码生成
  • mybatisplus提供的service和dao接口
    • swagger及测试


前言

一、 mybatisplus 是什么?

1.简介

为简化开发而生,简化mybatis单表CRUD过程,只做增强不做改变,自动代码生成,自动分页。 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2.特征

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MysqL、MariaDB、Oracle、DB2、H2、Hsql、sqlite、Postgre、sqlServer 等多种数据库
  • 内置性能分析插件:可输出 sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

二、框架

在这里插入图片描述

mybatisplus 入门例子 (官网的例子)

  1. 创建表
DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
  1. 引jar
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
<relativePath/>
</parent>
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <!--mybatisplus核心包-->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.5.0</version>
    </dependency>
    <!-- MysqL驱动包 -->
    <dependency>
      <groupId>MysqL</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>

    <!-- lombok 简化实体类写法  日志功能支持-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.22</version>
      <scope>provided</scope>
    </dependency>
  1. 编写application.yml配置
# DataSource Config
spring:
  datasource:
    driver-class-name: com.MysqL.jdbc.Driver
   # schema: classpath:db/schema-h2.sql
   # data: classpath:db/data-h2.sql
    url: jdbc:MysqL://localhost:3306/tab_account?serverTimezone=GMT%2B8&yesSSL=false
    username: root
    password: '04161220' 
# 注意如果密码是全数字的话 加 引号
  1. 实体
package com.aaa.sbmp.entity;

import lombok.Data;

/**
 * @author zhangyifan
 * @version 8.0
 * @description:
 * @date 2022/1/14 9:56
 */
@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
  1. mapper
package com.aaa.sbmp.mapper;

import com.aaa.sbmp.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * @author zhangyifan
 * @version 8.0
 * @description:
 * @date 2022/1/14 9:56
 */
public interface UserMapper extends BaseMapper<User> {
}

  1. 启动类
package com.aaa.sbmp;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @author zhangyifan
 * @version 8.0
 * @description:
 * @date 2022/1/14 9:50
 */
@SpringBootApplication
@MapperScan("com.aaa.sbmp.mapper")
//@EnableSwagger2
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

  1. 测试类(注意测试类和启动类需要包名称一致)
package com.aaa.sbmp;

import com.aaa.sbmp.entity.User;
import com.aaa.sbmp.mapper.UserMapper;
import org.junit.jupiter.api.Test;
//import org.junit.Test;
import org.springframework.util.Assert;
import org.springframework.boot.test.context.SpringBoottest;
import javax.annotation.Resource;
import java.util.List;

/**
 * @author zhangyifan
 * @version 8.0
 * @description:
 * @date 2022/1/14 9:58
 */
//
@SpringBoottest
public class SampleTest {
    @Resource
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        List<User> userList = userMapper.selectList(null);
        //断言 不空继续 空就不执行
        Assert.notNull(userList, "为空");

        //jdk 8 新特性   System.out::println      执行类::方法
        userList.forEach(System.out::println);
    }
}

结果

在这里插入图片描述

mybatisplus 自动代码生成

在上面的基础写的

  1. jar包

     <!--mybatisplus 代码生成器包-->
      <dependency>
     <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generator</artifactId>
      <version>3.5.1</version>
     </dependency>
      <!--默认前端引擎包 不加生成时会报错-->
      <dependency>
     <groupId>org.apache.veLocity</groupId>
      <artifactId>veLocity-engine-core</artifactId>
    <version>2.3</version>
     </dependency>
  1. 代码
 package com.aaa.sbmp;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;

import java.util.Collections;

/**
 * @author zhangyifan
 * @version 8.0
 * @description: 生成器
 * @date 2022/1/16 14:04
 */
public class AutoCodeGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:MysqL://localhost:3306/tab_account?serverTimezone=GMT%2B8&yesSSL=false","root","04161220").
                globalConfig(builder -> {
                    builder.author("zy")// 设置作者
                            .enableSwagger()// 开启 swagger 模式
                            .fileOverride() //覆盖已生成文件
                            .outputDir("G:\\java\\idea_2qi\\springboot_mybatisplus_demo_20220114\\src\\main\\java"); //指定输出目录
                }).packageConfig(builder -> {//包配置
                    builder.parent("com.aaa")//设置父包名
                            .moduleName("sbmp")//设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,
                                    "G:\\java\\idea_2qi\\springboot_mybatisplus_demo_20220114\\src\\main\\resources\\mapper"));
                }).strategyConfig(builder -> {
                    builder.addInclude("tb_dept","sys_menu")//设置需要生成的表名
                            .addTablePrefix("tb_", "sys_");// 设置过滤表前缀
                })
        //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是VeLocity引擎模板 可以生成前端引擎
                .execute();


    }
}
 

mybatisplus提供的service和dao接口

官网

  1. 配置mybatisplus 分页插件
package com.aaa.sbmp.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author zhangyifan
 * @version 8.0
 * @description: 分页插件
 * @date 2022/1/16 14:31
 */
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
        return interceptor;
    }
}

  1. 编写分页带参查询代码,学习QueryWrapper用
    官网
package com.aaa.sbmp.service.impl;

import com.aaa.sbmp.entity.Dept;
import com.aaa.sbmp.mapper.DeptMapper;
import com.aaa.sbmp.service.IDeptService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.Metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.util.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zy
 * @since 2022-01-16
 */
@Service
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {

    @Resource
    private DeptMapper deptMapper;
    @Override
    public IPage<Dept> queryPage(Map map) {
        //分页参数设置
        IPage<Dept> page = new Page<>();
        //设置当前页码  第几页
        page.setCurrent(Long.valueOf(map.get("pageNo")+""));
        //设置每页显示条数
        page.setSize(Long.valueOf(map.get("pageSize")+""));
        //查询封装类
        QueryWrapper queryWrappe = new QueryWrapper();
        //使用加各种参数
        // if(map.get("deptName")!=null&&!map.get("deptName").equals("")){
        if (!StringUtils.isEmpty(map.get("deptName"))){
            queryWrappe.like("dname",map.get("deptName"));
        }
        if (!StringUtils.isEmpty(map.get("loc"))){
            queryWrappe.like("loc",map.get("loc"));
        }
        return deptMapper.selectPage(page,queryWrappe);
    }
}

  1. controller
package com.aaa.sbmp.controller;


import com.aaa.sbmp.entity.Dept;
import com.aaa.sbmp.service.IDeptService;
import com.aaa.sbmp.util.Result;
import org.springframework.web.bind.annotation.*;

import org.springframework.stereotype.Controller;

import javax.annotation.Resource;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zy
 * @since 2022-01-16
 */
@Controller
@RequestMapping("/sbmp/dept")
public class DeptController extends BaseController{
    @Resource
    private IDeptService iDeptService;

    /**
     * 添加
     * @param dept
     * @return
     */
    @PostMapping("/add")
    public Result add(@RequestBody Dept dept){
    return success(iDeptService.save(dept));
    }
    /**
     * 修改
     * @param dept
     * @return
     */
    @PutMapping("/update")
    public Result update(@RequestBody Dept dept){
        return success(iDeptService.saveOrUpdate(dept));
    }
    /**
     * 删除
     * @param depNO
     * @return
     */
    @DeleteMapping("/deleteById")
    public Result delete(Integer depNO){
        return success(iDeptService.removeById(depNO));
    }

    /**
     * 分页带查询方法
     * @param map
     * @return
     */
    @GetMapping("page")
    public Result page(@RequestBody Map map){
        return success(iDeptService.queryPage(map));
    }
}


swagger及测试

http://localhost:8080/swagger-ui.html

  1. jar
    注意:最新版本spring-boot 3.6.2整合swagger任何版本都会报空指针,降低springboot版本为3.5.7
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.9.2</version>
    </dependency>
    <!-- springfox-swagger-ui -->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.9.2</version></dependency>
  1. 代码
package com.aaa.sbmp.config;

import org.springframework.context.annotation.Bean;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * @author zhangyifan
 * @version 8.0
 * @description:
 * @date 2022/1/16 15:35
 */
public class SwaggerConfig {
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                // .qnable(false) //swagger 设置不能访问
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.aaa.sbmp.controller"))
                //路劲过滤
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("\"Spring Boot中使用Swagger2构建springboot+mybatisplus\"")
                .description("更多请关注https://blog.csdn.net/qq_45438019?spm=1000.2115.3001.5343")
                .termsOfServiceUrl("http://www.baidu.com")
                .contact(new Contact("AAA","https://blog.csdn.net/qq_45438019?spm=1000.2115.3001.5343","123@qq.com"))
                .version("1.0")
                .build();
    }
}

  1. 启动类
package com.aaa.sbmp;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @author zhangyifan
 * @version 8.0
 * @description:
 * @date 2022/1/14 9:50
 */
@SpringBootApplication
@MapperScan("com.aaa.sbmp.mapper")
@EnableSwagger2
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Spring Boot 、mybatis 、swagger 和 c3p0 整合

Spring Boot 、mybatis 、swagger 和 c3p0 整合

文件路径如下

添加依赖

<?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://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>wonder</groupId>
    <artifactId>skyRainbow</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>

        <!--spring boot 的依赖 START-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--spring boot 的依赖 END-->

        <!--mybatis 的依赖 START-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!--mybatis 的依赖 END-->

        <!--mysql 的依赖 START-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--mysql 的依赖 END-->

        <!--jsp 的依赖 START-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <!--jsp 的依赖 END-->

        <!--swagger 的依赖 START-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!--swagger 的依赖 END-->

        <!--c3p0 的依赖 START-->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <!--c3p0 的依赖 END-->

    </dependencies>

    <build>
        <!--配置文件读取路径-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

添加 swagger 启动配置文件和 c3p0 加载文件

package lf.config;


import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration
public class DatasourceConfiguration {

    @Bean(name = "dataSource")
    @Qualifier(value = "dataSource")
    @Primary
    @ConfigurationProperties(prefix = "c3p0")
    public DataSource dataSource()
    {
        return DataSourceBuilder.create().type(com.mchange.v2.c3p0.ComboPooledDataSource.class).build();
    }
}
package lf.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api_lf(){
        return  new Docket(DocumentationType.SWAGGER_2)
                .groupName("api_lf")
                .genericModelSubstitutes(DeferredResult.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(false)
                .pathMapping("/")
                .select()
                .paths(or(regex("/lf/.*")))
                .build()
                .apiInfo(apiInfo());

    }

    /**
     *  构建api文档详细信息
     */
    private ApiInfo apiInfo() {
        ApiInfo apiInfo = new ApiInfo(
                "甘雨路 API",// 标题
                "API 描述说明",//描述
                "1.0",//版本
                "NO terms of service",
                "lf@qq.com",// 创建人
                "The Apache License, Version 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0.html"
        );
        return apiInfo;
    }



}

添加控制层

package lf.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import lf.entity.BsdUser;
import lf.service.BsdUserSerive;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.annotation.Resource;
import java.util.Date;

@Controller
@RequestMapping(value="${modulePath}/page")
@Api(description = "页面跳转控制器")
public class PageController {
    @Resource
    private BsdUserSerive userSerive;
    /**
     * 进入公司主页
     */
    @RequestMapping(value = "/company",method = RequestMethod.GET)
    public String gotoCompanyPage(Model model,@RequestParam @ApiParam("用户id") Long id){
        BsdUser user = userSerive.getUserById(id);
        model.addAttribute("time",new Date());
        model.addAttribute("loginName",user.getName());
        return "main";
    }

}
package lf.controller;

import io.swagger.annotations.*;
import lf.entity.BsdUser;
import lf.entity.utils.CommonDTO;
import lf.service.BsdUserSerive;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

@Api(description = "用户控制器")//swagger注解用于类
@Controller // 控制器注解
@RequestMapping(value="${modulePath}/user")
public class UserController {

    @Resource
    private BsdUserSerive userSerive;

    @ResponseBody
    @RequestMapping(value = "/info",method = RequestMethod.GET)
    public CommonDTO<BsdUser> getUserbyId(@RequestParam @ApiParam("用户id") Long id){
        CommonDTO<BsdUser> detailDTO = new CommonDTO<>(0,1);
        try {
            BsdUser user = userSerive.getUserById(id);
            detailDTO.setData(user);
        } catch (Exception e) {
            e.printStackTrace();
            detailDTO.setStatus(1);
            detailDTO.setCode(400);
            detailDTO.setMsg("获取用户信息异常:"+e.getMessage());

        }

        return detailDTO;
    }


}

添加 service 层

package lf.service;

import lf.entity.BsdUser;


public interface BsdUserSerive {
    /**
     * 根据用户id获取用户
     * @param id
     * @return
     */
    public BsdUser getUserById(Long id);
}

添加 service 的实现层

package lf.service.impl;

import lf.entity.BsdUser;
import lf.mapper.BsdUserMapper;
import lf.service.BsdUserSerive;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;


@Service
public class BsdUserSeriveImpl implements BsdUserSerive{

    @Autowired
    private BsdUserMapper userMapper;
    /**
     * 根据用户id获取用户信息
     * @param id
     * @return
     */
    @Override
    public BsdUser getUserById(Long id) {
        return userMapper.getUserById(id);
    }
}

添加实体类

package lf.entity.utils;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.Map;

/**
 * 详情Dto
 * @param <T>
 */
@ApiModel(description = "详情DTO")
public class CommonDTO<T>{

    @ApiModelProperty(value = "提示信息")
    private String msg;

    @ApiModelProperty(value = "0 代表无错误 1代表有错误")
    private Integer status;

    @ApiModelProperty(value = "总记录")
    private Integer total;

    @ApiModelProperty(value = "业务数据")
    private T data;

    @ApiModelProperty(value = "200 代表无错误 400代表有错误--->加入这个字段是原生需求")
    private Integer code;


    @ApiModelProperty(value = "当前页码")
    private Integer pageNo = 1;

    @ApiModelProperty(value = "当前页码,默认:10")
    private Integer pageSize = Integer.valueOf(10); // 页面大小,设置为“-1”表示不进行分页(分页无效)

    @ApiModelProperty(value = "总记录数")
    private long totalSize;// 总记录数,设置为“-1”表示不查询总数



    private Map<String,Object> DataMap;

    public CommonDTO(Integer status) {
        if (status == 0){
            this.status = status;
            this.code = 200;
            this.msg = "操作成功";
        }
        this.data = null;
    }




    public CommonDTO(Integer status, Integer total) {
        if (status == 0){
            this.status = status;
            this.code = 200;
            this.msg = "操作成功";
        }
        this.data = null;
        this.total = total;
    }

    public Map<String, Object> getDataMap() {
        return DataMap;
    }

    public void setDataMap(Map<String, Object> dataMap) {
        DataMap = dataMap;
    }

    public Integer getCode() {return code;}

    public void setCode(Integer code) {this.code = code;}

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }


    public Integer getPageNo() {
        return (pageNo!=null&&pageNo>0)?pageNo:-1;
    }

    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }

    public Integer getPageSize() {
        return (pageSize!=null&&pageSize>0)?pageSize:10;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }


    /**
     * 获取设置总数
     * @return
     */
    public long getTotalSize() {
        return totalSize;
    }

    /**
     * 设置数据总数
     * @param count
     */
    public void setTotalSize(long totalSize) {
        this.totalSize = totalSize;
        if (pageSize >= totalSize){
            pageNo = 1;
        }
    }


    @Override
    public String toString() {
        return "CommonDTO{" +
                "msg=''" + msg + ''\'''' +
                ", status=" + status +
                ", total=" + total +
                ", data=" + data +
                ''}'';
    }
}
/**
 * create by Administrator
 * @date 2017-09
 */
package lf.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

@ApiModel(description = "用户实体")
public class BsdUser implements Serializable {
    @ApiModelProperty("主键")
    private Long id;
    @ApiModelProperty("组织id")
    private Long orgId;
    @ApiModelProperty("用户类型(0,品牌商1,服务商2,零售商,3客服)")
    private Integer userType;
    @ApiModelProperty("登录名")
    private String loginName;
    @ApiModelProperty("电话")
    private String phone;
    @ApiModelProperty("姓名")
    private String name;
    @ApiModelProperty("简称")
    private String shortName;
    @ApiModelProperty("密码")
    private String password;
    @ApiModelProperty("联系人")
    private String contactUserName;
    @ApiModelProperty("地址")
    private String address;
    @ApiModelProperty("经度")
    private BigDecimal longitude;
    @ApiModelProperty("纬度")
    private BigDecimal latitude;
    @ApiModelProperty("级别(0,普通会员,1,一级会员,2,二级会员,3三级会员,4,四级会员,5,五级会员)")
    private Integer level;
    @ApiModelProperty("状态(0,无效,1有效,2未审核,3审核未通过)")
    private Integer state;
    @ApiModelProperty("银行卡")
    private String bankCard;
    @ApiModelProperty("总积分")
    private Long totalPoints;
    @ApiModelProperty("上级组织id")
    private Long superiorId;
    @ApiModelProperty("创建人id")
    private Long createdBy;
    @ApiModelProperty("最后更新人")
    private Long lastUpdatedBy;
    @ApiModelProperty("创建日期")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createdDate;
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @ApiModelProperty("最后更新日期")
    private Date lastUpdatedDate;
    @ApiModelProperty("软删除标志")
    private Integer removeFlag;
    @ApiModelProperty("图片地址")
    private String imgUrl;
    @ApiModelProperty("消费总金额")
    private BigDecimal totalPaymentAmount;
    @ApiModelProperty("佣金")
    private BigDecimal commission;
    @ApiModelProperty("运费")
    private BigDecimal freight;
    @ApiModelProperty("编号")
    private String code;
    @ApiModelProperty("已经支付定金")
    private Long depositPaid;
    @ApiModelProperty("注册信息附件信息传")
    private String registerAttachmentUrl;
    @ApiModelProperty("支付密码")
    private String payPassWord;
    @ApiModelProperty("钱包余额")
    private BigDecimal balance;
    @ApiModelProperty("现金卷余额")
    private BigDecimal cashRoll;

    private static final long serialVersionUID = 1L;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getOrgId() {
        return orgId;
    }

    public void setOrgId(Long orgId) {
        this.orgId = orgId;
    }

    public Integer getUserType() {
        return userType;
    }

    public void setUserType(Integer userType) {
        this.userType = userType;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code == null ? null : code.trim();
    }

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName == null ? null : loginName.trim();
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone == null ? null : phone.trim();
    }

    public String getShortName() {
        return shortName;
    }

    public void setShortName(String shortName) {
        this.shortName = shortName == null ? null : shortName.trim();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public String getContactUserName() {
        return contactUserName;
    }

    public void setContactUserName(String contactUserName) {
        this.contactUserName = contactUserName == null ? null : contactUserName.trim();
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }

    public BigDecimal getLongitude() {
        return longitude;
    }

    public void setLongitude(BigDecimal longitude) {
        this.longitude = longitude;
    }

    public String getRegisterAttachmentUrl() {
        return registerAttachmentUrl;
    }

    public void setRegisterAttachmentUrl(String registerAttachmentUrl) {
        this.registerAttachmentUrl = registerAttachmentUrl == null ? null : registerAttachmentUrl.trim();
    }

    public BigDecimal getLatitude() {
        return latitude;
    }

    public void setLatitude(BigDecimal latitude) {
        this.latitude = latitude;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }

    public String getImgUrl() {
        return imgUrl;
    }

    public void setImgUrl(String imgUrl) {
        this.imgUrl = imgUrl == null ? null : imgUrl.trim();
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getBankCard() {
        return bankCard;
    }

    public void setBankCard(String bankCard) {
        this.bankCard = bankCard == null ? null : bankCard.trim();
    }

    public BigDecimal getTotalPaymentAmount() {
        return totalPaymentAmount;
    }

    public void setTotalPaymentAmount(BigDecimal totalPaymentAmount) {
        this.totalPaymentAmount = totalPaymentAmount;
    }

    public Long getTotalPoints() {
        return totalPoints;
    }

    public void setTotalPoints(Long totalPoints) {
        this.totalPoints = totalPoints;
    }

    public Long getSuperiorId() {
        return superiorId;
    }

    public void setSuperiorId(Long superiorId) {
        this.superiorId = superiorId;
    }

    public BigDecimal getCommission() {
        return commission;
    }

    public void setCommission(BigDecimal commission) {
        this.commission = commission;
    }

    public BigDecimal getFreight() {
        return freight;
    }

    public void setFreight(BigDecimal freight) {
        this.freight = freight;
    }

    public Long getDepositPaid() {
        return depositPaid;
    }

    public void setDepositPaid(Long depositPaid) {
        this.depositPaid = depositPaid;
    }

    public String getPayPassWord() {
        return payPassWord;
    }

    public void setPayPassWord(String payPassWord) {
        this.payPassWord = payPassWord == null ? null : payPassWord.trim();
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }

    public BigDecimal getCashRoll() {
        return cashRoll;
    }

    public void setCashRoll(BigDecimal cashRoll) {
        this.cashRoll = cashRoll;
    }

    public Long getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(Long createdBy) {
        this.createdBy = createdBy;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    public Long getLastUpdatedBy() {
        return lastUpdatedBy;
    }

    public void setLastUpdatedBy(Long lastUpdatedBy) {
        this.lastUpdatedBy = lastUpdatedBy;
    }

    public Date getLastUpdatedDate() {
        return lastUpdatedDate;
    }

    public void setLastUpdatedDate(Date lastUpdatedDate) {
        this.lastUpdatedDate = lastUpdatedDate;
    }

    public Integer getRemoveFlag() {
        return removeFlag;
    }

    public void setRemoveFlag(Integer removeFlag) {
        this.removeFlag = removeFlag;
    }
}

添加 mapper 层

package lf.mapper;

import lf.entity.BsdUser;
import org.mapstruct.Mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface BsdUserMapper{

    /**
     * 根据用户id获取用户信息
     * @param id
     * @return
     */
    public BsdUser getUserById(Long id);

}

添加 mapper 的 xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="lf.mapper.BsdUserMapper">
  <resultMap id="BsdUserResultMap" type="lf.entity.BsdUser">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="org_id" jdbcType="BIGINT" property="orgId" />
    <result column="user_type" jdbcType="INTEGER" property="userType" />
    <result column="code" jdbcType="VARCHAR" property="code" />
    <result column="login_name" jdbcType="VARCHAR" property="loginName" />
    <result column="phone" jdbcType="VARCHAR" property="phone" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="short_name" property="shortName" jdbcType="VARCHAR" />
    <result column="register_attachment_url" property="registerAttachmentUrl" jdbcType="VARCHAR" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="contact_user_name" jdbcType="VARCHAR" property="contactUserName" />
    <result column="address" jdbcType="VARCHAR" property="address" />
    <result column="longitude" jdbcType="DECIMAL" property="longitude" />
    <result column="latitude" jdbcType="DECIMAL" property="latitude" />
    <result column="level" jdbcType="INTEGER" property="level" />
    <result column="img_url" jdbcType="VARCHAR" property="imgUrl" />
    <result column="state" jdbcType="INTEGER" property="state" />
    <result column="bank_card" jdbcType="VARCHAR" property="bankCard" />
    <result column="total_payment_amount" jdbcType="DECIMAL" property="totalPaymentAmount" />
    <result column="commission" jdbcType="DECIMAL" property="commission" />
    <result column="freight" jdbcType="DECIMAL" property="freight" />
    <result column="total_points" jdbcType="BIGINT" property="totalPoints" />
    <result column="superior_id" jdbcType="BIGINT" property="superiorId" />
    <result column="created_by" jdbcType="BIGINT" property="createdBy" />
    <result column="created_date" jdbcType="TIMESTAMP" property="createdDate" />
    <result column="last_updated_by" jdbcType="BIGINT" property="lastUpdatedBy" />
    <result column="last_updated_date" jdbcType="TIMESTAMP" property="lastUpdatedDate" />
    <result column="remove_flag" jdbcType="INTEGER" property="removeFlag" />
    <result column="deposit_paid" jdbcType="DECIMAL" property="depositPaid" />
    <result column="pay_pass_word" jdbcType="VARCHAR" property="payPassWord" />
    <result column="balance" jdbcType="DECIMAL" property="balance" />
    <result column="cash_roll" jdbcType="DECIMAL" property="cashRoll" />
  </resultMap>
  <sql id="BsdUser_Column_List">
    id, org_id, user_type, code, login_name, phone, name,short_name,register_attachment_url,password, contact_user_name,
    address, longitude, latitude, level, img_url, state, bank_card, total_payment_amount,commission,freight,
    total_points, superior_id, created_by, created_date, last_updated_by, last_updated_date, 
    remove_flag, deposit_paid, pay_pass_word, balance, cash_roll
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BsdUserResultMap">
    select
    <include refid="BsdUser_Column_List" />
    from bsd_user
    where id = #{id}
  </select>

  <select id="getUserById" parameterType="java.lang.Long" resultMap="BsdUserResultMap">
    select
    <include refid="BsdUser_Column_List" />
    from bsd_user
    where id = #{id}
  </select>



</mapper>

添加 springboot 的启动文件

package lf;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;


@SpringBootApplication
@MapperScan("lf.mapper") // mapper层的路径
@PropertySource({"classpath:mybatis.properties",
                 "classpath:c3p0.properties"})// 读取.properties 文件路径
public class SkyRainbowApplication {

    public static void main(String[] args) {
        /**
         * Spring boot 程序入口
         */
        SpringApplication.run(SkyRainbowApplication.class,args);
   }
}

添加 jsp 文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
</head>
<body>

    <h1>欢迎登陆甘雨路主页</h1>
    <div>登陆时间:${time}</div>
    <div>登陆人:${loginName}</div>


</body>
</html>

添加 mybatis 配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>

添加 application.properties 配置文件

# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp

#swagger
modulePath=/lf

添加 c3p0.properties 配置文件

# c3p0 配置
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/bsdmxm?useUnicode=true&characterEncoding=utf8
c3p0.user=bs
c3p0.password=bs17
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.minPoolSize=2
c3p0.maxPoolSize=10
c3p0.maxIdleTime=1800000
c3p0.acquireIncrement=3
c3p0.maxStatements=1000
c3p0.initialPoolSize=3
c3p0.idleConnectionTestPeriod=60
c3p0.acquireRetryAttempts=30
c3p0.acquireRetryDelay=1000
c3p0.breakAfterAcquireFailure=false
c3p0.testConnectionOnCheckout=false

添加 mybits.properties 配置文件

#mybatis 配置
# mybatis xml配置文件的路径
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
# mybatis xml文件的路径
mybatis.mapper-locations=classpath:lf/mapper/xml/*.xml
# 实体类的路径
mybatis.type-aliases-package=lf.entity

 

然后启动程序,在浏览器输入 http://localhost:8080/swagger-ui.html  可查看相关接口

 然后启动程序,在浏览器输入 http://localhost:8080/lf/page/company?id=52  即可

 

然后启动程序,在浏览器输入 http://localhost:8080/lf/user/info?id=51  即可

 

Spring boot 、mybatis 和 swagger 整合

Spring boot 、mybatis 和 swagger 整合

文件路径

添加依赖

<?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://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>wonder</groupId>
    <artifactId>skyRainbow</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>

        <!--spring boot 的依赖 START-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--spring boot 的依赖 END-->

        <!--mybatis 的依赖 START-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!--mybatis 的依赖 END-->

        <!--mysql 的依赖 START-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--mysql 的依赖 END-->

        <!--jsp 的依赖 START-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <!--jsp 的依赖 END-->

        <!--swagger 的依赖 START-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!--swagger 的依赖 END-->

    </dependencies>

    <build>
        <!--配置文件读取路径-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
            <include>**/*.properties</include>
</includes>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

添加 spring boot 启动文件

package lf;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;


@SpringBootApplication
@MapperScan("lf.mapper") // mapper层的路径
@PropertySource({"classpath:mybatis.properties",
                 "classpath:datasource.properties"})// 读取.properties 文件路径
public class SkyRainbowApplication {

    public static void main(String[] args) {
        /**
         * Spring boot 程序入口
         */
        SpringApplication.run(SkyRainbowApplication.class,args);
   }
}

添加 swagger 启动文件

package lf.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api_lf(){
        return  new Docket(DocumentationType.SWAGGER_2)
                .groupName("api_lf")
                .genericModelSubstitutes(DeferredResult.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(false)
                .pathMapping("/")
                .select()
                .paths(or(regex("/lf/.*")))
                .build()
                .apiInfo(apiInfo());

    }

    /**
     *  构建api文档详细信息
     */
    private ApiInfo apiInfo() {
        ApiInfo apiInfo = new ApiInfo(
                "甘雨路 API",// 标题
                "API 描述说明",//描述
                "1.0",//版本
                "NO terms of service",
                "lf@qq.com",// 创建人
                "The Apache License, Version 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0.html"
        );
        return apiInfo;
    }



}

添加控制层

package lf.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import lf.entity.BsdUser;
import lf.service.BsdUserSerive;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.annotation.Resource;
import java.util.Date;

@Controller
@RequestMapping(value="${modulePath}/page")
@Api(description = "页面跳转控制器")
public class PageController {
    @Resource
    private BsdUserSerive userSerive;
    /**
     * 进入公司主页
     */
    @RequestMapping(value = "/company",method = RequestMethod.GET)
    public String gotoCompanyPage(Model model,@RequestParam @ApiParam("用户id") Long id){
        BsdUser user = userSerive.getUserById(id);
        model.addAttribute("time",new Date());
        model.addAttribute("loginName",user.getName());
        return "main";
    }

}
package lf.controller;

import io.swagger.annotations.*;
import lf.entity.BsdUser;
import lf.entity.utils.CommonDTO;
import lf.service.BsdUserSerive;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

@Api(description = "用户控制器")//swagger注解用于类
@Controller // 控制器注解
@RequestMapping(value="${modulePath}/user")
public class UserController {

    @Resource
    private BsdUserSerive userSerive;

    @ResponseBody
    @RequestMapping(value = "/info",method = RequestMethod.GET)
    public CommonDTO<BsdUser> getUserbyId(@RequestParam @ApiParam("用户id") Long id){
        CommonDTO<BsdUser> detailDTO = new CommonDTO<>(0,1);
        try {
            BsdUser user = userSerive.getUserById(id);
            detailDTO.setData(user);
        } catch (Exception e) {
            e.printStackTrace();
            detailDTO.setStatus(1);
            detailDTO.setCode(400);
            detailDTO.setMsg("获取用户信息异常:"+e.getMessage());

        }

        return detailDTO;
    }


}

添加实体类

package lf.entity.utils;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.Map;


@ApiModel(description = "详情DTO")
public class CommonDTO<T>{

    @ApiModelProperty(value = "提示信息")
    private String msg;

    @ApiModelProperty(value = "0 代表无错误 1代表有错误")
    private Integer status;

    @ApiModelProperty(value = "总记录")
    private Integer total;

    @ApiModelProperty(value = "业务数据")
    private T data;

    @ApiModelProperty(value = "200 代表无错误 400代表有错误--->加入这个字段是原生需求")
    private Integer code;


    @ApiModelProperty(value = "当前页码")
    private Integer pageNo = 1;

    @ApiModelProperty(value = "当前页码,默认:10")
    private Integer pageSize = Integer.valueOf(10); // 页面大小,设置为“-1”表示不进行分页(分页无效)

    @ApiModelProperty(value = "总记录数")
    private long totalSize;// 总记录数,设置为“-1”表示不查询总数



    private Map<String,Object> DataMap;

    public CommonDTO(Integer status) {
        if (status == 0){
            this.status = status;
            this.code = 200;
            this.msg = "操作成功";
        }
        this.data = null;
    }




    public CommonDTO(Integer status, Integer total) {
        if (status == 0){
            this.status = status;
            this.code = 200;
            this.msg = "操作成功";
        }
        this.data = null;
        this.total = total;
    }

    public Map<String, Object> getDataMap() {
        return DataMap;
    }

    public void setDataMap(Map<String, Object> dataMap) {
        DataMap = dataMap;
    }

    public Integer getCode() {return code;}

    public void setCode(Integer code) {this.code = code;}

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }


    public Integer getPageNo() {
        return (pageNo!=null&&pageNo>0)?pageNo:-1;
    }

    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }

    public Integer getPageSize() {
        return (pageSize!=null&&pageSize>0)?pageSize:10;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }


    /**
     * 获取设置总数
     * @return
     */
    public long getTotalSize() {
        return totalSize;
    }

    /**
     * 设置数据总数
     * @param count
     */
    public void setTotalSize(long totalSize) {
        this.totalSize = totalSize;
        if (pageSize >= totalSize){
            pageNo = 1;
        }
    }


    @Override
    public String toString() {
        return "CommonDTO{" +
                "msg=''" + msg + ''\'''' +
                ", status=" + status +
                ", total=" + total +
                ", data=" + data +
                ''}'';
    }
}
package lf.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

@ApiModel(description = "用户实体")
public class BsdUser implements Serializable {
    @ApiModelProperty("主键")
    private Long id;
    @ApiModelProperty("组织id")
    private Long orgId;
    @ApiModelProperty("用户类型(0,品牌商1,服务商2,零售商,3客服)")
    private Integer userType;
    @ApiModelProperty("登录名")
    private String loginName;
    @ApiModelProperty("电话")
    private String phone;
    @ApiModelProperty("姓名")
    private String name;
    @ApiModelProperty("简称")
    private String shortName;
    @ApiModelProperty("密码")
    private String password;
    @ApiModelProperty("联系人")
    private String contactUserName;
    @ApiModelProperty("地址")
    private String address;
    @ApiModelProperty("经度")
    private BigDecimal longitude;
    @ApiModelProperty("纬度")
    private BigDecimal latitude;
    @ApiModelProperty("级别(0,普通会员,1,一级会员,2,二级会员,3三级会员,4,四级会员,5,五级会员)")
    private Integer level;
    @ApiModelProperty("状态(0,无效,1有效,2未审核,3审核未通过)")
    private Integer state;
    @ApiModelProperty("银行卡")
    private String bankCard;
    @ApiModelProperty("总积分")
    private Long totalPoints;
    @ApiModelProperty("上级组织id")
    private Long superiorId;
    @ApiModelProperty("创建人id")
    private Long createdBy;
    @ApiModelProperty("最后更新人")
    private Long lastUpdatedBy;
    @ApiModelProperty("创建日期")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createdDate;
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @ApiModelProperty("最后更新日期")
    private Date lastUpdatedDate;
    @ApiModelProperty("软删除标志")
    private Integer removeFlag;
    @ApiModelProperty("图片地址")
    private String imgUrl;
    @ApiModelProperty("消费总金额")
    private BigDecimal totalPaymentAmount;
    @ApiModelProperty("佣金")
    private BigDecimal commission;
    @ApiModelProperty("运费")
    private BigDecimal freight;
    @ApiModelProperty("编号")
    private String code;
    @ApiModelProperty("已经支付定金")
    private Long depositPaid;
    @ApiModelProperty("注册信息附件信息传")
    private String registerAttachmentUrl;
    @ApiModelProperty("支付密码")
    private String payPassWord;
    @ApiModelProperty("钱包余额")
    private BigDecimal balance;
    @ApiModelProperty("现金卷余额")
    private BigDecimal cashRoll;

    private static final long serialVersionUID = 1L;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getOrgId() {
        return orgId;
    }

    public void setOrgId(Long orgId) {
        this.orgId = orgId;
    }

    public Integer getUserType() {
        return userType;
    }

    public void setUserType(Integer userType) {
        this.userType = userType;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code == null ? null : code.trim();
    }

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName == null ? null : loginName.trim();
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone == null ? null : phone.trim();
    }

    public String getShortName() {
        return shortName;
    }

    public void setShortName(String shortName) {
        this.shortName = shortName == null ? null : shortName.trim();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public String getContactUserName() {
        return contactUserName;
    }

    public void setContactUserName(String contactUserName) {
        this.contactUserName = contactUserName == null ? null : contactUserName.trim();
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }

    public BigDecimal getLongitude() {
        return longitude;
    }

    public void setLongitude(BigDecimal longitude) {
        this.longitude = longitude;
    }

    public String getRegisterAttachmentUrl() {
        return registerAttachmentUrl;
    }

    public void setRegisterAttachmentUrl(String registerAttachmentUrl) {
        this.registerAttachmentUrl = registerAttachmentUrl == null ? null : registerAttachmentUrl.trim();
    }

    public BigDecimal getLatitude() {
        return latitude;
    }

    public void setLatitude(BigDecimal latitude) {
        this.latitude = latitude;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }

    public String getImgUrl() {
        return imgUrl;
    }

    public void setImgUrl(String imgUrl) {
        this.imgUrl = imgUrl == null ? null : imgUrl.trim();
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getBankCard() {
        return bankCard;
    }

    public void setBankCard(String bankCard) {
        this.bankCard = bankCard == null ? null : bankCard.trim();
    }

    public BigDecimal getTotalPaymentAmount() {
        return totalPaymentAmount;
    }

    public void setTotalPaymentAmount(BigDecimal totalPaymentAmount) {
        this.totalPaymentAmount = totalPaymentAmount;
    }

    public Long getTotalPoints() {
        return totalPoints;
    }

    public void setTotalPoints(Long totalPoints) {
        this.totalPoints = totalPoints;
    }

    public Long getSuperiorId() {
        return superiorId;
    }

    public void setSuperiorId(Long superiorId) {
        this.superiorId = superiorId;
    }

    public BigDecimal getCommission() {
        return commission;
    }

    public void setCommission(BigDecimal commission) {
        this.commission = commission;
    }

    public BigDecimal getFreight() {
        return freight;
    }

    public void setFreight(BigDecimal freight) {
        this.freight = freight;
    }

    public Long getDepositPaid() {
        return depositPaid;
    }

    public void setDepositPaid(Long depositPaid) {
        this.depositPaid = depositPaid;
    }

    public String getPayPassWord() {
        return payPassWord;
    }

    public void setPayPassWord(String payPassWord) {
        this.payPassWord = payPassWord == null ? null : payPassWord.trim();
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }

    public BigDecimal getCashRoll() {
        return cashRoll;
    }

    public void setCashRoll(BigDecimal cashRoll) {
        this.cashRoll = cashRoll;
    }

    public Long getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(Long createdBy) {
        this.createdBy = createdBy;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    public Long getLastUpdatedBy() {
        return lastUpdatedBy;
    }

    public void setLastUpdatedBy(Long lastUpdatedBy) {
        this.lastUpdatedBy = lastUpdatedBy;
    }

    public Date getLastUpdatedDate() {
        return lastUpdatedDate;
    }

    public void setLastUpdatedDate(Date lastUpdatedDate) {
        this.lastUpdatedDate = lastUpdatedDate;
    }

    public Integer getRemoveFlag() {
        return removeFlag;
    }

    public void setRemoveFlag(Integer removeFlag) {
        this.removeFlag = removeFlag;
    }
}

添加 service 层

package lf.service;

import lf.entity.BsdUser;


public interface BsdUserSerive {
    /**
     * 根据用户id获取用户
     * @param id
     * @return
     */
    public BsdUser getUserById(Long id);
}
package lf.service.impl;

import lf.entity.BsdUser;
import lf.mapper.BsdUserMapper;
import lf.service.BsdUserSerive;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;


@Service
public class BsdUserSeriveImpl implements BsdUserSerive{

    @Autowired
    private BsdUserMapper userMapper;
    /**
     * 根据用户id获取用户信息
     * @param id
     * @return
     */
    @Override
    public BsdUser getUserById(Long id) {
        return userMapper.getUserById(id);
    }
}

添加 mapper 层

package lf.mapper;

import lf.entity.BsdUser;
import org.mapstruct.Mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface BsdUserMapper{

    /**
     * 根据用户id获取用户信息
     * @param id
     * @return
     */
    public BsdUser getUserById(Long id);

}

添加 mapper 的 xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="lf.mapper.BsdUserMapper">
  <resultMap id="BsdUserResultMap" type="lf.entity.BsdUser">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="org_id" jdbcType="BIGINT" property="orgId" />
    <result column="user_type" jdbcType="INTEGER" property="userType" />
    <result column="code" jdbcType="VARCHAR" property="code" />
    <result column="login_name" jdbcType="VARCHAR" property="loginName" />
    <result column="phone" jdbcType="VARCHAR" property="phone" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="short_name" property="shortName" jdbcType="VARCHAR" />
    <result column="register_attachment_url" property="registerAttachmentUrl" jdbcType="VARCHAR" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="contact_user_name" jdbcType="VARCHAR" property="contactUserName" />
    <result column="address" jdbcType="VARCHAR" property="address" />
    <result column="longitude" jdbcType="DECIMAL" property="longitude" />
    <result column="latitude" jdbcType="DECIMAL" property="latitude" />
    <result column="level" jdbcType="INTEGER" property="level" />
    <result column="img_url" jdbcType="VARCHAR" property="imgUrl" />
    <result column="state" jdbcType="INTEGER" property="state" />
    <result column="bank_card" jdbcType="VARCHAR" property="bankCard" />
    <result column="total_payment_amount" jdbcType="DECIMAL" property="totalPaymentAmount" />
    <result column="commission" jdbcType="DECIMAL" property="commission" />
    <result column="freight" jdbcType="DECIMAL" property="freight" />
    <result column="total_points" jdbcType="BIGINT" property="totalPoints" />
    <result column="superior_id" jdbcType="BIGINT" property="superiorId" />
    <result column="created_by" jdbcType="BIGINT" property="createdBy" />
    <result column="created_date" jdbcType="TIMESTAMP" property="createdDate" />
    <result column="last_updated_by" jdbcType="BIGINT" property="lastUpdatedBy" />
    <result column="last_updated_date" jdbcType="TIMESTAMP" property="lastUpdatedDate" />
    <result column="remove_flag" jdbcType="INTEGER" property="removeFlag" />
    <result column="deposit_paid" jdbcType="DECIMAL" property="depositPaid" />
    <result column="pay_pass_word" jdbcType="VARCHAR" property="payPassWord" />
    <result column="balance" jdbcType="DECIMAL" property="balance" />
    <result column="cash_roll" jdbcType="DECIMAL" property="cashRoll" />
  </resultMap>
  <sql id="BsdUser_Column_List">
    id, org_id, user_type, code, login_name, phone, name,short_name,register_attachment_url,password, contact_user_name,
    address, longitude, latitude, level, img_url, state, bank_card, total_payment_amount,commission,freight,
    total_points, superior_id, created_by, created_date, last_updated_by, last_updated_date, 
    remove_flag, deposit_paid, pay_pass_word, balance, cash_roll
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BsdUserResultMap">
    select
    <include refid="BsdUser_Column_List" />
    from bsd_user
    where id = #{id}
  </select>

  <select id="getUserById" parameterType="java.lang.Long" resultMap="BsdUserResultMap">
    select
    <include refid="BsdUser_Column_List" />
    from bsd_user
    where id = #{id}
  </select>



</mapper>

添加 jsp(如果工具是 idea,jsp 路径如为:/src/main/resources/META-INF/resources/WEB-INF/jsp;如果 eclipse、myEclipse 工具,放在在 src/main 下面创建 webapp/WEB-INF/jsp 目录用来存放我们的 jsp 页面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
</head>
<body>

    <h1>欢迎登陆甘雨路主页</h1>
    <div>登陆时间:${time}</div>
    <div>登陆人:${loginName}</div>


</body>
</html>

添加 mybatis 配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>

添加 application.properties 文件(基本配置)

# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp

#swagger
modulePath=/lf

添加 datasource.properties 文件(数据源配置)

#数据源配置
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/bsdmxm?useUnicode=true&characterEncoding=utf8
spring.datasource.username = bs
spring.datasource.password = bs7

添加 mybatis.properties 文件(mybatis 配置)

#mybatis 配置
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:lf/mapper/xml/*.xml
mybatis.type-aliases-package=lf.entity

 然后启动程序,在浏览器输入 http://localhost:8080/swagger-ui.html  可查看相关接口

 然后启动程序,在浏览器输入 http://localhost:8080/lf/page/company?id=52  即可

 

然后启动程序,在浏览器输入 http://localhost:8080/lf/user/info?id=51  即可

 

今天关于springboot+swagger2.10.5+mybatis-plus 入门详解springboot mybatis generator的分享就到这里,希望大家有所收获,若想了解更多关于Mybatis 插件之 Mybatis-Plus(SpringBoot)、MyBatis(1)( springboot+mybatis plus)、Spring Boot 、mybatis 、swagger 和 c3p0 整合、Spring boot 、mybatis 和 swagger 整合等相关知识,可以在本站进行查询。

本文标签: