package org.moon.db.manager;
import com.reeham.component.ddd.model.CachingModelContainer;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.moon.core.init.helper.MenuMappingHelper;
import org.moon.core.init.helper.PermissionMappingHelper;
import org.moon.core.spring.ApplicationContextHelper;
import org.moon.core.spring.config.annotation.Config;
import org.moon.db.manager.repository.DBManagerRepository;
import org.moon.exception.ApplicationRunTimeException;
import org.moon.maintenance.service.SystemSettingService;
import org.moon.rbac.domain.Menu;
import org.moon.rbac.service.PermissionService;
import org.moon.utils.*;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* 数据库管理类
*
* @author Gavin
* @date 2014-3-5
*/
@Component
public class DBManager implements ApplicationContextAware,InitializingBean {
// 可以注入数据库方言..待实现
@Resource
private DBManagerRepository dbManagerRepository;
@Resource
private PermissionService permissionService;
@Resource
private CachingModelContainer cachingModelContainer;
@Resource
private SqlSessionFactoryBean sqlSessionFactoryBean;
@Resource
private SystemSettingService systemSettingService;
private String webPath;
private Logger log = LoggerFactory.getLogger(DBManager.class);
/**
* 数据库安装路径
*/
private String dbInstallDir;
@Config("backup.folder")
private String backupFolder;
@Value("#{db.username}")
private String dbUserName;
@Value("#{db.password}")
private String dbPassword;
private String dataBaseName = "xheart";
/**
* 在设置表中的key
*/
private final String dbHostKey = "db.host";
private final String dbPortKey = "db.port";
private final String dbNameKey = "db.name";
private final String dbUserNameKey = "db.username";
private final String dbPasswordKey = "db.password";
/**
* mysql,mysqldump可执行文件所在的路径
*/
private final String dbExecutableDirKey = "db.executableDir";
/**
* 删除数据表,目前只适用于mysql
* @param tables
*/
public void dropTables(List<String> tables) {
StringBuilder sql = new StringBuilder();
sql.append("SET FOREIGN_KEY_CHECKS = 0;");// 忽略外键
sql.append("Drop table if exists ");
for (String table : tables) {
sql.append(table).append(",");
}
sql.deleteCharAt(sql.length() - 1);
sql.append(" CASCADE ;");
sql.append("SET FOREIGN_KEY_CHECKS = 1;");// 恢复外键检查
dbManagerRepository.executeUpdate(sql.toString());
}
/**
* 创建缺失的数据表
*/
public void createTableIfNecessary() {
batchExecute(Strings.getContentFromInputStream(Resources.load("~schema.config"),"UTF-8"));
}
/**
* 重新加载权限到数据库
*/
public void reLoadPermissions() {
cachingModelContainer.clearModelCache();
permissionService.batchSave(PermissionMappingHelper.getPermissionsMapByCode().values());
}
/**
* 重新加载菜单到数据库
*/
public void reLoadMenus() {
cachingModelContainer.clearModelCache();
for(Menu m:MenuMappingHelper.getMappingMenus()){
m.save();
}
}
public void batchExecute(String sqls) {
batchExecute(Arrays.asList(sqls.split(";")), 500);
}
public void batchExecute(String sqls, int batchSize) {
batchExecute(Arrays.asList(sqls.split(";")), batchSize);
}
public void batchExecute(Iterable<String> sqls) {
batchExecute(sqls, 500);
}
/**
* 批量执行更新语句
* @param sqls
* @param batchSize
*/
public void batchExecute(Iterable<String> sqls, int batchSize) {
SqlSession session = null;
try {
session = sqlSessionFactoryBean.getObject().openSession(ExecutorType.BATCH, false);
int currentTime = 1;
for (String sql : sqls) {
if(StringUtils.isEmpty(StringUtils.trimWhitespace(sql))){
continue;
}
log.debug("prepare to execute {}",sql);
session.update(
DBManagerRepository.class.getName()+".executeUpdate",
Maps.mapIt("sql", sql));
if (currentTime % 500 == 0) {
session.commit();
session.clearCache();
}
currentTime++;
}
session.commit();
} catch (Exception e) {
e.printStackTrace();
if (session != null) {
session.rollback();
}
throw new ApplicationRunTimeException(e);
} finally {
if (session != null) {
session.close();
}
}
}
/**
* 获取数据表
* @return
*/
public List<Map> listTables(){
Connection connection = null;
try {
List<Map> tables = new ArrayList<Map>();
connection = sqlSessionFactoryBean.getObject().openSession().getConnection();
DatabaseMetaData metaData = connection.getMetaData();
String databaseName = getDatabaseName(metaData);
ResultSet tableResultSet = metaData.getTables(databaseName, null, null, null);
while(tableResultSet.next()) {
if("TABLE".equals(tableResultSet.getString("TABLE_TYPE"))) {
tables.add(Maps.mapIt("tableName",tableResultSet.getString("TABLE_NAME"),
"catalogName",tableResultSet.getString("TABLE_CAT"),
"schemaName",tableResultSet.getString("TABLE_SCHEM")));
}
}
return tables;
} catch (Exception e) {
throw new ApplicationRunTimeException(e);
}finally {
if(connection != null){
try {
connection.close();
} catch (SQLException e) {
throw new ApplicationRunTimeException(e);
}
}
}
}
/**
* 获取数据库信息,数据库类型和版本号
* @return
*/
public Map<String,String> getDbInfo(){
Map<String,String> dbInfo = new HashMap<String, String>();
Connection connection = null;
try {
connection = sqlSessionFactoryBean.getObject().openSession().getConnection();
DatabaseMetaData metaData = connection.getMetaData();
dbInfo.put("name",metaData.getDatabaseProductName());
dbInfo.put("version",metaData.getDatabaseProductVersion());
} catch (Exception e) {
throw new ApplicationRunTimeException(e);
}finally {
if(connection != null){
try {
connection.close();
没有合适的资源?快使用搜索试试~ 我知道了~
快速Web开发平台.zip
共1151个文件
html:381个
png:295个
java:228个
0 下载量 191 浏览量
2024-08-20
10:50:32
上传
评论
收藏 8.58MB ZIP 举报
温馨提示
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:项目具体内容可查看/点击本页面下方的*资源详情*,包含完整源码+工程文件+说明(若有)等。【若无VIP,此资源可私信获取】 【本人专注IT领域】:有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为您提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【适合场景】:相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可基于此项目来扩展开发出更多功能 #注 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担 2. 部分字体及插图等来自网络,若是侵权请联系删除,本人不对所涉及的版权问题或内容负法律责任。收取的费用仅用于整理和收集资料耗费时间的酬劳 3. 积分资源不提供使用问题指导/解答
资源推荐
资源详情
资源评论
收起资源包目录
快速Web开发平台.zip (1151个子文件)
~schema.config 4KB
bootstrap.css 124KB
bootstrap.min.css 111KB
font-awesome.css 28KB
bootstrap-responsive.css 22KB
bootstrap-theme.min.css 19KB
font-awesome.min.css 17KB
umeditor.css 17KB
bootstrap-responsive.min.css 16KB
umeditor.min.css 14KB
layer.css 11KB
mathquill.css 9KB
bootstrap-switch.min.css 6KB
zTreeStyle.css 6KB
blue.css 5KB
blue_base.css 5KB
layout-default-latest.css 5KB
datepicker.css 5KB
datepicker.css 5KB
kandytabs.css 4KB
datepicker.css 4KB
datepicker.css 3KB
table.css 3KB
tooltip.css 3KB
layer.ext.css 3KB
image.css 3KB
video.css 3KB
emotion.css 2KB
prism.css 2KB
common.css 2KB
dialog.css 2KB
login.css 2KB
stylesheet.css 1KB
tab_base.css 1KB
index.css 1KB
DBMaintenance.css 988B
formula.css 838B
jquery.autocomplete.css 657B
webuploader.css 515B
icon.css 511B
menu.css 217B
userList.css 185B
WdatePicker.css 182B
WdatePicker.css 182B
changePassword.css 121B
dictionary.css 33B
tab.css 0B
Symbola.eot 869KB
stixgeneral-webfont.eot 451KB
stixgeneralbol-webfont.eot 239KB
stixgeneralbolita-webfont.eot 210KB
stixgeneralitalic-webfont.eot 204KB
fontawesome-webfont.eot 37KB
glyphicons-halflings-regular.eot 20KB
wface.gif 49KB
jxface2.gif 40KB
yface.gif 28KB
bface.gif 27KB
icons.gif 20KB
tface.gif 19KB
fface.gif 18KB
cface.gif 8KB
loading-0.gif 6KB
zTreeStandard.gif 5KB
loading-2.gif 2KB
img.gif 2KB
img.gif 2KB
videologo.gif 2KB
img.gif 2KB
img.gif 2KB
loading.gif 2KB
datePicker.gif 1KB
datePicker.gif 1KB
ok.gif 866B
loading-1.gif 701B
loading.gif 381B
inherit.gif 57B
line_conn.gif 45B
spacer.gif 43B
0.gif 43B
.gitignore 159B
index-7.html 59KB
Menu.html 52KB
MenuServiceImpl.html 44KB
PermissionServiceImpl.html 39KB
UserAction.html 35KB
User.html 35KB
User.html 34KB
overview-tree.html 33KB
UserServiceImpl.html 33KB
serialized-form.html 32KB
Log.html 32KB
MenuService.html 31KB
Restrictions.html 31KB
Role.html 30KB
MenuAction.html 30KB
index-17.html 29KB
Permission.html 28KB
PermissionService.html 28KB
RoleServiceImpl.html 27KB
共 1151 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
热爱技术。
- 粉丝: 2616
- 资源: 7860
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- F1:帮助/help F2:切换相对/坐标值 F3: 显示全部 F4:参考点“自From” F5:切换当前坐标 F6:导航/栅格/智能 F7: 三视图导航开关/guide F8:正交/ortho F9
- 基于Cisco Packet Tracer 6.2的校园网仿真实验.pkt
- A051-基于Spring Boot的网络海鲜市场系统的设计与实现
- 使用WindowsAPI写的一些渗透小工具.zip
- 不要过审 ,不要过审 ,不要过审
- 神经网络的概要介绍与分析
- C#实现下拉列表显示datagridview
- A049-基于Java的实习管理系统的设计与实现
- A048-基于SpringBoot的在线考试系统的设计与实现
- 搜索引擎的概要介绍与分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功