simple-starter-datasource
# 简介
依赖使用HikariCP、P6spy监控日志、MybatisPlus、包含通用CURD控制层
功能:启动应用程序自动创建数据库、自动创建表
功能:通过实例化MapperLocations获取配置值 追加配置文件中的 mapperLocations 属性值
# 引入依赖
<dependencies>
<dependency>
<groupId>cn.iosd</groupId>
<artifactId>simple-starter-datasource</artifactId>
<version>Version</version>
</dependency>
</dependencies>
2
3
4
5
6
7
# 配置项
simple:
datasource:
#自动创建数据库 缺省项为true
autoCreateDatabase: true
locations:
## 开启实现MapperLocationsProvider接口获取配置值,实现接口追加配置文件中mapper-locations属性 缺省项为true
enabled: true
2
3
4
5
6
7
# 功能
# 自动创建库
业务逻辑类:DatabaseInitializer
实现了ApplicationContextInitializer接口,用于在Spring应用程序上下文初始化时初始化数据库。
从应用程序上下文环境中获取数据库连接属性,并根据jdbcUrl解析出数据库名,然后执行创建数据库的SQL语句。
# 分页插件
启用配置类效果代码:MybatisPlusConfig
使用:mybatis-plus分页插件
# 分页请求参数
实体类:PageRequest
一个封装了分页请求参数的Java类,包含起始页、每页显示记录数、排序、查询条件参数等字段。
# 工具类
将自定义的分页对象PageRequest转换为mybatisPlus的分页对象Page
使用示例:
@Operation(summary = "Api-查询-分页")
@PostMapping("/api/page")
public Response<IPage<T>> apiPage(@RequestBody PageRequest<T> req) {
return Response.ok(service.page(DsConvertUtil.page(req), Wrappers.lambdaQuery(req.getData())));
}
2
3
4
5
# MapperLocations
# 介绍
实例化MapperLocations获取配置值 覆盖配置文件中的 mapperLocations 属性值
解决:各个模块不同mapper-locations配置能在父级模块没有配置其需要的mapper-locations时能正常使用
注意项:当开启时,配置文件中的mapperLocations属性值可同时生效
# 问题点
例
子模块工程所需 配置文件参数
mybatis-plus.mapper-locations=classpath*:/cn/iosd/base/**/*Mapper.xml
父模块依赖子模块,而父模块的配置文件参数实际为
mybatis-plus.mapper-locations=classpath*:/cn/iosd/test/**/*Mapper.xml
2
3
4
父模块运行时,对于子模块调用的mapper接口将会报错:
Invalid bound statement (not found):
除非父模块配置包含子模块的参数,这样需要知道各个子模块所需配置,较为麻烦
mybatis-plus.mapper-locations=classpath*:/cn/iosd/test/**/*Mapper.xml,classpath*:/cn/iosd/base/**/*Mapper.xml
# 解决示例
子模块实例化MapperLocations
@Bean
public MapperLocations paramMapperLocations() {
return MapperLocations.of("classpath*:/cn/iosd/base/param/mapper/**/*Mapper.xml");
}
2
3
4
父模块实现MapperLocationsProvider
@Bean
public MapperLocations collectionMapperLocations() {
return MapperLocations.of("classpath*:/cn/iosd/test/**/*Mapper.xml");
}
2
3
4
# 几何类型处理器
当在Mysql中存储类型为geometry字段,在java上获取接口时常需要提供为字符串对象,故此提供GeometryTypeHandler使用
# 引入依赖
GeometryTypeHandler实现方法借助jts-core
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
</dependency>
2
3
4
# 映射对象
类上增加注释:@TableName(autoResultMap = true)
@TableName(autoResultMap = true)
public class DemoDatasource implements Serializable {
...
}
2
3
4
字段上增加注释:@TableField(typeHandler = GeometryTypeHandler.class)
/**
* 几何数据
*/
@TableField(typeHandler = GeometryTypeHandler.class)
private String geom;
2
3
4
5
6
# 存储接口示例
请求地址:/simple-demo-datasource/datasource/api 请求参数:
{
"id": 213,
"content": "1231",
"geom": "POINT(113.54 23.43)"
}
2
3
4
5