0.0.1-SNAPSHOT
wangbing 5 years ago
parent fc445a8f33
commit 93a4d99f25

@ -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文件

@ -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);

@ -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;

@ -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

@ -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

@ -1,4 +1,4 @@
<div id="index" v-cloak>
<div id="index" v-cloak>
<div id="aside">
<el-menu
:style="{width:(properties.isCollapse?'64px':'200px')}"
@ -281,7 +281,7 @@
handleSelect: function (index) {
switch (index) {
case "1-1":
this.addTab({title: "映射管理", name: "usersManager", url: "about:blank"});
this.addTab({title: "映射管理", name: "mapping", url: "/mapping.htm"});
break;
}
return false;

@ -0,0 +1,248 @@
<div id="app" v-cloak>
<el-card class="box-card">
<el-form :inline="true" :model="vm" ref="vm" label-width="90px">
<el-form-item label="角色名称" prop="roleName">
<el-input v-model="vm.roleName" clearable size="small" placeholder=""></el-input>
</el-form-item>
<el-form-item label="角色代码" prop="roleCode">
<el-input v-model="vm.roleCode" clearable size="small" placeholder=""></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" size="small" icon="el-icon-search" @click="onSearch">搜索</el-button>
<el-button type="warning" size="small" icon="el-icon-refresh-left" @click="onReset('vm')">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="box-card">
<el-row>
<el-col :span="12">
<el-button type="success" size="small" icon="el-icon-plus" @click="onAction(['create',''])">新增
</el-button>
<el-button type="warning" size="small" icon="el-icon-download">导出</el-button>
<el-dialog :title="form.title" :visible.sync="form.dialog">
<el-form :model="form" :rules="formRules" ref="form" label-width="90px"
style="width: 290px;">
<el-form-item label="角色名称" prop="roleName">
<el-input v-model="form.roleName" clearable size="small" placeholder=""></el-input>
</el-form-item>
<el-form-item label="角色代码" prop="roleCode">
<el-input v-model="form.roleCode" clearable size="small" placeholder=""></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="form.dialog = false">取 消</el-button>
<el-button size="small" type="primary" @click="onAction(['save',''])">保存</el-button>
</span>
</el-dialog>
</el-col>
<el-col :span="12">
<el-button-group style="float: right;">
<el-button size="small" icon="el-icon-refresh" @click="onFind"></el-button>
</el-button-group>
</el-col>
</el-row>
<el-table
@selection-change="onSelectionChange"
empty-text="无数据"
:data="result"
size="small"
style="width: 100%">
<el-table-column
align="center"
type="selection"
width="50">
</el-table-column>
<el-table-column
align="center"
prop="id"
label="主键"
width="140">
</el-table-column>
<el-table-column
align="center"
prop="roleName"
label="角色名称">
</el-table-column>
<el-table-column
align="center"
prop="roleCode"
label="角色代码">
</el-table-column>
<el-table-column
align="center"
prop="createTime"
label="创建时间">
</el-table-column>
<el-table-column
align="center"
label="操作">
<template slot-scope="scope">
<el-dropdown size="mini" split-button type="primary" @click="onAction(['roleRes',scope.row])"
@command="onAction">
<i class="el-icon-edit"></i>编辑资源
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="['edit',scope.row]" icon="el-icon-edit">编辑</el-dropdown-item>
<el-dropdown-item :command="['delete',scope.row]" icon="el-icon-delete">删除</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<el-pagination
v-if="vm.totalCount > vm.pageSize"
@current-change="onPage"
:current-page="vm.pageNumber"
:page-size="vm.pageSize"
layout="total, prev, pager, next, jumper"
:total="vm.totalCount">
</el-pagination>
</el-card>
</div>
<style>
#app {
padding: 10px;
}
.box-card {
margin: 10px;
}
</style>
<script>
var app = new Vue({
el: "#app",
data: {
vm: {
roleName: '',
roleCode: '',
pageNumber: 1,
pageSize: 10,
totalCount: 0
},
form: {
title: "",
dialog: false,
id: '',
roleName: '',
roleCode: '',
rowVersion: ''
},
formRules: {
roleName: [
{required: true, message: '不能为空', trigger: 'blur'},
{min: 1, max: 50, message: '长度在 1 到 50 字符', trigger: 'blur'}
],
roleCode: [
{required: true, message: '不能为空', trigger: 'blur'},
{min: 1, max: 50, message: '长度在 1 到 50 个字符', trigger: 'blur'}
],
},
select: [],
result: [],
},
methods: {
onSearch: function () {
this.vm.pageNumber = 1;
this.onFind();
},
onReset: function (form) {
this.$refs[form].resetFields();
nav.w('重置成功');
},
onFind: function () {
ajax.mappingFind(this.vm).then(function (response) {
if (response.errors.length > 0) {
nav.e(response.errors[0].message);
} else {
this.result = response.result;
this.totalCount = Number(response.totalCount);
}
}.bind(this))
},
onPage: function (pageNumber) {
this.vm.pageNumber = pageNumber;
this.onFind();
},
onSelectionChange: function (select) {
this.select = select;
},
onAction: function (arg) {
const action = arg[0];
const item = arg[1];
switch (action) {
case "create":
this.form.title = '新增角色';
this.form.id = '';
this.form.roleName = '';
this.form.roleCode = '';
this.form.dialog = true;
break;
case "save":
if (this.form.id) {
ajax.roleUpdate(this.form).then(function (response) {
if (response.errors.length > 0) {
nav.e(response.errors[0].message);
} else {
this.onFind();
this.form.dialog = false;
}
}.bind(this))
} else {
ajax.roleCreate(this.form).then(function (response) {
if (response.errors.length > 0) {
nav.e(response.errors[0].message);
} else {
this.onFind();
this.form.dialog = false;
}
}.bind(this))
}
break;
case "edit":
this.form.title = '编辑角色';
this.form.id = item.id;
this.form.roleName = item.roleName;
this.form.roleCode = item.roleCode;
this.form.rowVersion = item.rowVersion;
this.form.dialog = true;
break;
case "roleRes":
parent.index.addTab({
title: "编辑角色资源",
name: "roleRes" + item.id,
url: "${Uri.getUrl("/sys/role/roleRes.htm?roleId=")}" + item.id
});
break
case "delete":
this.$confirm('将删除该项, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
ajax.roleDelete({id: item.id}).then(function (response) {
if (response.errors.length > 0) {
nav.e(response.errors[0].message);
} else {
nav.s("删除成功")
this.onFind();
}
}.bind(this))
}.bind(this)).catch(function (action) {
});
break;
}
},
},
created: function () {
},
mounted: function () {
this.onFind();
},
watch: {}
})
</script>

@ -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
@ -61,3 +49,4 @@ 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
dbpath=

@ -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;

@ -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 <T> int insert(Class<T> poClass, T po) {
public <T> int insert(Class<T> 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<Field> fs = getFields(poClass);
StringBuffer sql = new StringBuffer();
Object[] values = new Object[fs.size()];
sql.append("UPDATE ");
sql.append(aClass.getSimpleName());
sql.append(" SET ");
//获取字段列表
List<Field> 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);

Loading…
Cancel
Save

Powered by TurnKey Linux.