diff --git a/admin/src/main/java/com/example/config/SqliteConfig.java b/admin/src/main/java/com/example/config/SqliteConfig.java index d16755b..51dcb4d 100644 --- a/admin/src/main/java/com/example/config/SqliteConfig.java +++ b/admin/src/main/java/com/example/config/SqliteConfig.java @@ -1,10 +1,12 @@ package com.example.config; import com.example.module.admin.ent.Mapping; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.system.ApplicationHome; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; import xyz.wbsite.wsqlite.ObjectClient; @@ -15,12 +17,13 @@ import java.util.ArrayList; @Configuration public class SqliteConfig { - @Value("${dbpath}") - public String dbpath; + @Autowired + public Environment environment; @Bean public ObjectClient registry() { try { + String dbpath = environment.getProperty("dbpath"); if (StringUtils.isEmpty(dbpath)) { ApplicationHome home = new ApplicationHome(getClass()); // 当前运行jar文件 diff --git a/admin/src/main/java/com/example/frame/utils/LocalData.java b/admin/src/main/java/com/example/frame/utils/LocalData.java index ff1d2c4..0903dfa 100644 --- a/admin/src/main/java/com/example/frame/utils/LocalData.java +++ b/admin/src/main/java/com/example/frame/utils/LocalData.java @@ -34,7 +34,7 @@ public class LocalData { temp.putResource("/index.htm"); temp.putResource("/home.htm"); temp.putResource("/app.htm"); - temp.putResource("ajax.example.example"); + temp.putResource(".*"); system = new Token(); system.setId(0); system.setUserId(0); diff --git a/admin/src/main/java/com/example/module/admin/mgr/MappingManagerImpl.java b/admin/src/main/java/com/example/module/admin/mgr/MappingManagerImpl.java index cd584f4..df1f314 100644 --- a/admin/src/main/java/com/example/module/admin/mgr/MappingManagerImpl.java +++ b/admin/src/main/java/com/example/module/admin/mgr/MappingManagerImpl.java @@ -19,6 +19,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import xyz.wbsite.wsqlite.ObjectClient; +import java.sql.SQLException; + /** * MAPPING - 映射 * @@ -50,7 +52,13 @@ public class MappingManagerImpl implements MappingManager { long id = IDgenerator.nextId(); Mapping entity = MapperUtil.map(request, Mapping.class); entity.setId(id); - objectClient.insert(Mapping.class, entity); + try { + int insert = objectClient.insert(Mapping.class, entity); + + System.out.println(); + } catch (SQLException | ClassNotFoundException e) { + e.printStackTrace(); + } response.setId(id); return response; diff --git a/admin/src/main/resources/application-dev.properties b/admin/src/main/resources/application-dev.properties index 3ba9337..5db2c35 100644 --- a/admin/src/main/resources/application-dev.properties +++ b/admin/src/main/resources/application-dev.properties @@ -2,7 +2,7 @@ server.port=8080 server.servlet.context-path=/ spring.mvc.static-path-pattern=/static/** -spring.resources.static-locations=classpath:static/ +spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ spring.application.name=EXAMPLE-WEB spring.main.banner-mode=CONSOLE spring.devtools.restart.enabled=true @@ -16,7 +16,7 @@ web.welcome.page=/index.htm # 需要验证授权, 既访问时组装Token web.url.auth.included=/** # 不需要验证授权, 或该请求有自己的验证机制 -web.url.auth.excluded=/favicon.ico,/static/**,/api,/login.htm,/app +web.url.auth.excluded=/favicon.ico,/static/**,/api,/login.htm,/mapping.htm # 日志配置 logging.path=D:// logging.levels=DEBUG diff --git a/admin/src/main/resources/static/js/ajax_es6.js b/admin/src/main/resources/static/js/ajax_es6.js deleted file mode 100644 index e54d836..0000000 --- a/admin/src/main/resources/static/js/ajax_es6.js +++ /dev/null @@ -1,135 +0,0 @@ -import axios from 'axios' -// 创建axios实例 -const service = axios.create({ - baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url - withCredentials: true, // send cookies when cross-domain requests - method: 'post', // request method - timeout: 5000 // request timeout -}) - -// 添加请求拦截器 -service.interceptors.request.use(config => { - // 在发送请求之前做些什么 - if (config.url === '/upload') { - console.log() - } else { - console.log() - } - return config -}, error => { - // 对请求错误做些什么 - return Promise.reject(error) -}) - -// 添加响应拦截器 -service.interceptors.response.use(response => { - // 对响应数据做点什么 - return response -}, error => { - // 对响应错误做点什么 - const rsp = { errors: [] } - if (!error.response) { - rsp.errors.push({ message: error.message }) - } else { - switch (error.response.status) { - case 401: - rsp.errors.push({ message: '未授权,请登录(401)' }) - break - case 403: - rsp.errors.push({ message: '拒绝访问(403)' }) - break - case 404: - rsp.errors.push({ message: '请求地址错误(404)' }) - break - case 408: - rsp.errors.push({ message: '请求超时(408)' }) - break - case 500: - rsp.errors.push({ message: '服务器内部错误(500)' }) - break - case 501: - rsp.errors.push({ message: '服务未实现(501)' }) - break - default: - rsp.errors.push({ message: '请求错误(' + error.response.status + ')' }) - break - } - } - return Promise.reject(rsp) -}) -export function jsonRequest(config) { - return service.request({ - params: { - method: config.method - }, - url: '/ajax', - headers: { 'Content-Type': 'text/plain' }, - data: config.data - }).then(response => { - return Promise.resolve(response.data) - }, response => { - return Promise.resolve(response) - }) -} -export function fileRequest(config) { - return service.request({ - url: '/upload', - data: config.data, - headers: { 'Content-Type': 'multipart/form-data' }, - onUploadProgress: progressEvent => { - console.log((progressEvent.loaded / progressEvent.total * 100 | 0) + '%') - } - }).then(response => { - return Promise.resolve(response.data) - }, response => { - return Promise.resolve(response) - }) -} - -const ajax = { - example: data => { - return jsonRequest({ - method: 'ajax.example.example', - data: data - }) - }, - fileUpload: file => { - const fd = new FormData() - fd.append('file', file) - return fileRequest({ - data: fd - }) - }, - mappingCreate: data => { - return jsonRequest({ - method:'ajax.admin.mapping.create', - data: JSON.stringify(data), - }) - }, - mappingDelete: data => { - return jsonRequest({ - method:'ajax.admin.mapping.delete', - data: JSON.stringify(data), - }) - }, - mappingUpdate: data => { - return jsonRequest({ - method:'ajax.admin.mapping.update', - data: JSON.stringify(data), - }) - }, - mappingFind: data => { - return jsonRequest({ - method:'ajax.admin.mapping.find', - data: JSON.stringify(data), - }) - }, - mappingGet: data => { - return jsonRequest({ - method:'ajax.admin.mapping.get', - data: JSON.stringify(data), - }) - }, -} - -export default ajax \ No newline at end of file diff --git a/admin/src/main/resources/templates/screen/index.ftl b/admin/src/main/resources/templates/screen/index.ftl index 6509626..a2b9c67 100644 --- a/admin/src/main/resources/templates/screen/index.ftl +++ b/admin/src/main/resources/templates/screen/index.ftl @@ -1,4 +1,4 @@ -
+
+ + + + + + + + + + 搜索 + 重置 + + + + + + + + 新增 + + 导出 + + + + + + + + + + + + 取 消 + 保存 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/admin/src/test/resources/application.properties b/admin/src/test/resources/application.properties index 56fc5aa..a3a2629 100644 --- a/admin/src/test/resources/application.properties +++ b/admin/src/test/resources/application.properties @@ -21,18 +21,6 @@ web.url.auth.excluded=/favicon.ico,/static/**,/api,/login.htm logging.path=D:// logging.levels=DEBUG logging.config=classpath:logback-config.xml -# mysql -spring.datasource.driver-class-name=com.mysql.jdbc.Driver -spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8 -spring.datasource.username=test -spring.datasource.password=123456 -# mybatis -mybatis.mapper-locations=classpath:**/mpr/*.xml -# pagehelper -pagehelper.autoRuntimeDialect=true -pagehelper.reasonable=true -pagehelper.supportMethodsArguments=true -pagehelper.params=count=countSql # jackson 相关配置 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 @@ -60,4 +48,5 @@ spring.freemarker.settings.url_escaping_charset=utf-8 # 文件上传配置 spring.servlet.multipart.resolveLazily=false spring.servlet.multipart.max-file-size=100MB -spring.servlet.multipart.max-request-size=100MB \ No newline at end of file +spring.servlet.multipart.max-request-size=100MB +dbpath= \ No newline at end of file diff --git a/wsqlite/src/main/java/xyz/wbsite/wsqlite/Client.java b/wsqlite/src/main/java/xyz/wbsite/wsqlite/Client.java index 1f98fb8..ebc0a78 100644 --- a/wsqlite/src/main/java/xyz/wbsite/wsqlite/Client.java +++ b/wsqlite/src/main/java/xyz/wbsite/wsqlite/Client.java @@ -11,7 +11,6 @@ import java.sql.*; public class Client { Connection connection; - Statement statement; ResultSet resultSet; String dbFilePath; @@ -38,7 +37,7 @@ public class Client { */ public void execute(String sql) throws SQLException, ClassNotFoundException { try { - getStatement().execute(sql); + executeUpdate(sql); } finally { destroyed(); } @@ -51,27 +50,61 @@ public class Client { * @throws SQLException * @throws ClassNotFoundException */ - public ResultSet executeQuery(String sql) throws SQLException, ClassNotFoundException { - return getStatement().executeQuery(sql); + public ResultSet executeQuery(String sql, Object... args) throws SQLException, ClassNotFoundException { + PreparedStatement preparedStatement = getConnection().prepareStatement(sql); + setArg(preparedStatement, args); + return preparedStatement.executeQuery(); } /** - * 执行sql更新语句 + * 执行sql语句 * - * @param sqls + * @param sql * @throws SQLException * @throws ClassNotFoundException */ - public int executeUpdate(String... sqls) throws SQLException, ClassNotFoundException { - int count = 0; + public int executeUpdate(String sql, Object... args) throws SQLException, ClassNotFoundException { try { - for (String sql : sqls) { - count += getStatement().executeUpdate(sql); - } + PreparedStatement preparedStatement = getConnection().prepareStatement(sql); + setArg(preparedStatement, args); + return preparedStatement.executeUpdate(); } finally { destroyed(); } - return count; + } + + private void setArg(PreparedStatement ps, Object... args) throws SQLException { + for (int i = 0; i < args.length; i++) { + Object arg = args[i]; + + if (arg == null) { + ps.setNull(i + 1, Types.NULL); + } else if (arg instanceof String) { + ps.setString(i + 1, (String) arg); + } else if (arg instanceof Date) { + ps.setDate(i + 1, (Date) arg); + } else if (arg instanceof Time) { + ps.setTime(i + 1, (Time) arg); + } else if (arg instanceof java.util.Date) { + ps.setLong(i + 1, ((java.util.Date) arg).getTime()); + } else if (arg instanceof Boolean) { + ps.setBoolean(i + 1, (Boolean) arg); + } else if (arg instanceof Byte) { + ps.setByte(i + 1, (Byte) arg); + } else if (arg instanceof Short) { + ps.setShort(i + 1, (Short) arg); + } else if (arg instanceof Integer) { + ps.setInt(i + 1, (int) arg); + } else if (arg instanceof Long) { + ps.setLong(i + 1, (long) arg); + } else if (arg instanceof Float) { + ps.setFloat(i + 1, (float) arg); + } else if (arg instanceof Double) { + ps.setDouble(i + 1, (double) arg); + } else if (arg instanceof byte[]) { + ps.setBytes(i + 1, (byte[]) arg); + } + } } /** @@ -89,16 +122,6 @@ public class Client { return connection; } - /** - * 获取数据库Statement对象 - */ - Statement getStatement() throws SQLException, ClassNotFoundException { - if (null == statement) { - statement = getConnection().createStatement(); - } - return statement; - } - /** * 数据库资源关闭和释放 */ @@ -109,10 +132,6 @@ public class Client { resultSet = null; } - if (null != statement) { - statement.close(); - statement = null; - } if (null != connection) { connection.close(); connection = null; diff --git a/wsqlite/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java b/wsqlite/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java index 8c7da51..4c107c7 100644 --- a/wsqlite/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java +++ b/wsqlite/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java @@ -5,10 +5,7 @@ import xyz.wbsite.wsqlite.anonation.TableField; import java.io.File; import java.lang.reflect.Field; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * xyz.wbsite.wsqlite.Client @@ -67,6 +64,9 @@ public class ObjectClient extends Client { } else if (f.getType() == Byte[].class || f.getType() == byte[].class) { sql.append(f.getName().toUpperCase()); sql.append(" BLOB,"); + } else if (f.getType() == Date.class) { + sql.append(f.getName().toUpperCase()); + sql.append(" TIMESTAMP,"); } } } @@ -78,7 +78,7 @@ public class ObjectClient extends Client { } } - public int insert(Class poClass, T po) { + public int insert(Class poClass, T po) throws SQLException, ClassNotFoundException { try { Class aClass = classMap.get(poClass.getName()); if (aClass == null) { @@ -94,39 +94,15 @@ public class ObjectClient extends Client { StringBuffer fieldsSql = new StringBuffer(); StringBuffer valueSql = new StringBuffer(); + Object[] values = new Object[fs.size()]; for (int i = 0; i < fs.size(); i++) { Field f = fs.get(i); f.setAccessible(true); fieldsSql.append(f.getName().toUpperCase()); - - Object value = f.get(po); - if (f.getType() == String.class) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } else if (f.getType() == Boolean.class || f.getType() == boolean.class) { - valueSql.append("'"); - valueSql.append(String.valueOf(value)); - valueSql.append("'"); - } else if (f.getType() == Byte.class || f.getType() == byte.class || - f.getType() == Short.class || f.getType() == short.class || - f.getType() == Character.class || f.getType() == char.class || - f.getType() == Integer.class || f.getType() == int.class || - f.getType() == Long.class || f.getType() == long.class) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } else if (f.getType() == Float.class || f.getType() == float.class || - f.getType() == Double.class || f.getType() == double.class) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } else if (f.getType() == Byte[].class || f.getType() == byte[].class) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } + valueSql.append("?"); + Object o = f.get(po); + values[i] = o; if (i != fs.size() - 1) { fieldsSql.append(","); valueSql.append(","); @@ -138,14 +114,10 @@ public class ObjectClient extends Client { sql.append(valueSql); sql.append(")"); System.out.println("SQL ==> " + sql.toString()); - return executeUpdate(sql.toString()); + return executeUpdate(sql.toString(), values); } } catch (IllegalAccessException e) { e.printStackTrace(); - } catch (SQLException e) { - e.printStackTrace(); - } catch (ClassNotFoundException e) { - e.printStackTrace(); } finally { destroyed(); } @@ -184,47 +156,21 @@ public class ObjectClient extends Client { if (aClass == null) { System.err.println(poClass.getName() + " not found."); } else { + //获取字段列表 + List fs = getFields(poClass); + StringBuffer sql = new StringBuffer(); + Object[] values = new Object[fs.size()]; sql.append("UPDATE "); sql.append(aClass.getSimpleName()); sql.append(" SET "); - //获取字段列表 - List fs = getFields(poClass); - for (int i = 0; i < fs.size(); i++) { Field f = fs.get(i); f.setAccessible(true); sql.append(f.getName()); - sql.append(" = "); - - Object value = f.get(po); - if (f.getType() == String.class) { - sql.append("'"); - sql.append(value); - sql.append("'"); - } else if (f.getType() == Boolean.class || f.getType() == boolean.class) { - sql.append("'"); - sql.append(String.valueOf(value)); - sql.append("'"); - } else if (f.getType() == Byte.class || f.getType() == byte.class || - f.getType() == Short.class || f.getType() == short.class || - f.getType() == Character.class || f.getType() == char.class || - f.getType() == Integer.class || f.getType() == int.class || - f.getType() == Long.class || f.getType() == long.class) { - sql.append("'"); - sql.append(value); - sql.append("'"); - } else if (f.getType() == Float.class || f.getType() == float.class || - f.getType() == Double.class || f.getType() == double.class) { - sql.append("'"); - sql.append(value); - sql.append("'"); - } else if (f.getType() == Byte[].class || f.getType() == byte[].class) { - sql.append("'"); - sql.append(value); - sql.append("'"); - } + sql.append(" = ?"); + values[i] = f.get(po); if (i != fs.size() - 1) { sql.append(","); } @@ -240,7 +186,7 @@ public class ObjectClient extends Client { } System.out.println("SQL ==> " + sql.toString()); - return executeUpdate(sql.toString()); + return executeUpdate(sql.toString(), values); } } catch (IllegalAccessException e) { e.printStackTrace(); @@ -350,9 +296,12 @@ public class ObjectClient extends Client { } else if (f.getType() == Byte[].class || f.getType() == byte[].class) { byte[] v = resultSet.getBytes(f.getName()); f.set(o, v); + } else if (f.getType() == Date.class) { + Date v = resultSet.getDate(f.getName()); + f.set(o, v); } else { - String string = resultSet.getString(f.getName()); - f.set(o, string); + String v = resultSet.getString(f.getName()); + f.set(o, v); } } rsList.add(o);