NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
# 多数据库连接配置 ## 实现功能 - 提供application.yml配置的主数据库外,连接其他多个、不同类型数据库的方式 - 提供数据库的查询基础工具 ## 配置 ### ***配置源*** - 数据库配置 - public下的json文件(配合对应constant) ### ***数据结构配置*** - 数据库配置 ```json { "dbType":"oracle",//oracle mysql sqlserver "dbUrl":"", "dbUser":"", "dbPassword":"" } ``` - json配置 ```json [ { "dbType":"oracle",//oracle mysql sqlserver "dbUrl":"", "dbUser":"", "dbPassword":"" } ] ``` - 对应接收配置实体对象 ```java //数据库类型 oracle mysql sqlserver private String dbType; //数据库地址,唯一 private String dbUrl; //数据库连接账号 private String dbUser; //数据库连接密码 private String dbPassword; ``` ## 工具 description:位于core项目下common/utils/database - ***HikariDataSourcePool***: 创建连接池 - ***DataBaseUtils***: 数据库操作工具类 增删改查 - ***DataBaseParamUtils***: 数据库查询的参数 ## 使用 ### ***创建连接池*** ```java // 以下为数据库获取配置字符创建连接 // QueryExConfigModel 为连接配置对象(即上面的对应接收配置实体对象) QueryExConfigModel exConfigModel = JSONObject .parseObject(completeModel.getQueryExConfig(), QueryExConfigModel.class); /** * 获取数据库连接对象,若dbUrl对应的连接已创建,则直接返回不创建 * * @param url 数据库地址 * @param username 账号 * @param password 密码 * @return 连接对象 * @throws SQLException 异常 */ Connection connection = HikariDataSourcePool.getConnection(exConfigModel.getDbUrl(),exConfigModel.getDbUser(), exConfigModel.getDbPassword()); ``` ### ***构造sql where 条件 *** ``` java /** * 获取数据库where拼凑条件:目前仅oracle * * @param databaseType 数据库类型 * @param dataStr 数据源=>{a:1,b:"2",c:3} * @param formConfig 拼凑规则 * @param additionalSql 追加sql * @return where条件 */ String where = databaseWhereParam(exConfigModel.getDbType(), SystemConstant.EMPTY, SystemConstant.EMPTY, additionalSql), ``` 规则对象实例 ```java FormRuleModel { @ApiModelProperty(value = "是否是范围框 true/false") private String isRange; @ApiModelProperty(value = "起始key") private String beginKey; @ApiModelProperty(value = "end key") private String endKey; @ApiModelProperty(value = "显示字段key") private String field; @ApiModelProperty(value = "是否是复选框") private String selectItemMultiEnabled; @ApiModelProperty(value = "数据类型 number/string/date") private String dataType; } ``` ### ***数据库查询*** ```java /** * 数据库分页查询:目前仅oracle * * @param databaseType 数据库类型 * @param connection 连接池 * @param table 表名 * @param outFields 查询字段 * @param where 查询条件 * @param page 分页参数 * @return 分页结果/列表结果 */ JSONObject data = DataBaseUtils.queryTableData(exConfigModel.getDbType(), connection, exConfigModel.getDbTable(), outFieldList, where ,null); ``` ## 完整示例 ```java @ApiOperation(value = "测试多数据连接") @RequestMapping(value = "/test", method = RequestMethod.POST) public Result<JSONObject> test() { //数据库连接配置 String bdType = "oracle"; String dbUrl = "jdbc:oracle:thin:@182.61.11.194:1522/pdborcl"; String dbUser = "GIS_DATA_SERVER"; String dbPassword = "1"; //查询条件 String table = "GIS_TMAP_CONFIG"; //支持* List<String> outFieldList = new ArrayList<>(); outFieldList.add("DATA_NAME"); //分页参数 PageVo page = null; try { //获取数据库连接 Connection connection = HikariDataSourcePool .getConnection(dbUrl, dbUser, dbPassword); //查询数据 JSONObject dataList = DataBaseUtils.queryTableData(bdType, connection, table, outFieldList, DataBaseParamUtils.databaseWhereParam(bdType, SystemConstant.EMPTY, SystemConstant.EMPTY, SystemConstant.EMPTY), page); return new ResultUtil<JSONObject>().isOk(dataList); } catch (Exception ex) { throw new GisBootException(ex.getMessage()); } } ``` ## 结果展示 - 指定查询字段 ![](https://img.kancloud.cn/63/f6/63f6a33d49d48bfccb2dfb6c6ed9388f_567x879.png) - 未指定查询字段 ![](https://img.kancloud.cn/6f/80/6f80a5118d96fc55df426ace7fa8bfc8_1053x635.png)