1)新建一个SpringBoot的项目,导入数据库需要的依赖:
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.9version>
dependency>
2)新建数据库和表
3)在配置文件配置数据源
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
1)在pom.xml中添加magic-api相关依赖:
<dependency>
<groupId>org.ssssssssgroupId>
<artifactId>magic-api-spring-boot-starterartifactId>
<version>1.2.1version>
dependency>
2)在配置文件配置magic-api相关信息
magic-api:
# 配置api管理页面入口
web: /magic/web
# 配置存储方式
resource:
# 配置接口资源存储位置,可选file、database、redis
type: database
# 存储表名
tableName: magic_api_file
# 使用database、redis存储时的key前缀
prefix: /db2020
# 是否是只读模式
readonly: false
# 启用驼峰命名转换
sql-column-case: camel
# 分页配置
page-config:
# 页大小的请求参数名称
size: size
# 页码的请求参数名称
page: page
# 未传页码时的默认页码
default-page: 1
# 未传页大小时的默认页大小
default-size: 10
3)创建表magic_api_file,用来存储接口的配置信息
CREATE TABLE `magic_api_file`
(
`id` bigint(255) NOT NULL AUTO_INCREMENT,
`file_path` varchar(255) DEFAULT NULL,
`file_content` text,
PRIMARY KEY (`id`)
)
4)启动项目,访问http://localhost:8080/magic/web,即可进入magic的管理页面
return db.table('user').insert(body);
return db.table('user').primary('id',body.id).update(body);
return db.update('delete from user where id=#{id}');
return db.table('user'
.where()
.eq('id',path.id)
.selectone();
根据sql查询结果,返回的是list集合。select()
return db.select('select * from user')
若需要携带参数,可以使用#{}进行占位,其他查询类似。select()
return db.select('select * from user where id = #{id} ')
根据sql查询结果,返回的是int值。selectInt()
return db.selectInt('select count(*) from user')
查询单个对象,其返回值必须是小于等于一条数据,不能超过一条。selectOne()
return db.selectOne('select * from user where id = #{id} ')
查询单个列的值。若查询结果是多条,则只会返回第一条数据的对应字段信息。selectValue()
return db.selectValue('select username from user where id = #{id}');
分页查询。要传递分页的条件(当前页码page,每页条数size),会返回数据总条数和数据集合。page()
return db.page('select * from user')
return db.table('user').page()
对于增删改操作,都可以使用此方法,不过一般删除会使用此方法,添加和修改均使用db.table()方式。原因是此方法必须使用get请求传递参数,不安全。update()
return db.update('delete from user where id=#{id}');
//post
return db.table('user').primary('id',body.id).update(body);
1)导入Swagger相关依赖
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger2artifactId>
<version>2.9.2version>
dependency>
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger-uiartifactId>
<version>2.9.2version>
dependency>
2)在配置文件application.yml中添加Swagger相关配置。
magic-api:
# 集成Swagger配置
swagger-config:
# 文档名称
name: MagicAPI
# 文档标题
title: MagicAPI Swagger Docs
# 文档描述
description: MagicAPI
# 文档版本号
version: 1.0
# 文档资源位置
location: /v2/api-docs/magic-api/swagger2.json
3)重启项目,访问Swagger界面http://localhost:8080/swagger-ui.html,即可查看我们在magic-api中写的接口
在开发环境,可以使用magic进行接口的开发,但是在正式环境中,其页面是不能暴露出来的,同时swagger在正式环境也不能暴露。故需要拦截器进行拦截,同时其自带SQL的拦截器,可以打印SQL的日志信息。
/**
* 拦截器配置
*/
@Component
public class MyInterceptor implements SQLInterceptor, HandlerInterceptor {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Value("${isAllowed}")
private Boolean isAllowed;
/***
* 自定义SQL拦截器,打印sql及参数
* @param boundSql
* @param requestEntity
*/
@Override
public void preHandle(BoundSql boundSql, RequestEntity requestEntity) {
logger.warn("执行的SQL===> " + boundSql.getSql());
logger.warn("执行的SQL参数===> " + Arrays.toString(boundSql.getParameters()));
}
/**
* 配置资源拦截器,开发页面只能在开发中使用,在正式环境拦截
*
* @param request
* @param response
* @param handler
* @return
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
if (!isAllowed) {
Map<String, Object> result = new HashMap<>();
result.put("msg", "抱歉,未找到可访问资源!");
result.put("status", false);
response.setCharacterEncoding("utf-8");
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.getWriter().write(JSON.toJSONString(result));
return false;
}
return true;
}
}
还需要一个MVC的配置其注入拦截器和要拦截的资源:
/**
* mvc配置,注入拦截器
*/
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//addPathPatterns表示拦截所有请求,excludePathPatterns表示不拦截的请求
registry.addInterceptor(myInterceptor).addPathPatterns("/swagger-ui.html").addPathPatterns("/magic/**");
}
}
就可以通过修改isAllowed的值选择是否可访问。到这里,基本的接口开发已经完成,只需前端进行整合即可。