SpringBoot学习(三)—— springboot快速整合swagger文档
MyBatis
@
简介
优点
最大的优点是SQL语句灵活,适合调优情景,业务复杂情景
劣势
最大的劣势是不同数据库之间的迁移
引入mybatis组件
pom.xml中加入
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
application.properties中加入
#dateSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
# mybatis
# 下划线转驼峰开启
mybatis.configuration.map-underscore-to-camel-case=true
# mapper扫描位置
mybatis.mapper-locations=classpath:mapper/*.xml
需要说明的是,我引入的mysql驱动为 com.mysql.cj.jdbc.Driver,而不是 com.mysql.jdbc.Driver。以下是一些参数的说明;
- serverTimezone:该驱动需要指定某时区。
- useUnicode:开启指定编码。
- characterEncoding:指定读取数据库的编码,因为项目采用UTF-8,存取数据库信息时保持一致。
- useSSL:是否建立SSL连接,我显示选的否,因为这要为服务器证书验证提供信任库,暂时没条件。
代码实战
本地的 mysql 版本为 5.7.20。
建表语句
CREATE TABLE USER_INFO
(
user_id DECIMAL(10) PRIMARY KEY NOT NULL,
user_name VARCHAR(20) DEFAULT "" NOT NULL
);
CREATE UNIQUE INDEX USER_INFO_user_id_uindex ON USER_INFO (user_id);
ALTER TABLE USER_INFO COMMENT = '用户基本信息表';
插入数据
INSERT INTO test.user_info (user_id, user_name) VALUES (1, '特朗普');
INSERT INTO test.user_info (user_id, user_name) VALUES (2, '唐纳德');
现在的项目路径为

在SpringBoot的入口类中加 @MapperScan 注解,以扫描 DAO 类,不用在每个dao接口加个@Mapper 注解。
package com.example;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
注:如果没有分拆项目成微服务架构,或分布式架构,application主类中的@SpringBootApplication自动会扫描本包中的@Controller,@Service,@Resource等,是不需要浪费另一行@ComponentScan注解,配置路径的。
UserController.java
package com.example.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.service.IUserService;
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("/queryUser")
@ResponseBody
void queryUser() {
this.userService.queryUser();
}
}
IUserService.java
package com.example.service;
public interface IUserService {
void queryUser();
}
UserServiceIml.java
package com.example.service;
import com.example.dao.UserDao;
import com.example.entity.UserEntity;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("userService")
public class UserServiceIml implements IUserService {
@Resource
private UserDao userDao;
@Override
public void queryUser() {
List<UserEntity> userList = this.userDao.queryUser();
System.out.println("================");
System.out.println(userList);
System.out.println("================");
}
}
注:如果是SSM架构过来的,这个@Resource注解可能比较陌生,因为我估计会和我之前一样用@Autowired,但是我是没有在dao层用 @Repository 注解的,之前用了在主类用了@MapperScan自动去扫描所有的dao,所以不能再用之前的@Autowired。
UserDao.java
package com.example.dao;
import com.example.entity.UserEntity;
import java.util.List;
public interface UserDao {
List<UserEntity> queryUser();
}
UserEntity.java
package com.example.entity;
public class UserEntity {
private long userId;
private String userName;
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "UserEntity{" +
"userId=" + userId +
", userName='" + userName + '\'' +
'}';
}
}
如果你运行不成功,请对比引入的包的版本,和数据库配置是否是根据你本地的,顺便看看注解是否和文中一样。
效果图如下;

注:如果是跟着本教程来的,因为一开始就引入了spring security,而新增的路径不在刚才的权限中,所以我给zs用户改成了皆可访问。如果没有跟着之前配置spring security,无需理会如下内容
//http.authorizeRequests().antMatchers("/user/addUser").hasRole("AAA")
http.authorizeRequests().antMatchers("/**").hasRole("AAA")
SpringBoot学习(三)—— springboot快速整合swagger文档的更多相关文章
- Spring Boot:整合Swagger文档
综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- SpringBoot系列:六、集成Swagger文档
本篇开始介绍Api文档Swagger的集成 一.引入maven依赖 <dependency> <groupId>io.springfox</groupId> < ...
- 如何Spring Cloud Zuul作为网关的分布式系统中整合Swagger文档在同一个页面上
本文不涉及技术,只是单纯的一个小技巧. 阅读本文前,你需要对spring-cloud-zuul.spring-cloud-eureka.以及swagger的配置和使用有所了解. 如果你的系统也是用zu ...
- springboot成神之——swagger文档自动生成工具
本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...
- SpringBoot中使用springfox+swagger2书写API文档
随着前后端的分离,借口文档变的尤其重要,springfox是通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfox生成的API文 ...
- Swagger文档转Word 文档
GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:http://www.cnblogs.co ...
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)
原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...
- API接口文档中将Swagger文档转Word 文档
一般的开发工作,尤其是API接口的开发工作,首先要有开发文档,接口说明文档 ok,后来开发完毕了 和页面联调,或者是和第三方联调的时候, 这个时候,SA systeam admin 就会开始直接让开发 ...
- python快速生成注释文档的方法
python快速生成注释文档的方法 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等.一看别人专业的大牛们写的文档多牛多羡慕,不用担 ...
随机推荐
- Logstash 入门
一.简介 Logstash 是开源的服务器端数据处理管道,支持从不同来源采集数据,装换数据,并将数据发送到不同的存储库中. Logstash 项目诞生于 2009 年 8 月 2 日.其作者是世界著名 ...
- CSAPP: 位操作实现基本运算
目录 实验要求 实现代码 1.pow2plus1 2.pow2plus4 3.bitXor 4.tmin 5.isTmax 6.allOddBits 7.negate 8.isAsciiDigit 9 ...
- Vue系列---源码调试(二)
我们要对Vue源码进行分析,首先我们需要能够对vue源码进行调式(这里的源码调式是ES6版本的,不是打包后的代码),因此首先我们要去官方github上克隆一份vue项目下来,如下具体操作: 1. cl ...
- 百万年薪python之路 -- 基础数据类型的补充练习
1.看代码写结果 v1 = [1,2,3,4,5] v2 = [v1,v1,v1] v1.append(6) print(v1) print(v2) [1,2,3,4,5,6] [[1,2,3,4,5 ...
- SQL 方面基础操作,主要针对数据库方面的操作步骤
SQL 结构化查询语言 适用于所有的SQL数据库 SQL 要求每条指令后末端 都要有分号(;),分号是标准方法,对服务器相同请求中执行一条以上的sql语句. 最终目的: 实现对数据库数据的 增 ...
- Windows中的JDK和Linux中的JDK是否相同
前言 在面试中,被问到了一个问题: Windows中的JDK和Linux中的JDK是否相同? 其实,以上这个问题是一个子问题.原本的问题是:如何理解Java的跨平台机制.由于原问题显得有些宽泛,因此延 ...
- 【已解决】ArcGIS Engine无法创建拓扑的问题(CreateTopology)
也许,你的问题是这样的 ①System.Runtime.InteropServices.COMException:"未找到拓扑." ②myTopology结果是null,程序跳转到 ...
- Python监控SQL Server数据库服务器磁盘使用情况
本篇博客总结一下Python采集SQL Server数据库服务器的磁盘使用信息,其实这里也是根据需求不断推进演化的一个历程,我们监控服务器的磁盘走了大概这样一个历程: 1:使用SQL Server作业 ...
- C++学习笔记6_字符串
1. C语言的字符串,char * s = "aaaa"; #include<string> class Test{ public : Test(int a, char ...
- [系列] Go gRPC 调试工具
目录 概述 写一个 gRPC API grpcui 使用 go-gin-api 系列文章 概述 最近这段时间工作挺忙的,发现已经 3 周没更文了... 感谢你们还在,今天给大家分享一款 gRPC 的调 ...