Commit c17bd4a6 by fengshuonan

整理dbcontainer的包结构,增加对数据源的管理,整理菜单结构

parent 452c1448
package cn.stylefeng.datasource.container.context;
package cn.stylefeng.guns.dbcontainer.core.context;
import cn.stylefeng.datasource.container.dao.DataBaseInfoDao;
import cn.stylefeng.guns.dbcontainer.core.dao.DataBaseInfoDao;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import com.atomikos.jdbc.AtomikosDataSourceBean;
......
package cn.stylefeng.datasource.container.dao;
package cn.stylefeng.guns.dbcontainer.core.dao;
import cn.hutool.core.date.DateUtil;
import cn.stylefeng.datasource.container.exception.DataSourceInitException;
import cn.stylefeng.guns.dbcontainer.core.exception.DataSourceInitException;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import lombok.extern.slf4j.Slf4j;
......@@ -11,7 +11,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import static cn.stylefeng.datasource.container.context.DataSourceContext.MASTER_DATASOURCE_NAME;
import static cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext.MASTER_DATASOURCE_NAME;
/**
* 操作数据源信息的dao
......
package cn.stylefeng.datasource.container.exception;
package cn.stylefeng.guns.dbcontainer.core.exception;
import cn.stylefeng.roses.kernel.model.exception.AbstractBaseExceptionEnum;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
......
package cn.stylefeng.guns.generator.core.util;
package cn.stylefeng.guns.dbcontainer.core.util;
import cn.stylefeng.guns.generator.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
......
package cn.stylefeng.guns.generator.modular.controller;
package cn.stylefeng.guns.dbcontainer.modular.controller;
import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory;
import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.generator.core.util.DbUtil;
import cn.stylefeng.guns.generator.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.generator.modular.mapper.DatabaseInfoMapper;
import cn.stylefeng.roses.core.reqres.response.SuccessResponseData;
import cn.stylefeng.guns.dbcontainer.core.util.DbUtil;
import cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam;
import cn.stylefeng.guns.dbcontainer.modular.service.DatabaseInfoService;
import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.util.ToolUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
......@@ -19,84 +20,122 @@ import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
import static cn.stylefeng.guns.generator.modular.controller.GeneratorController.CONDITION_FIELDS;
/**
* 代码生成控制器
* 数据库信息表控制器
*
* @author fengshuonan
* @date 2019-01-30-2:39 PM
* @author stylefeng
* @Date 2019-06-15 17:05:23
*/
@Controller
@RequestMapping("/db")
public class DatabaseController {
@RequestMapping("/databaseInfo")
public class DatabaseInfoController extends BaseController {
/**
* session中标识已选择条件字段的key
*/
public static String CONDITION_FIELDS = "CONDITION_FIELDS";
private String PREFIX = "/databaseInfo";
@Autowired
private DatabaseInfoMapper databaseInfoMapper;
private DatabaseInfoService databaseInfoService;
/**
* 数据库管理主页
* 跳转到主页面
*
* @author fengshuonan
* @Date 2019/1/30 2:49 PM
* @author stylefeng
* @Date 2019-06-15
*/
@RequestMapping("")
public String index() {
return "/db/db.html";
return PREFIX + "/databaseInfo.html";
}
/**
* 新增页面
*
* @author fengshuonan
* @Date 2019-01-11
* @author stylefeng
* @Date 2019-06-15
*/
@RequestMapping("/add")
public String add() {
return "/db/db_add.html";
return PREFIX + "/databaseInfo_add.html";
}
/**
* 新增
* 编辑页面
*
* @author fengshuonan
* @Date 2019-01-11
* @author stylefeng
* @Date 2019-06-15
*/
@RequestMapping("/edit")
public String edit() {
return PREFIX + "/databaseInfo_edit.html";
}
/**
* 新增接口
*
* @author stylefeng
* @Date 2019-06-15
*/
@RequestMapping("/addItem")
@ResponseBody
public Object addItem(DatabaseInfo databaseInfo) {
this.databaseInfoMapper.insert(databaseInfo);
return new SuccessResponseData();
public ResponseData addItem(DatabaseInfoParam databaseInfoParam) {
this.databaseInfoService.add(databaseInfoParam);
return ResponseData.success();
}
/**
* 删除
* 编辑接口
*
* @author fengshuonan
* @Date 2019-01-11
* @author stylefeng
* @Date 2019-06-15
*/
@RequestMapping("/delete")
@RequestMapping("/editItem")
@ResponseBody
public Object delete(Long dbId) {
this.databaseInfoMapper.deleteById(dbId);
return new SuccessResponseData();
public ResponseData editItem(DatabaseInfoParam databaseInfoParam) {
this.databaseInfoService.update(databaseInfoParam);
return ResponseData.success();
}
/**
* 获取数据源列表
* 删除接口
*
* @author fengshuonan
* @Date 2019/1/30 2:49 PM
* @author stylefeng
* @Date 2019-06-15
*/
@RequestMapping("/list")
@RequestMapping("/delete")
@ResponseBody
public Object list() {
List<DatabaseInfo> all = databaseInfoMapper.selectList(new QueryWrapper<>());
public ResponseData delete(DatabaseInfoParam databaseInfoParam) {
this.databaseInfoService.delete(databaseInfoParam);
return ResponseData.success();
}
Page<DatabaseInfo> objectPage = new Page<>();
objectPage.setRecords(all);
/**
* 查看详情接口
*
* @author stylefeng
* @Date 2019-06-15
*/
@RequestMapping("/detail")
@ResponseBody
public ResponseData detail(DatabaseInfoParam databaseInfoParam) {
DatabaseInfo detail = this.databaseInfoService.getById(databaseInfoParam.getDbId());
return ResponseData.success(detail);
}
return LayuiPageFactory.createPageInfo(objectPage);
/**
* 查询列表
*
* @author stylefeng
* @Date 2019-06-15
*/
@ResponseBody
@RequestMapping("/list")
public LayuiPageInfo list(DatabaseInfoParam databaseInfoParam) {
return this.databaseInfoService.findPageBySpec(databaseInfoParam);
}
/**
......@@ -118,7 +157,7 @@ public class DatabaseController {
session.removeAttribute(CONDITION_FIELDS);
try {
DatabaseInfo databaseInfo = databaseInfoMapper.selectById(dbId);
DatabaseInfo databaseInfo = databaseInfoService.getById(dbId);
List<Map<String, Object>> maps = DbUtil.selectTables(databaseInfo);
Page<Map<String, Object>> objectPage = new Page<>();
objectPage.setRecords(maps);
......@@ -128,5 +167,6 @@ public class DatabaseController {
return LayuiPageFactory.createPageInfo(objectPage);
}
}
}
package cn.stylefeng.guns.generator.modular.entity;
package cn.stylefeng.guns.dbcontainer.modular.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
......@@ -12,10 +11,9 @@ import java.util.Date;
* </p>
*
* @author stylefeng
* @since 2019-05-11
* @since 2019-06-15
*/
@TableName("database_info")
@Data
public class DatabaseInfo implements Serializable {
private static final long serialVersionUID = 1L;
......@@ -27,7 +25,7 @@ public class DatabaseInfo implements Serializable {
private Long dbId;
/**
* 数据库名称
* 数据库名称(英文名称)
*/
@TableField("db_name")
private String dbName;
......@@ -57,7 +55,7 @@ public class DatabaseInfo implements Serializable {
private String jdbcUrl;
/**
* 备注
* 备注,摘要
*/
@TableField("remarks")
private String remarks;
......@@ -68,4 +66,82 @@ public class DatabaseInfo implements Serializable {
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
public Long getDbId() {
return dbId;
}
public void setDbId(Long dbId) {
this.dbId = dbId;
}
public String getDbName() {
return dbName;
}
public void setDbName(String dbName) {
this.dbName = dbName;
}
public String getJdbcDriver() {
return jdbcDriver;
}
public void setJdbcDriver(String jdbcDriver) {
this.jdbcDriver = jdbcDriver;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getJdbcUrl() {
return jdbcUrl;
}
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "DatabaseInfo{" +
"dbId=" + dbId +
", dbName=" + dbName +
", jdbcDriver=" + jdbcDriver +
", userName=" + userName +
", password=" + password +
", jdbcUrl=" + jdbcUrl +
", remarks=" + remarks +
", createTime=" + createTime +
"}";
}
}
package cn.stylefeng.guns.generator.modular.mapper;
package cn.stylefeng.guns.dbcontainer.modular.mapper;
import cn.stylefeng.guns.generator.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.generator.modular.model.params.DatabaseInfoParam;
import cn.stylefeng.guns.generator.modular.model.result.DatabaseInfoResult;
import cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam;
import cn.stylefeng.guns.dbcontainer.modular.model.result.DatabaseInfoResult;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
......@@ -16,7 +16,7 @@ import java.util.Map;
* </p>
*
* @author stylefeng
* @since 2019-05-11
* @since 2019-06-15
*/
public interface DatabaseInfoMapper extends BaseMapper<DatabaseInfo> {
......@@ -24,32 +24,32 @@ public interface DatabaseInfoMapper extends BaseMapper<DatabaseInfo> {
* 获取列表
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
List<DatabaseInfoResult> customList(DatabaseInfoParam paramCondition);
List<DatabaseInfoResult> customList(@Param("paramCondition") DatabaseInfoParam paramCondition);
/**
* 获取map列表
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
List<Map<String, Object>> customMapList(DatabaseInfoParam paramCondition);
List<Map<String, Object>> customMapList(@Param("paramCondition") DatabaseInfoParam paramCondition);
/**
* 获取分页实体列表
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
Page<DatabaseInfoResult> customPageList(Page page, DatabaseInfoParam paramCondition);
Page<DatabaseInfoResult> customPageList(@Param("page") Page page, @Param("paramCondition") DatabaseInfoParam paramCondition);
/**
* 获取分页map列表
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
Page<Map<String, Object>> customPageMapList(Page page, DatabaseInfoParam paramCondition);
Page<Map<String, Object>> customPageMapList(@Param("page") Page page, @Param("paramCondition") DatabaseInfoParam paramCondition);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.stylefeng.guns.generator.modular.mapper.DatabaseInfoMapper">
<mapper namespace="cn.stylefeng.guns.dbcontainer.modular.mapper.DatabaseInfoMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.stylefeng.guns.generator.modular.entity.DatabaseInfo">
<id column="db_id" property="dbId"/>
<result column="db_name" property="dbName"/>
<result column="jdbc_driver" property="jdbcDriver"/>
<result column="user_name" property="userName"/>
<result column="password" property="password"/>
<result column="jdbc_url" property="jdbcUrl"/>
<result column="remarks" property="remarks"/>
<result column="create_time" property="createTime"/>
<resultMap id="BaseResultMap" type="cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo">
<id column="db_id" property="dbId" />
<result column="db_name" property="dbName" />
<result column="jdbc_driver" property="jdbcDriver" />
<result column="user_name" property="userName" />
<result column="password" property="password" />
<result column="jdbc_url" property="jdbcUrl" />
<result column="remarks" property="remarks" />
<result column="create_time" property="createTime" />
</resultMap>
<!-- 通用查询结果列 -->
......@@ -19,28 +19,41 @@
db_id AS "dbId", db_name AS "dbName", jdbc_driver AS "jdbcDriver", user_name AS "userName", password AS "password", jdbc_url AS "jdbcUrl", remarks AS "remarks", create_time AS "createTime"
</sql>
<select id="customList" resultType="cn.stylefeng.guns.generator.modular.model.result.DatabaseInfoResult" parameterType="cn.stylefeng.guns.generator.modular.model.params.DatabaseInfoParam">
<select id="customList" resultType="cn.stylefeng.guns.dbcontainer.modular.model.result.DatabaseInfoResult" parameterType="cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam">
select
<include refid="Base_Column_List"/>
from database_info where 1 = 1
<if test="paramCondition.dbName != null and paramCondition.dbName != ''">
and db_name like CONCAT('%',#{paramCondition.dbName},'%')
</if>
</select>
<select id="customMapList" resultType="map" parameterType="cn.stylefeng.guns.generator.modular.model.params.DatabaseInfoParam">
<select id="customMapList" resultType="map" parameterType="cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam">
select
<include refid="Base_Column_List"/>
from database_info where 1 = 1
<if test="paramCondition.dbName != null and paramCondition.dbName != ''">
and db_name like CONCAT('%',#{paramCondition.dbName},'%')
</if>
</select>
<select id="customPageList" resultType="cn.stylefeng.guns.generator.modular.model.result.DatabaseInfoResult" parameterType="cn.stylefeng.guns.generator.modular.model.params.DatabaseInfoParam">
<select id="customPageList" resultType="cn.stylefeng.guns.dbcontainer.modular.model.result.DatabaseInfoResult" parameterType="cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam">
select
<include refid="Base_Column_List"/>
from database_info where 1 = 1
<if test="paramCondition.dbName != null and paramCondition.dbName != ''">
and db_name like CONCAT('%',#{paramCondition.dbName},'%')
</if>
</select>
<select id="customPageMapList" resultType="map" parameterType="cn.stylefeng.guns.generator.modular.model.params.DatabaseInfoParam">
<select id="customPageMapList" resultType="map" parameterType="cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam">
select
<include refid="Base_Column_List"/>
from database_info where 1 = 1
<if test="paramCondition.dbName != null and paramCondition.dbName != ''">
and db_name like CONCAT('%',#{paramCondition.dbName},'%')
</if>
</select>
</mapper>
package cn.stylefeng.guns.generator.modular.model.params;
package cn.stylefeng.guns.dbcontainer.modular.model.params;
import lombok.Data;
import cn.stylefeng.roses.kernel.model.validator.BaseValidatingParam;
import java.util.Date;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
......@@ -12,7 +12,7 @@ import java.math.BigDecimal;
* </p>
*
* @author stylefeng
* @since 2019-05-11
* @since 2019-06-15
*/
@Data
public class DatabaseInfoParam implements Serializable, BaseValidatingParam {
......@@ -26,7 +26,7 @@ public class DatabaseInfoParam implements Serializable, BaseValidatingParam {
private Long dbId;
/**
* 数据库名称
* 数据库名称(英文名称)
*/
private String dbName;
......@@ -51,6 +51,11 @@ public class DatabaseInfoParam implements Serializable, BaseValidatingParam {
private String jdbcUrl;
/**
* 备注,摘要
*/
private String remarks;
/**
* 创建时间
*/
private Date createTime;
......
package cn.stylefeng.guns.generator.modular.model.result;
package cn.stylefeng.guns.dbcontainer.modular.model.result;
import lombok.Data;
import java.util.Date;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
......@@ -11,7 +11,7 @@ import java.math.BigDecimal;
* </p>
*
* @author stylefeng
* @since 2019-05-11
* @since 2019-06-15
*/
@Data
public class DatabaseInfoResult implements Serializable {
......@@ -25,7 +25,7 @@ public class DatabaseInfoResult implements Serializable {
private Long dbId;
/**
* 数据库名称
* 数据库名称(英文名称)
*/
private String dbName;
......@@ -50,6 +50,11 @@ public class DatabaseInfoResult implements Serializable {
private String jdbcUrl;
/**
* 备注,摘要
*/
private String remarks;
/**
* 创建时间
*/
private Date createTime;
......
package cn.stylefeng.guns.generator.modular.service;
package cn.stylefeng.guns.dbcontainer.modular.service;
import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.generator.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.generator.modular.model.params.DatabaseInfoParam;
import cn.stylefeng.guns.generator.modular.model.result.DatabaseInfoResult;
import cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam;
import cn.stylefeng.guns.dbcontainer.modular.model.result.DatabaseInfoResult;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
......@@ -14,7 +14,7 @@ import java.util.List;
* </p>
*
* @author stylefeng
* @since 2019-05-11
* @since 2019-06-15
*/
public interface DatabaseInfoService extends IService<DatabaseInfo> {
......@@ -22,7 +22,7 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
* 新增
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
void add(DatabaseInfoParam param);
......@@ -30,7 +30,7 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
* 删除
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
void delete(DatabaseInfoParam param);
......@@ -38,7 +38,7 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
* 更新
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
void update(DatabaseInfoParam param);
......@@ -46,7 +46,7 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
* 查询单条数据,Specification模式
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
DatabaseInfoResult findBySpec(DatabaseInfoParam param);
......@@ -54,7 +54,7 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
* 查询列表,Specification模式
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
List<DatabaseInfoResult> findListBySpec(DatabaseInfoParam param);
......@@ -62,7 +62,7 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
* 查询分页数据,Specification模式
*
* @author stylefeng
* @Date 2019-05-11
* @Date 2019-06-15
*/
LayuiPageInfo findPageBySpec(DatabaseInfoParam param);
......
package cn.stylefeng.guns.generator.modular.service.impl;
package cn.stylefeng.guns.dbcontainer.modular.service.impl;
import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory;
import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.generator.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.generator.modular.mapper.DatabaseInfoMapper;
import cn.stylefeng.guns.generator.modular.model.params.DatabaseInfoParam;
import cn.stylefeng.guns.generator.modular.model.result.DatabaseInfoResult;
import cn.stylefeng.guns.generator.modular.service.DatabaseInfoService;
import cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.dbcontainer.modular.mapper.DatabaseInfoMapper;
import cn.stylefeng.guns.dbcontainer.modular.model.params.DatabaseInfoParam;
import cn.stylefeng.guns.dbcontainer.modular.model.result.DatabaseInfoResult;
import cn.stylefeng.guns.dbcontainer.modular.service.DatabaseInfoService;
import cn.stylefeng.roses.core.util.ToolUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -22,24 +22,24 @@ import java.util.List;
* </p>
*
* @author stylefeng
* @since 2019-05-11
* @since 2019-06-15
*/
@Service
public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, DatabaseInfo> implements DatabaseInfoService {
@Override
public void add(DatabaseInfoParam param) {
public void add(DatabaseInfoParam param){
DatabaseInfo entity = getEntity(param);
this.save(entity);
}
@Override
public void delete(DatabaseInfoParam param) {
public void delete(DatabaseInfoParam param){
this.removeById(getKey(param));
}
@Override
public void update(DatabaseInfoParam param) {
public void update(DatabaseInfoParam param){
DatabaseInfo oldEntity = getOldEntity(param);
DatabaseInfo newEntity = getEntity(param);
ToolUtil.copyProperties(newEntity, oldEntity);
......@@ -47,23 +47,23 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
}
@Override
public DatabaseInfoResult findBySpec(DatabaseInfoParam param) {
public DatabaseInfoResult findBySpec(DatabaseInfoParam param){
return null;
}
@Override
public List<DatabaseInfoResult> findListBySpec(DatabaseInfoParam param) {
public List<DatabaseInfoResult> findListBySpec(DatabaseInfoParam param){
return null;
}
@Override
public LayuiPageInfo findPageBySpec(DatabaseInfoParam param) {
public LayuiPageInfo findPageBySpec(DatabaseInfoParam param){
Page pageContext = getPageContext();
IPage page = this.baseMapper.customPageList(pageContext, param);
return LayuiPageFactory.createPageInfo(page);
}
private Serializable getKey(DatabaseInfoParam param) {
private Serializable getKey(DatabaseInfoParam param){
return param.getDbId();
}
......
layui.use(['table', 'admin', 'ax'], function () {
var $ = layui.$;
var table = layui.table;
var $ax = layui.ax;
var admin = layui.admin;
/**
* 数据库信息表管理
*/
var DatabaseInfo = {
tableId: "databaseInfoTable"
};
/**
* 初始化表格的列
*/
DatabaseInfo.initColumn = function () {
return [[
{type: 'checkbox'},
{field: 'dbId', hide: true, title: '主键id'},
{field: 'dbName', sort: true, title: '数据库名称'},
{field: 'jdbcDriver', sort: true, title: '驱动类型'},
{field: 'userName', sort: true, title: '账号'},
{field: 'password', sort: true, title: '密码'},
{field: 'jdbcUrl', sort: true, title: 'jdbc的url'},
{field: 'remarks', sort: true, title: '备注'},
{field: 'createTime', sort: true, title: '创建时间'},
{align: 'center', toolbar: '#tableBar', title: '操作'}
]];
};
/**
* 点击查询按钮
*/
DatabaseInfo.search = function () {
var queryData = {};
queryData['condition'] = $("#condition").val();
table.reload(DatabaseInfo.tableId, {
where: queryData, page: {curr: 1}
});
};
/**
* 弹出添加对话框
*/
DatabaseInfo.openAddDlg = function () {
window.location.href = Feng.ctxPath + '/databaseInfo/add';
};
/**
* 导出excel按钮
*/
DatabaseInfo.exportExcel = function () {
var checkRows = table.checkStatus(DatabaseInfo.tableId);
if (checkRows.data.length === 0) {
Feng.error("请选择要导出的数据");
} else {
table.exportFile(tableResult.config.id, checkRows.data, 'xls');
}
};
/**
* 点击编辑
*
* @param data 点击按钮时候的行数据
*/
DatabaseInfo.openEditDlg = function (data) {
window.location.href = Feng.ctxPath + '/databaseInfo/edit?dbId=' + data.dbId;
};
/**
* 点击删除
*
* @param data 点击按钮时候的行数据
*/
DatabaseInfo.onDeleteItem = function (data) {
var operation = function () {
var ajax = new $ax(Feng.ctxPath + "/databaseInfo/delete", function (data) {
Feng.success("删除成功!");
table.reload(DatabaseInfo.tableId);
}, function (data) {
Feng.error("删除失败!" + data.responseJSON.message + "!");
});
ajax.set("dbId", data.dbId);
ajax.start();
};
Feng.confirm("是否删除?", operation);
};
// 渲染表格
var tableResult = table.render({
elem: '#' + DatabaseInfo.tableId,
url: Feng.ctxPath + '/databaseInfo/list',
page: true,
height: "full-158",
cellMinWidth: 100,
cols: DatabaseInfo.initColumn()
});
// 搜索按钮点击事件
$('#btnSearch').click(function () {
DatabaseInfo.search();
});
// 添加按钮点击事件
$('#btnAdd').click(function () {
DatabaseInfo.openAddDlg();
});
// 导出excel
$('#btnExp').click(function () {
DatabaseInfo.exportExcel();
});
// 工具条点击事件
table.on('tool(' + DatabaseInfo.tableId + ')', function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'edit') {
DatabaseInfo.openEditDlg(data);
} else if (layEvent === 'delete') {
DatabaseInfo.onDeleteItem(data);
}
});
});
/**
* 添加或者修改页面
*/
var DatabaseInfoInfoDlg = {
data: {
dbName: "",
jdbcDriver: "",
userName: "",
password: "",
jdbcUrl: "",
remarks: "",
createTime: ""
}
};
layui.use(['form', 'admin', 'ax'], function () {
var $ = layui.jquery;
var $ax = layui.ax;
var form = layui.form;
var admin = layui.admin;
//让当前iframe弹层高度适应
admin.iframeAuto();
//表单提交事件
form.on('submit(btnSubmit)', function (data) {
var ajax = new $ax(Feng.ctxPath + "/databaseInfo/addItem", function (data) {
Feng.success("添加成功!");
window.location.href = Feng.ctxPath + '/databaseInfo'
}, function (data) {
Feng.error("添加失败!" + data.responseJSON.message)
});
ajax.set(data.field);
ajax.start();
return false;
});
//返回按钮
$("#backupPage").click(function () {
window.location.href = Feng.ctxPath + '/databaseInfo'
});
});
\ No newline at end of file
/**
* 详情对话框
*/
var DatabaseInfoInfoDlg = {
data: {
dbName: "",
jdbcDriver: "",
userName: "",
password: "",
jdbcUrl: "",
remarks: "",
createTime: ""
}
};
layui.use(['form', 'admin', 'ax'], function () {
var $ = layui.jquery;
var $ax = layui.ax;
var form = layui.form;
var admin = layui.admin;
//让当前iframe弹层高度适应
admin.iframeAuto();
//获取详情信息,填充表单
var ajax = new $ax(Feng.ctxPath + "/databaseInfo/detail?dbId=" + Feng.getUrlParam("dbId"));
var result = ajax.start();
form.val('databaseInfoForm', result.data);
//表单提交事件
form.on('submit(btnSubmit)', function (data) {
var ajax = new $ax(Feng.ctxPath + "/databaseInfo/editItem", function (data) {
Feng.success("更新成功!");
window.location.href = Feng.ctxPath + '/databaseInfo'
}, function (data) {
Feng.error("更新失败!" + data.responseJSON.message)
});
ajax.set(data.field);
ajax.start();
return false;
});
//返回按钮
$("#backupPage").click(function () {
window.location.href = Feng.ctxPath + '/databaseInfo'
});
});
\ No newline at end of file
@layout("/common/_container.html",{js:["/assets/databaseInfo/databaseInfo.js"]}){
<div class="layui-body-header">
<span class="layui-body-header-title">数据库信息表管理</span>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-sm12 layui-col-md12 layui-col-lg12">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-form toolbar">
<div class="layui-form-item">
<div class="layui-inline">
<input id="condition" class="layui-input" type="text" placeholder="名称"/>
</div>
<div class="layui-inline">
<button id="btnSearch" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button>
<button id="btnAdd" class="layui-btn icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>
<button id="btnExp" class="layui-btn icon-btn"><i class="layui-icon">&#xe67d;</i>导出</button>
</div>
</div>
</div>
<table class="layui-table" id="databaseInfoTable" lay-filter="databaseInfoTable"></table>
</div>
</div>
</div>
</div>
</div>
<script type="text/html" id="tableBar">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">修改</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delete">删除</a>
</script>
@}
\ No newline at end of file
@layout("/common/_container.html",{js:["/assets/databaseInfo/databaseInfo_add.js"]}){
<div class="layui-body-header">
<span class="layui-body-header-title">添加</span>
</div>
<div class="layui-fluid " style="">
<div class="layui-card">
<div class="layui-card-body">
<form id="databaseInfoForm" lay-filter="databaseInfoForm" class="layui-form model-form" style="max-width: 700px;margin: 40px auto;">
<input name="dbId" type="hidden"/>
<div class="layui-form-item">
<label class="layui-form-label">数据库名称<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input id="dbName" name="dbName" placeholder="数据库名称" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">JDBC驱动<span style="color: red;">*</span></label>
<div class="layui-input-block">
<select name="jdbcDriver">
<option value="com.mysql.cj.jdbc.Driver">com.mysql.cj.jdbc.Driver</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">JDBC账号<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input id="userName" name="userName" placeholder="账号" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">JDBC密码<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input id="password" name="password" placeholder="密码" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">JDBC URL<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input id="jdbcUrl" name="jdbcUrl" placeholder="jdbc的url" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注</label>
<div class="layui-input-block">
<input id="remarks" name="remarks" placeholder="备注" type="text" class="layui-input" autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-filter="btnSubmit" lay-submit>&emsp;提交&emsp;</button>
<button class="layui-btn layui-btn-primary" type="button" id="backupPage">&emsp;返回&emsp;</button>
</div>
</div>
</form>
</div>
</div>
</div>
@}
\ No newline at end of file
@layout("/common/_container.html",{js:["/assets/databaseInfo/databaseInfo_edit.js"]}){
<div class="layui-body-header">
<span class="layui-body-header-title">修改</span>
</div>
<div class="layui-fluid " style="">
<div class="layui-card">
<div class="layui-card-body">
<form id="databaseInfoForm" lay-filter="databaseInfoForm" class="layui-form model-form" style="max-width: 700px;margin: 40px auto;">
<input name="dbId" type="hidden"/>
<div class="layui-form-item">
<label class="layui-form-label">数据库名称<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input id="dbName" name="dbName" placeholder="数据库名称" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">JDBC驱动<span style="color: red;">*</span></label>
<div class="layui-input-block">
<select name="jdbcDriver">
<option value="com.mysql.cj.jdbc.Driver">com.mysql.cj.jdbc.Driver</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">JDBC账号<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input id="userName" name="userName" placeholder="账号" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">JDBC密码<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input id="password" name="password" placeholder="密码" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">JDBC URL<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input id="jdbcUrl" name="jdbcUrl" placeholder="jdbc的url" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注</label>
<div class="layui-input-block">
<input id="remarks" name="remarks" placeholder="备注" type="text" class="layui-input" autocomplete="off"/>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-filter="btnSubmit" lay-submit>&emsp;提交&emsp;</button>
<button class="layui-btn layui-btn-primary" type="button" id="backupPage">&emsp;返回&emsp;</button>
</div>
</div>
</form>
</div>
</div>
</div>
@}
\ No newline at end of file
......@@ -24,6 +24,13 @@
<version>1.0.0</version>
</dependency>
<!--基础组件-->
<dependency>
<groupId>cn.stylefeng</groupId>
<artifactId>guns-base-db-container</artifactId>
<version>1.0.0</version>
</dependency>
<!--mp代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
......
......@@ -3,13 +3,13 @@ package cn.stylefeng.guns.generator.modular.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.dbcontainer.modular.mapper.DatabaseInfoMapper;
import cn.stylefeng.guns.generator.core.generator.base.model.ContextParam;
import cn.stylefeng.guns.generator.core.generator.guns.GunsExecutor;
import cn.stylefeng.guns.generator.core.generator.restful.mybatisplus.param.MpParam;
import cn.stylefeng.guns.generator.core.util.ConcatUtil;
import cn.stylefeng.guns.generator.core.util.MapperConditionMapHolder;
import cn.stylefeng.guns.generator.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.generator.modular.mapper.DatabaseInfoMapper;
import cn.stylefeng.guns.generator.modular.service.TableService;
import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.reqres.response.SuccessResponseData;
......
package cn.stylefeng.guns.generator.modular.service;
import cn.stylefeng.guns.generator.core.util.DbUtil;
import cn.stylefeng.guns.generator.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.generator.modular.mapper.DatabaseInfoMapper;
import cn.stylefeng.guns.dbcontainer.core.util.DbUtil;
import cn.stylefeng.guns.dbcontainer.modular.entity.DatabaseInfo;
import cn.stylefeng.guns.dbcontainer.modular.mapper.DatabaseInfoMapper;
import cn.stylefeng.roses.core.util.HttpContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
......@@ -27,7 +27,7 @@ layui.use(['layer', 'ax', 'form', 'laydate', 'element', 'table'], function () {
table.render({
elem: '#dbTableList'
, url: Feng.ctxPath + '/db/tableList'
, url: Feng.ctxPath + '/databaseInfo/tableList'
, page: false
, cols: [[
{type: 'checkbox'}
......
@layout("/common/_container.html",{title:"代码生成",bg:"bg-white",js:["/assets/gen/gen.js"]}){
@layout("/common/_container.html",{title:"代码生成",js:["/assets/gen/gen.js"]}){
<div class="layui-body-header">
<span class="layui-body-header-title">代码生成</span>
</div>
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<ul class="layui-tab-title">
<li class="layui-this" id="code_gen">代码生成</li>
<li id="db_config">数据库配置</li>
<li id="add_db">添加数据源</li>
</ul>
<div class="layui-tab-content" style="height: 100px;">
<div class="layui-tab-item layui-show">
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-xs12">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">作者</label>
<div class="layui-input-block">
<input type="text" id="author" name="author" lay-verify="title" autocomplete="off" placeholder="代码生成注释的作者" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">项目包名称 <i class="layui-icon layui-icon-tips" lay-tips="具体到模块包"></i></label>
<div class="layui-input-block">
<input type="text" id="proPackage" name="proPackage" lay-verify="title" autocomplete="off" placeholder="项目包名称,例如:cn.stylefeng.guns.modular.demos" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">模块名称 <i class="layui-icon layui-icon-tips" lay-tips="利用模块名称来为业务分类,本字段可为空"></i></label>
<div class="layui-input-block">
<input type="text" id="modularName" name="modularName" lay-verify="title" autocomplete="off" placeholder="模块名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">表前缀移除 <i class="layui-icon layui-icon-tips" lay-tips="移除表的前缀关键字"></i></label>
<div class="layui-input-block">
<input type="text" id="removePrefix" name="removePrefix" lay-verify="title" autocomplete="off" placeholder="表前缀移除" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">数据源选择</label>
<div class="layui-input-block">
<select id="dataSourceId" name="dataSourceId" lay-filter="dataSourceId">
<option value=""></option>
@for(item in dataSources!){
<option value="${item.dbId}">${item.dbName}</option>
@}
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">选择表</label>
<div class="layui-input-block">
<table class="layui-hide" id="dbTableList" lay-filter="dbTableList"></table>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit="" id="execute">生成代码</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-lg12">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">作者</label>
<div class="layui-input-block">
<input type="text" id="author" name="author" lay-verify="title" autocomplete="off" placeholder="代码生成注释的作者" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">项目包名称 <i class="layui-icon layui-icon-tips" lay-tips="具体到模块包"></i></label>
<div class="layui-input-block">
<input type="text" id="proPackage" name="proPackage" lay-verify="title" autocomplete="off" placeholder="项目包名称,例如:cn.stylefeng.guns.modular.demos" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">模块名称 <i class="layui-icon layui-icon-tips" lay-tips="利用模块名称来为业务分类,本字段可为空"></i></label>
<div class="layui-input-block">
<input type="text" id="modularName" name="modularName" lay-verify="title" autocomplete="off" placeholder="模块名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">表前缀移除 <i class="layui-icon layui-icon-tips" lay-tips="移除表的前缀关键字"></i></label>
<div class="layui-input-block">
<input type="text" id="removePrefix" name="removePrefix" lay-verify="title" autocomplete="off" placeholder="表前缀移除" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">数据源选择</label>
<div class="layui-input-block">
<select id="dataSourceId" name="dataSourceId" lay-filter="dataSourceId">
<option value=""></option>
@for(item in dataSources!){
<option value="${item.dbId}">${item.dbName}</option>
@}
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">选择表</label>
<div class="layui-input-block">
<table class="layui-hide" id="dbTableList" lay-filter="dbTableList"></table>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit="" id="execute">生成代码</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-tab-item">加载中...</div>
<div class="layui-tab-item">加载中...</div>
</div>
</div>
......
......@@ -26,7 +26,7 @@ import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
import static cn.stylefeng.datasource.container.context.DataSourceContext.MASTER_DATASOURCE_NAME;
import static cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext.MASTER_DATASOURCE_NAME;
/**
* 多数据源配置<br/>
......
......@@ -14,10 +14,10 @@ import org.springframework.context.annotation.Configuration;
*/
@Configuration
@MapperScan(basePackages = {"cn.stylefeng.guns.sys.modular.*.mapper",
"cn.stylefeng.guns.generator.modular.mapper",
"cn.stylefeng.guns.modular.*.mapper",
"cn.stylefeng.guns.sms.modular.mapper",
"cn.stylefeng.guns.oauth.modular.mapper"})
"cn.stylefeng.guns.oauth.modular.mapper",
"cn.stylefeng.guns.dbcontainer.modular.mapper"})
public class PluginsConfig {
/**
......
......@@ -15,9 +15,9 @@
*/
package cn.stylefeng.guns.config.datasource;
import cn.stylefeng.datasource.container.context.DataSourceContext;
import cn.stylefeng.datasource.container.context.SqlSessionFactoryContext;
import cn.stylefeng.datasource.container.exception.DataSourceInitException;
import cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext;
import cn.stylefeng.guns.dbcontainer.core.context.SqlSessionFactoryContext;
import cn.stylefeng.guns.dbcontainer.core.exception.DataSourceInitException;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import cn.stylefeng.roses.core.mutidatasource.mybatis.OptionalSqlSessionTemplate;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
......@@ -42,7 +42,7 @@ import org.springframework.util.StringUtils;
import javax.sql.DataSource;
import java.util.Map;
import static cn.stylefeng.datasource.container.context.DataSourceContext.MASTER_DATASOURCE_NAME;
import static cn.stylefeng.guns.dbcontainer.core.context.DataSourceContext.MASTER_DATASOURCE_NAME;
/**
* 多数据源配置<br/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment