在项目中经常会需要查询数据库所有的表以及表字段,然后可能还需要导出到Excel中,然后自己写了一个工具类,目前支持sqlserver、mysql、oracle、Postgre;如果有问题请留言!!!
1. 引入依赖包
1 | <!-- 请尽量用最新版本 --> |
2. 编写Java代码
- 通过MyDataSourceProperties类所有本项目的数据库连接信息,导出当前连接库的数据库结构
- 数据库配置 yml
1
2
3
4
5
6
7
8spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/dbname?serverTimezone=GMT%2B8&useSSL=false
username: root
password: xiaoyuge
driver-class-name: com.mysql.jdbc.Driver
database: dbname ##需要配置数据库名称 - 导出方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24import com.github.xiaoyuge5201.config.MyDataSourceProperties;
import com.github.xiaoyuge5201.util.ExportDatabaseDocument;
import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
public class TestController {
MyDataSourceProperties properties;
/**
* 注意:需要在yaml /yml 配置文件中配置spring.datasource.database 属性
*/
public void index(HttpServletResponse response, HttpServletRequest request) {
ExportDatabaseDocument.export(response, request, properties);
}
}
- 自定义导出某个数据库的表结构信息
1
2
3
4
5
public void index(HttpServletResponse response, HttpServletRequest request) {
//手动传参
ExportDatabaseDocument.export(response, request, DatabaseDriverEnum.MYSQL.getDriver(), "127.0.0.1:3306", "root", "xiaoyuge", "dbname");
}
3. 导出文档
执行请求:localhost:8080/export/index 即可;导出的内容如下:
包括数据库表名、描述以及各个字段的类型、长度、默认值、描述等。。。;
另外sheet的名称为表名(表中文名)+ 4位随机值,受限于excel的sheet;
4. 数据库操作类 DataSourceClient
- DataSourceClient类中根据MyDataSourceProperties操作数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61/**
* 查询所有的表结构信息
*
* @return 表结构列表
*/
public List<String> findAllTables() {
return QuerySqlUtil.findAllTables(properties.getDriverClassName(), properties.getUrl(), properties.getUsername(), properties.getPassword(), properties.getDatabase());
}
/**
* 查詢數據庫表的字段信息
*
* @param table 数据表
* @return 表字段列表
*/
public List<ColumnEntity> queryTableFieldsEntity(String table) {
return QuerySqlUtil.queryTableFieldsToColumnEntity(properties.getDriverClassName(), properties.getUrl(), properties.getUsername(), properties.getPassword(), properties.getDatabase(), table);
}
/**
* 查詢數據庫表的字段信息
*
* @param table 数据表
* @return 表字段列表
*/
public List<String> queryTableFields(String table) {
return QuerySqlUtil.queryTableFields(properties.getDriverClassName(), properties.getUrl(), properties.getUsername(), properties.getPassword(), properties.getDatabase(), table);
}
/**
* 查询对应库下所有字段 信息
*
* @return 结果
*/
public List<ColumnEntity> listColumnsByDatasourceParams() {
return QuerySqlUtil.listColumnsByDatasourceParams(properties.getDriverClassName(), properties.getUrl(), properties.getUsername(), properties.getPassword(), properties.getDatabase());
}
/**
* 分页查询数据表数据
*
* @param table 数据表
* @param pageNo 页码
* @param limit 页容量
* @param columns 字段列表
* @throws Exception 异常信息
* @return 结果
*/
public JSONArray queryPageData(String table, List<String> columns, Integer pageNo, Integer limit) throws Exception {
return QuerySqlUtil.queryPageData(properties.getDriverClassName(), properties.getDatabase(), table, properties.getUrl(), properties.getUsername(), properties.getPassword(), columns, pageNo, limit);
}
/**
* 导出数据库设计文档
*
* @param response 返回对象
* @param request 请求对象
*/
public void exportDatabaseDocument(HttpServletResponse response, HttpServletRequest request) {
ExportDatabaseDocument.export(response, request, properties.getDriverClassName(), properties.getUrl(), properties.getUsername(), properties.getPassword(), properties.getDatabase());
}
5. 数据库驱动枚举类 DatabaseDriverEnum
1 | /** |