修复mysql兼容问题

This commit is contained in:
周浩
2016-06-21 16:43:13 +08:00
parent e2c67b4123
commit cc9ee96f0b
9 changed files with 87 additions and 76 deletions

View File

@@ -64,7 +64,7 @@ ALTER TABLE `s_template` COMMENT '模板';
-- Table structure for S_MODULES
-- ----------------------------
CREATE TABLE `s_modules` (
`u_id` VARCHAR(256) NOT NULL PRIMARY KEY
`u_id` VARCHAR(32) NOT NULL PRIMARY KEY
COMMENT 'uid',
`name` VARCHAR(256) NOT NULL
COMMENT '模块名称',
@@ -87,7 +87,7 @@ ALTER TABLE `s_modules` COMMENT '系统模块';
CREATE TABLE `s_module_meta` (
`u_id` VARCHAR(256) NOT NULL PRIMARY KEY
`u_id` VARCHAR(32) NOT NULL PRIMARY KEY
COMMENT 'uid',
`key` VARCHAR(256) NOT NULL
COMMENT '标识',
@@ -118,7 +118,7 @@ INSERT INTO `s_modules` VALUES ('s_logger', '日志管理', 'admin/logger/list.h
-- Table structure for S_RESOURCES
-- ----------------------------
CREATE TABLE `s_resources` (
`u_id` VARCHAR(256) NOT NULL PRIMARY KEY
`u_id` VARCHAR(32) NOT NULL PRIMARY KEY
COMMENT 'uid',
`name` VARCHAR(256) NOT NULL
COMMENT '资源名称',
@@ -159,7 +159,7 @@ ALTER TABLE `s_resources` COMMENT '资源表';
-- Table structure for S_ROLE
-- ----------------------------
CREATE TABLE `s_role` (
`u_id` VARCHAR(256) NOT NULL PRIMARY KEY
`u_id` VARCHAR(32) NOT NULL PRIMARY KEY
COMMENT 'uid',
`name` VARCHAR(256) NOT NULL
COMMENT '角色名称',
@@ -179,7 +179,7 @@ INSERT INTO `s_role` VALUES ('admin', '超级管理员', NULL, '初始数据');
-- Table structure for S_ROLE_MODULES
-- ----------------------------
CREATE TABLE `s_role_modules` (
`u_id` VARCHAR(256) NOT NULL PRIMARY KEY
`u_id` VARCHAR(32) NOT NULL PRIMARY KEY
COMMENT 'uid',
`module_id` VARCHAR(256) NOT NULL
COMMENT '模块id',
@@ -194,7 +194,7 @@ ALTER TABLE `s_role_modules` COMMENT '角色模块绑定表';
-- Table structure for S_SCRIPT
-- ----------------------------
CREATE TABLE `s_script` (
`u_id` VARCHAR(256) NOT NULL PRIMARY KEY
`u_id` VARCHAR(32) NOT NULL PRIMARY KEY
COMMENT 'uid',
`name` VARCHAR(256) NOT NULL
COMMENT '脚本名称',
@@ -219,7 +219,7 @@ ALTER TABLE `s_script` COMMENT '脚本';
-- Table structure for S_USER
-- ----------------------------
CREATE TABLE `s_user` (
`u_id` VARCHAR(64) NOT NULL PRIMARY KEY
`u_id` VARCHAR(32) NOT NULL PRIMARY KEY
COMMENT 'ID',
`username` VARCHAR(64) NOT NULL
COMMENT '用户名',
@@ -245,12 +245,12 @@ ALTER TABLE `s_user` COMMENT '用户表';
-- ----------------------------
-- Records of S_USER
-- ----------------------------
INSERT INTO `s_user` VALUES ('admin', 'admin', '23ec59e119da971084cbd0ba72d230a0', '超级管理员', NULL, NULL, '1', TO_datetime('2015-11-19 12:10:36', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL);
INSERT INTO `s_user` VALUES ('admin', 'admin', '23ec59e119da971084cbd0ba72d230a0', '超级管理员', NULL, NULL, '1', '1991-08-11 12:10:36', NULL, NULL);
-- ----------------------------
-- Table structure for S_USER_ROLE
-- ----------------------------
CREATE TABLE `s_user_role` (
`u_id` VARCHAR(256) NOT NULL PRIMARY KEY
`u_id` VARCHAR(32) NOT NULL PRIMARY KEY
COMMENT 'UID',
`user_id` VARCHAR(256) NOT NULL
COMMENT '用户ID',

View File

@@ -32,9 +32,6 @@ public class FormController extends GenericController<Form, String> {
@Resource
private FormService formService;
@Resource
private HistoryService historyService;
@Override
public FormService getService() {
return this.formService;

View File

@@ -24,21 +24,20 @@ import java.util.*;
*/
public class DefaultSqlParamBuilder {
public String getQuoteStart() {
return "\"";
}
public String getQuoteEnd() {
return "\"";
}
public Dialect getDialect() {
return Dialect.ORACLE;
}
public boolean filedToUpperCase() {
return true;
}
protected static final Map<Class, String> simpleName = new HashMap<>();
private static DefaultSqlParamBuilder instance = new DefaultSqlParamBuilder();
protected PropertyUtilsBean propertyUtils = BeanUtilsBean.getInstance().getPropertyUtils();
protected PropertyUtilsBean propertyUtils = BeanUtilsBean.getInstance().getPropertyUtils();
public DefaultSqlParamBuilder() {
simpleName.put(Integer.class, "int");
simpleName.put(Byte.class, "byte");
@@ -124,7 +123,10 @@ public class DefaultSqlParamBuilder {
listData = Arrays.asList(param.getData());
}
param.setData(listData);
String fields = mappings.keySet().stream().reduce((f1, f2) -> f1 + "," + f2).get();
String fields = mappings.keySet().stream()
.map(str -> new SqlAppender().add(getDialect().getQuoteStart(), filedToUpperCase() ? str.toUpperCase() : str, getDialect().getQuoteEnd()).toString())
.reduce((f1, f2) -> new SqlAppender().add(f1, ",", f2)
.toString()).get();
//批量
int size = listData.size();
SqlAppender batchSql = new SqlAppender();
@@ -164,11 +166,11 @@ public class DefaultSqlParamBuilder {
if (!appender.isEmpty())
appender.add(",");
if (!k.contains(".") || k.split("[.]")[0].equals(tableName)) {
appender.add(tableName, ".", k, " as ");
appender.add(tableName, ".", getDialect().getQuoteStart(), filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), " as ");
} else {
appender.add(k, " as ");
appender.add(getDialect().getQuoteStart(), filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), " as ");
}
appender.addEdSpc(getQuoteStart(), k, getQuoteEnd());
appender.addEdSpc(getDialect().getQuoteStart(), k, getDialect().getQuoteEnd());
});
if (appender.isEmpty()) return "*";
return appender.toString();
@@ -187,7 +189,7 @@ public class DefaultSqlParamBuilder {
if (!appender.isEmpty())
appender.add(",");
Map<String, Object> config = ((Map) fieldConfig.get(k));
appender.add(k, "=", "#{data.", v);
appender.add(getDialect().getQuoteStart(), filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), "=", "#{data.", v);
if (config != null) {
Object jdbcType = config.get("jdbcType"),
javaType = config.get("javaType");

View File

@@ -11,6 +11,11 @@ public class MysqlParamBuilder extends DefaultSqlParamBuilder {
public MysqlParamBuilder() {
}
@Override
public boolean filedToUpperCase() {
return false;
}
@Override
public Dialect getDialect() {
return Dialect.MYSQL;
@@ -20,13 +25,4 @@ public class MysqlParamBuilder extends DefaultSqlParamBuilder {
return instance;
}
@Override
public String getQuoteStart() {
return "`";
}
@Override
public String getQuoteEnd() {
return "`";
}
}

View File

@@ -5,44 +5,56 @@
<mapper namespace="BasicMapper">
<!--通用查询条件-->
<sql id="buildWhere">
${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildWhere(resultMapId,$tableName,#this['_parameter'].terms)}
${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildWhere(resultMapId,tableName,#this['_parameter'].terms)}
</sql>
<!--生成查询字段-->
<sql id="buildSelectField">
${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildSelectFields(resultMapId,#this['_parameter'])}
${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildSelectFields(resultMapId,tableName,#this['_parameter'])}
</sql>
<!--生成修改字段-->
<sql id="buildUpdateField">
<set>
${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildUpdateFields(resultMapId,#this['_parameter'])}
</set>
<set>
${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildUpdateFields(resultMapId,#this['_parameter'])}
</set>
</sql>
<!--生成排序字段-->
<sql id="buildSortField">
${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildOrder(resultMapId,$tableName,#this['_parameter'])}
${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildOrder(resultMapId,tableName,#this['_parameter'])}
</sql>
<!--生成查询sql-->
<sql id="buildSelectSql">
select
<include refid="BasicMapper.buildSelectField"/>
from ${$tableName}
from ${tableName}
<where>
<include refid="BasicMapper.buildWhere"/>
</where>
<include refid="BasicMapper.buildSortField"/>
</sql>
<!--生成删除sql-->
<sql id="buildDeleteSql">
delete ${tableName} from ${tableName}
<where>
<include refid="BasicMapper.buildWhere"/>
<if test="terms.size()==0">
1=2
</if>
</where>
</sql>
<!--生成InsertSql-->
<sql id="buildInsertSql">
insert into ${tableName} ${@org.hsweb.web.mybatis.builder.DefaultSqlParamBuilder@instance().buildInsertSql(resultMapId,#this['_parameter'])}
insert into ${tableName} ${@org.hsweb.web.mybatis.builder.MysqlParamBuilder@instance().buildInsertSql(resultMapId,#this['_parameter'])}
</sql>
<!--生成UpdateSql-->
<sql id="buildUpdateSql">
update ${$tableName}
update ${tableName}
<include refid="BasicMapper.buildUpdateField"/>
<where>
<include refid="BasicMapper.buildWhere"/>
@@ -51,19 +63,10 @@
</if>
</where>
</sql>
<!--生成删除sql-->
<sql id="buildDeleteSql">
delete from ${tableName}
<where>
<include refid="BasicMapper.buildWhere"/>
<if test="terms.size()==0">
u_id is null
</if>
</where>
</sql>
<!--生成查询数量sql-->
<sql id="buildTotalSql">
select count(0) as "total" from ${$tableName}
select count(0) as "total" from ${tableName}
<where>
<include refid="BasicMapper.buildWhere"/>
</where>

View File

@@ -45,7 +45,7 @@
</select>
<select id="selectUsing" parameterType="string" resultMap="FormResultMap">
select * from s_form WHERE using=1 and name=#{name}
select * from s_form WHERE `using`=1 and `name`=#{name}
</select>
<select id="selectLatestList" parameterType="org.hsweb.web.bean.common.QueryParam" resultMap="FormResultMap">

View File

@@ -42,7 +42,7 @@
<where>
<include refid="BasicMapper.buildWhere"/>
<if test="terms.size()==0">
u_id is null
1=2
</if>
</where>
</sql>

View File

@@ -1,12 +1,19 @@
package org.hsweb.web.service.impl.system;
import org.hsweb.ezorm.executor.SqlExecutor;
import org.hsweb.web.bean.common.database.TableField;
import org.hsweb.ezorm.meta.TableMetaData;
import org.hsweb.ezorm.meta.parser.MysqlTableMetaParser;
import org.hsweb.ezorm.meta.parser.OracleTableMetaParser;
import org.hsweb.ezorm.meta.parser.TableMetaParser;
import org.hsweb.web.core.Install;
import org.hsweb.web.core.exception.BusinessException;
import org.hsweb.web.service.system.DataBaseManagerService;
import org.hsweb.web.service.system.SqlExecuteProcess;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.sql.SQLException;
import java.util.List;
/**
@@ -22,18 +29,32 @@ public class DataBaseManagerServiceImpl implements DataBaseManagerService {
@Resource
private SqlExecutor sqlExecutor;
@Override
public List<String> getTableNameList() {
return null;
private TableMetaParser tableMetaParser;
@PostConstruct
public void init() {
switch (Install.getDatabaseType()) {
case "mysql":
tableMetaParser = new MysqlTableMetaParser(sqlExecutor);
break;
case "oracle":
tableMetaParser = new OracleTableMetaParser(sqlExecutor);
break;
}
}
@Override
public List<TableField> getFieldList(String tableName) {
return null;
public List<TableMetaData> getTableList() throws SQLException {
if (tableMetaParser == null) {
throw new BusinessException("表结构解析器不支持");
}
return tableMetaParser.parseAll();
}
@Override
public void executeSQL(String sql, SqlExecuteProcess process) throws Exception {
public void executeSQL(String sql, SqlExecuteProcess process) throws SQLException {
}
}

View File

@@ -1,7 +1,8 @@
package org.hsweb.web.service.system;
import org.hsweb.web.bean.common.database.TableField;
import org.hsweb.ezorm.meta.TableMetaData;
import java.sql.SQLException;
import java.util.List;
/**
@@ -17,17 +18,8 @@ public interface DataBaseManagerService {
*
* @return 表名集合
*/
List<String> getTableNameList();
List<TableMetaData> getTableList() throws SQLException;
/**
* 获取数据库表的字段信息
* 能自动获取数据库类型,并列出表对于的字段
* 当前版本支持数据库:h2,mysqloracle
*
* @param tableName 数据库表名
* @return 字段集合
*/
List<TableField> getFieldList(String tableName);
/**
* 执行sql语句多条sql语句使用[;\n]分割
@@ -35,5 +27,5 @@ public interface DataBaseManagerService {
* @param sql sql语句
* @param process 执行过程回调每执行一个sql都应该调用对应的回调方法
*/
void executeSQL(String sql, SqlExecuteProcess process) throws Exception;
void executeSQL(String sql, SqlExecuteProcess process) throws SQLException;
}