支持Mysql和Oracle,mybatis和ibatis可选。功能主要还是字符串的拼凑完成的,把用把表信息复制过来或者增加后台,就可以生成简单的增删改查了
临时体验点这里 我也不知道地址什么时候失效
主要是用的layui的界面和jQuery。生成的内容如下
能简单复制粘贴的为什么还要码代码…
package com.faker.test
/**
* 说明: xxxxx
* 建立时间: 2019-6-26 11:26:9
* @author: 淡梦如烟
*/
public class Test {
/**主键id*/
private Integer id;
/**开关代码*/
private String key;
/**开关父级代码*/
private String parentKey;
/**开关状态*/
private byte state;
/**启用/禁用*/
private byte disAble;
/**无参构造函数*/
public Test() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
......
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.2//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.faker.test.TestDao">
<sql id="sql">
id AS id, <!-- 主键id -->
KEY AS key, <!-- 开关代码 -->
parent_key AS parentKey, <!-- 开关父级代码 -->
state AS state, <!-- 开关状态 -->
DIS_ABLE AS disAble <!-- 启用/禁用 -->
</sql>
<!--新增一条FAKER_TEST表数据-->
<insert id="insertTest" parameterType="com.faker.test.Test">
INSERT INTO FAKER_TEST(
id, <!-- 主键id -->
KEY, <!-- 开关代码 -->
parent_key, <!-- 开关父级代码 -->
state, <!-- 开关状态 -->
DIS_ABLE <!-- 启用/禁用 -->
)
VALUES(
#{id}, <!-- 主键id -->
#{key}, <!-- 开关代码 -->
#{parentKey}, <!-- 开关父级代码 -->
#{state}, <!-- 开关状态 -->
#{disAble} <!-- 启用/禁用 -->
)
</insert>
<!--修改一条FAKER_TEST表数据-->
<update id="updateTest" parameterType="com.faker.test.Test">
update FAKER_TEST
<set>
<!-- 主键id -->
<if test=" id != null and id != '' ">
id = #{id},
</if>
<!-- 开关代码 -->
<if test=" key != null and key != '' ">
KEY = #{key},
</if>
<!-- 开关父级代码 -->
<if test=" parentKey != null and parentKey != '' ">
parent_key = #{parentKey},
</if>
<!-- 开关状态 -->
<if test=" state != null and state != '' ">
state = #{state},
</if>
<!-- 启用/禁用 -->
<if test=" disAble != null and disAble != '' ">
DIS_ABLE = #{disAble}
</if>
</set>
WHERE
id = #{id}
</update>
<!--删除一条FAKER_TEST表数据-->
<delete id="deleteTest" parameterType="com.faker.test.Test">
DELETE
FROM
FAKER_TEST
WHERE
id = #{id}
</delete>
<!--查询一条FAKER_TEST表数据-->
<select id="selectTest" resultType="com.faker.test.Test" parameterType="com.faker.test.Test">
select
t.id AS id, <!-- 主键id -->
t.KEY AS key, <!-- 开关代码 -->
t.parent_key AS parentKey, <!-- 开关父级代码 -->
t.state AS state, <!-- 开关状态 -->
t.DIS_ABLE AS disAble <!-- 启用/禁用 -->
from klm_Scratch3_Product t
WHERE 1 = 1
<!-- 主键id 字段条件查询 -->
<if test="id != null and id != ''">
AND t.id = #{id}
</if>
<!-- 开关代码 字段条件查询 -->
<if test="key != null and key != ''">
AND t.KEY = #{key}
</if>
<!-- 开关父级代码 字段条件查询 -->
<if test="parentKey != null and parentKey != ''">
AND t.parent_key = #{parentKey}
</if>
<!-- 开关状态 字段条件查询 -->
<if test="state != null and state != ''">
AND t.state = #{state}
</if>
<!-- 启用/禁用 字段条件查询 -->
<if test="disAble != null and disAble != ''">
AND t.DIS_ABLE = #{disAble}
</if>
</select>
</mapper>
页面源码是公开的,拿去用就行了
反正都是一个单页的html,本地也可以运行。
<!--
autoShowCode.html
2019-06-22 淡梦如烟
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>自动生成后台java代码</title>
<!--jquery在线引用 减少打包大小-->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<!--layui在线引用 减少打包大小-->
<link rel="stylesheet" type="text/css" href="https://layui.hcwl520.com.cn/layui/css/layui.css" />
<script src="https://layui.hcwl520.com.cn/layui/layui.js"></script>
</head>
<body>
<blockquote class="layui-elem-quote layui-text">
<span style="color: #0e90d2">根据数据库表字段和注释自动生成后台实体类和SQL文件。</span> 将Mysql或是Oracle的表格数据直接复制过来,每个值用换行分割(复制过来默认这样~),剩下的就交给它吧~ by:<a class="" href="https://www.anlinxi.top">淡梦如烟</a>
</blockquote>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>基础数据输入</legend>
</fieldset>
<form class="layui-form">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">作者</label>
<div class="layui-input-inline">
<input type="text" id="zz" lay-verify="" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">导包路径</label>
<div class="layui-input-inline">
<input type="text" id="dblj" lay-verify="" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">类名</label>
<div class="layui-input-inline">
<input type="text" id="className" lay-verify="" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">表名</label>
<div class="layui-input-inline">
<input type="text" id="bm" lay-verify="" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">数据库类型</label>
<div class="layui-input-inline">
<input type="radio" name="database" value="Mysql" title="Mysql" checked="">
<input type="radio" name="database" value="Oracle" title="Oracle">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">持久层</label>
<div class="layui-input-inline">
<input type="radio" name="dao" value="mybatis" title="mybatis" checked="">
<input type="radio" name="dao" value="ibatis" title="ibatis">
</div>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">表字段</label>
<div class="layui-input-block">
<textarea placeholder="请复制内容" id="tableName" class="layui-textarea" lay-reqtext="表字段是必填项,岂能为空?"></textarea>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">表数据类型</label>
<div class="layui-input-block">
<textarea placeholder="请复制内容" id="tableDataType" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">表注释</label>
<div class="layui-input-block">
<textarea placeholder="请复制内容" id="tableText" class="layui-textarea" lay-reqtext="你想你的表和代码毫无注释?!"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button type="button" class="layui-btn" id="showThis">示范</button>
<button type="button" class="layui-btn" id="wlcs">装维系统读取表信息</button>
<button type="button" class="layui-btn" id="createAttrName">生成属性名称</button>
<button type="button" class="layui-btn" id="createJavaCode">生成后台代码</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
<legend>对应数据信息</legend>
</fieldset>
<table id="attrTable" lay-filter="attrTable"></table>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
<legend>生成代码区域</legend>
</fieldset>
<div>
<pre class="layui-code" lay-title="Java" id="code_java_0"></pre>
<pre class="layui-code" lay-title="Xml" lay-skin="notepad" id="code_sql"></pre>
</div>
<script>
//表格对象
var tableIns;
//一行数据
var rowData = {"id":"","tableValue":"","dataType":"","tableName":"","attrValue":""};
//缓存数据
var rows = [];
$(function () {
layui.use(['form', 'table', 'layer','code'], function(){
var form = layui.form
,layer = layui.layer
,table = layui.table;
//初始化加载表格
loadTable(table);
//按钮事件,生成属性名等
showTable(layer,table,form);
//渲染代码域
layui.code();
})
})
/**
* 按钮事件,生成属性名
*/
function showTable(layer,table,form){
//演示 示例按钮
$("#showThis").on("click",function (e) {
$("#tableName").val("id\n" +
"KEY\n" +
"parent_key\n" +
"state\n" +
"DIS_ABLE\n");
$("#tableDataType").val("int\n" +
"varchar\n" +
"varchar\n" +
"tinyint\n" +
"tinyint\n");
$("#tableText").val("主键id\n" +
"开关代码\n" +
"开关父级代码\n" +
"开关状态\n" +
"启用/禁用\n");
$("#zz").val("淡梦如烟");
$("#dblj").val("com.faker.test");
$("#className").val("Test");
$("#bm").val("FAKER_TEST");
layer.msg("数据填充完毕~");
})
//生成属性名和表单
$("#createAttrName").on("click",function (e) {
//取值
var tableName = $("#tableName").val();
var tableText = $("#tableText").val();
var tableDataType = $("#tableDataType").val();
//验证
if(tableName==null||tableName==undefined||tableName==""||tableName.length<=5){
layer.msg("表字段是必填项,岂能为空?");
return;
}
if(tableText==null||tableText==undefined||tableText==""||tableText.length<=5){
layer.msg("你想要你的代码毫无注释?!");
return;
}
//拆分
var nameArray = tableName.split("\n");
var typeArray = tableDataType.split("\n");
var txetArray = tableText.split("\n");
rows = [];
for(var i=0;i<nameArray.length;i++){
var row = {};
row["id"] = i+"";
row["tableValue"] = nameArray[i];
row["attrValue"] = changeTableToAttrVal(nameArray[i].toLowerCase());
try {
row["tableName"] = txetArray[i];
} catch (e) {
}
//转换数据库类型为java类型
if($(":radio[name=database]:checked").val()=="Oracle"){
row["dataType"] = swicthDataTypeOracle(typeArray,i);
}else{
row["dataType"] = swicthDataTypeMysql(typeArray,i);
}
if(i>=nameArray.length-1){
if(row.tableValue!=""){
rows.push(row);
}
}else{
rows.push(row);
}
}
console.log(rows);
//重新加载
table.reload("attrTable",{
data:rows
});
})
//生成javabean和sql文件
$("#createJavaCode").on("click",function (e) {
var tableName = $("#tableName").val();
//验证
if(tableName==null||tableName==undefined||tableName==""||tableName.length<=5) {
layer.msg("表字段是必填项,岂能为空?");
return;
}
if(rows.length<1){
layer.msg("没有数据,无法生成代码!");
return;
}
//判断有无表字段为空的行数
for(var i=0;i<rows.length;i++){
if(rows[i].tableValue==null||rows[i].tableValue==undefined||rows[i].tableValue==""){
layer.msg("表字段不能为空!");
return;
}
}
//创建javabean实体类代码
var javaBean = createJavaBean();
$("#code_java_0").text(javaBean);
//创建增删改查SQL
var sql = "";
if($(":radio[name=dao]:checked").val()=="ibatis"){
sql = createIbatisSql();
}else{
sql = createMybatisSql();
}
$("#code_sql").text(sql);
layui.code();
})
//装维系统支持
wlcsStart(layer,table,form);
}
/**
* 初始化加载表格
* @param table
*/
function loadTable(table) {
//执行渲染
tableIns = table.render({
id: 'attrTable',
elem: '#attrTable' //指定原始表格元素选择器(推荐id选择器)
,cols: [[
{field: 'id', title: 'ID', width: 80}
,{field: 'tableValue', title: '表字段',edit: 'text'}
,{field: 'tableName', title: '表注释',edit: 'text'}
,{field: 'dataType', title: '类型',edit: 'text'}
,{field: 'attrValue', title: '属性值',edit: 'text'}
,{fixed: 'right', width:150, align:'center', toolbar: '#barDemo'} //这里的toolbar值是模板元素的选择器
]] //设置表头
,text: {
none: '暂无相关数据' //默认:无数据。注:该属性为 layui 2.2.5 开始新增
}
,page:true
,data: []
});
//监听单元格编辑
table.on('edit(attrTable)', function(obj){
var value = obj.value //得到修改后的值
,data = obj.data //得到所在行所有键值
,field = obj.field; //得到字段
//layer.msg('[ID: '+ data.id +'] ' + field + ' 字段更改为:'+ value);
//实时更新表和值对应关系
for(var i=0;i<rows.length;i++){
if(rows[i].id == data.id){
rows[i][field] = value;
layer.msg('更改成功~');
break;
}
}
});
//监听工具条
table.on('tool(attrTable)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
var data = obj.data; //获得当前行数据
var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
var tr = obj.tr; //获得当前行 tr 的DOM对象
if(layEvent === 'del'){ //删除
layer.confirm('真的删除行么', function(index){
//实时更新表和值对应关系
for(var i=0;i<rows.length;i++){
if(rows[i].id == data.id){
rows.splice(i,1);
layer.msg('删除成功~');
break;
}
}
obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
layer.close(index);
//向服务端发送删除指令
});
}
});
}
/**
* 将表字段转换为属性名称
* @param attrValue
* @returns {*}
*/
function changeTableToAttrVal(tableValue) {
var arr = tableValue.split("_");
var attrValue = "";
if(arr.length>1){
attrValue = arr[0];
for(var i=1;i<arr.length;i++){
attrValue += toFirstCodeUpper(arr[i]);
}
}else{
attrValue = tableValue;
}
return attrValue;
}
/**
* 首字母大写
* @param text
* @returns {string}
*/
function toFirstCodeUpper(text) {
return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
}
/**
* 创建javabean实体类代码
* @returns {string} javaBean
*/
function createJavaBean() {
var javaBeanCode = "package "+$("#dblj").val()+"\n";
var f_util = false;
var f_sql = false;
for(var i=0;i<rows.length;i++){
if(rows[i].dataType=="Date"){
f_util = true;
}
if(rows[i].dataType=="Clob"){
f_util = true;
}
}
if (f_util) {
javaBeanCode += "import java.util.Date;\r\n";
}
if (f_sql) {
javaBeanCode += "import java.sql.*;\r\n";
}
javaBeanCode += " \n";
javaBeanCode += "/**\n" +
" * 说明: xxxxx\n" +
" * 建立时间: "+(new Date()).Format("yyyy-M-d h:m:s") +" \n" +
" * @author: "+$("#zz").val()+"\n" +
" */\n";
javaBeanCode += " \n";
javaBeanCode += "public class " + $("#className").val() + " {\n";
javaBeanCode += " \n";
var getterAndSetter = "";
for(var i=0;i<rows.length;i++){
//属性和值
javaBeanCode += " /**"+rows[i].tableName+"*/\n" +
" private "+rows[i].dataType+" "+rows[i].attrValue+";\n";
//get和set方法
getterAndSetter += getAndSetCode(rows[i])+"\r\n";
}
javaBeanCode += " \n";
//构造函数
javaBeanCode += " /**无参构造函数*/\n" +
" public "+$("#className").val()+"() {\n" +
"\n" +
" }\r\n";
javaBeanCode += " \n";
javaBeanCode += getterAndSetter;
javaBeanCode += "}";
return javaBeanCode;
}
/**
* 对Date的扩展,将 Date 转化为指定格式的String
* 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
* 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
* 例子:
* (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
* (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
* @param fmt
* @returns {*}
* @constructor
*/
Date.prototype.Format = function (fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
/**
* 拼凑get和set方法
* @param row 一行数据
* @returns {*}
*/
function getAndSetCode(row) {
var upper = row.attrValue.charAt(0).toUpperCase() + row.attrValue.slice(1)
var text = " public "+row.dataType+" get"+upper+"() {\n" +
" return "+row.attrValue+";\n" +
" }\n";
text += " public void set"+upper+"("+row.dataType+" "+row.attrValue+") {\n" +
" this."+row.attrValue+" = "+row.attrValue+";\n" +
" }\n";
return text;
}
/**
* 拼凑生成Mybatis的sql
* @returns {string} xml文件
*/
function createMybatisSql() {
var insert1 = "";
var insert2 = "";
var update1 = "";
var update2 = "";
var sqlhelp = "";
var select1 = "";
var select2 = "";
var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.2//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n" +
"<mapper namespace=\""+$("#dblj").val()+"."+$("#className").val()+"Dao\">\n";
//循环遍历取值
for(var i=0;i<rows.length;i++){
if(i<rows.length-1){
sqlhelp += " "+rows[i].tableValue+" AS "+rows[i].attrValue+", <!-- "+rows[i].tableName+" -->\n";
insert1 += " "+rows[i].tableValue+", <!-- "+rows[i].tableName+" -->\n";
insert2 += " #{"+rows[i].attrValue+"}, <!-- "+rows[i].tableName+" -->\n";
update1 += " <!-- "+rows[i].tableName+" -->\n" +
" <if test=\" "+rows[i].attrValue+" != null and "+rows[i].attrValue+" != '' \">\n" +
" "+rows[i].tableValue+" = #{"+rows[i].attrValue+"},\n" +
" </if>\n";
select1 += " t."+rows[i].tableValue+" AS "+rows[i].attrValue+", <!-- "+rows[i].tableName+" -->\n";
select2 += " <!-- "+rows[i].tableName+" 字段条件查询 -->\n" +
" <if test=\""+rows[i].attrValue+" != null and "+rows[i].attrValue+" != ''\">\n" +
" AND t."+rows[i].tableValue+" = #{"+rows[i].attrValue+"}\n" +
" </if>\n";
}else{
sqlhelp += " "+rows[i].tableValue+" AS "+rows[i].attrValue+" <!-- "+rows[i].tableName+" -->\n";
insert1 += " "+rows[i].tableValue+" <!-- "+rows[i].tableName+" -->\n";
insert2 += " #{"+rows[i].attrValue+"} <!-- "+rows[i].tableName+" -->\n";
update2 += " <!-- "+rows[i].tableName+" -->\n" +
" <if test=\" "+rows[i].attrValue+" != null and "+rows[i].attrValue+" != '' \">\n" +
" "+rows[i].tableValue+" = #{"+rows[i].attrValue+"}\n" +
" </if>\n";
select1 += " t."+rows[i].tableValue+" AS "+rows[i].attrValue+" <!-- "+rows[i].tableName+" -->\n";
select2 += " <!-- "+rows[i].tableName+" 字段条件查询 -->\n" +
" <if test=\""+rows[i].attrValue+" != null and "+rows[i].attrValue+" != ''\">\n" +
" AND t."+rows[i].tableValue+" = #{"+rows[i].attrValue+"}\n" +
" </if>\n";
}
}
//查询映射
xml += " <sql id=\"sql\">\n"+
sqlhelp +
" </sql>\n";
xml += " \n";
//新增sql
xml += " <!--新增一条"+$("#bm").val()+"表数据-->\n" +
" <insert id=\"insert"+$("#className").val()+"\" parameterType=\""+$("#dblj").val()+"."+$("#className").val()+"\">\n" +
" INSERT INTO "+$("#bm").val()+"(\n" +
insert1 +
" )\n" +
" VALUES(\n" +
insert2 +
" )\n" +
" </insert>\n";
xml += " \n";
//修改sql
xml += " <!--修改一条"+$("#bm").val()+"表数据-->\n" +
" <update id=\"update"+$("#className").val()+"\" parameterType=\""+$("#dblj").val()+"."+$("#className").val()+"\">\n" +
" update "+$("#bm").val()+" \n" +
" <set>\n" +
update1 +
update2 +
" </set>\n" +
" WHERE\n" +
" "+rows[0].tableValue+" = #{"+rows[0].attrValue+"}\n" +
" </update>\n";
xml += " \n";
//删除sql
xml += " <!--删除一条"+$("#bm").val()+"表数据-->\n" +
" <delete id=\"delete"+$("#className").val()+"\" parameterType=\""+$("#dblj").val()+"."+$("#className").val()+"\">\n" +
" DELETE\n" +
" FROM\n" +
" "+$("#bm").val()+"\n" +
" WHERE\n" +
" "+rows[0].tableValue+" = #{"+rows[0].attrValue+"}\n" +
" </delete>\n";
xml += " \n";
//查询sql
xml += " <!--查询一条"+$("#bm").val()+"表数据-->\n" +
" <select id=\"select"+$("#className").val()+"\" resultType=\""+$("#dblj").val()+"."+$("#className").val()+"\" parameterType=\""+$("#dblj").val()+"."+$("#className").val()+"\">\n" +
" select\n" +
select1 +
" from "+$("#bm").val()+" t\n" +
" WHERE 1 = 1 \n" +
select2 +
" </select>\n";
xml += "</mapper>\n";
return xml;
}
/**
* 拼凑生成ibatis的sql
* @returns {string} xml文件
*/
function createIbatisSql() {
var resultMap1 = "";
var insert1 = "";
var insert2 = "";
var update1 = "";
var update2 = "";
var select1 = "";
var select2 = "";
var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
"<!DOCTYPE sqlMap PUBLIC \"-//iBATIS.com//DTD SQL Map 2.0//EN\" \"http://www.ibatis.com/dtd/sql-map-2.dtd\">\n";
xml += "<sqlMap namespace="+$("#className").val()+">";
//typeAlias $("#dblj").val()+"."+$("#className").val()
xml += " <typeAlias alias=\""+$("#className").val()+"_typeAlias\" type=\""+$("#dblj").val()+"."+$("#className").val()+"\"/>\n";
xml += " \n";
//循环遍历取值
for(var i=0;i<rows.length;i++){
if(i<rows.length-1){
resultMap1 += " <result property=\""+rows[i].attrValue+"\" column=\""+rows[i].tableValue+"\" /><!-- "+rows[i].tableName+" -->\n";
insert1 += " "+rows[i].tableValue+", <!-- "+rows[i].tableName+" -->\n";
insert2 += " #"+rows[i].attrValue+"#, <!-- "+rows[i].tableName+" -->\n";
update1 += " <!-- "+rows[i].tableName+" -->\n" +
" <isNotEmpty property=\""+rows[i].attrValue+"\" prepend=\",\">\n" +
" "+rows[i].tableValue+" = #"+rows[i].attrValue+"#\n" +
" </isNotEmpty>\n";
select1 += " t."+rows[i].tableValue+" AS "+rows[i].attrValue+", <!-- "+rows[i].tableName+" -->\n";
select2 += " <!-- "+rows[i].tableName+" 字段条件查询 -->\n" +
" <isNotEmpty property=\""+rows[i].attrValue+"\">\n" +
" AND t."+rows[i].tableValue+" = #"+rows[i].attrValue+"#\n" +
" </isNotEmpty>\n";
}else{
resultMap1 += " <result property=\""+rows[i].attrValue+"\" column=\""+rows[i].tableValue+"\" /><!-- "+rows[i].tableName+" -->\n";
insert1 += " "+rows[i].tableValue+" <!-- "+rows[i].tableName+" -->\n";
insert2 += " #"+rows[i].attrValue+"# <!-- "+rows[i].tableName+" -->\n";
update2 += " <!-- "+rows[i].tableName+" -->\n" +
" <isNotEmpty property=\""+rows[i].attrValue+"\">\n" +
" "+rows[i].tableValue+" = #"+rows[i].attrValue+"#\n" +
" </isNotEmpty>\n";
select1 += " t."+rows[i].tableValue+" AS "+rows[i].attrValue+" <!-- "+rows[i].tableName+" -->\n";
select2 += " <!-- "+rows[i].tableName+" 字段条件查询 -->\n" +
" <isNotEmpty property=\""+rows[i].attrValue+"\">\n" +
" AND t."+rows[i].tableValue+" = #"+rows[i].attrValue+"#\n" +
" </isNotEmpty>\n";
}
}
//resultMap
xml += " <resultMap id=\""+$("#className").val()+"_id\" class=\""+$("#className").val()+"_typeAlias\">\n" +
resultMap1 +
" </resultMap>\n";
xml += " \n";
//新增sql
xml += " <!--新增一条"+$("#bm").val()+"表数据-->\n" +
" <insert id=\"insert"+$("#className").val()+"\" parameterClass=\""+$("#dblj").val()+"."+$("#className").val()+"\">\n" +
" INSERT INTO "+$("#bm").val()+"(\n" +
insert1 +
" )\n" +
" VALUES(\n" +
insert2 +
" )\n" +
" </insert>\n";
xml += " \n";
//修改sql
xml += " <!--修改一条"+$("#bm").val()+"表数据-->\n" +
" <update id=\"update"+$("#className").val()+"\" parameterClass=\""+$("#dblj").val()+"."+$("#className").val()+"\">\n" +
" update "+$("#bm").val()+" \n" +
" SET\n" +
update1 +
update2 +
" WHERE\n" +
" "+rows[0].tableValue+" = #"+rows[0].attrValue+"#\n" +
" </update>\n";
//删除sql
xml += " <!--删除一条"+$("#bm").val()+"表数据-->\n" +
" <delete id=\"delete"+$("#className").val()+"\" parameterClass=\""+$("#dblj").val()+"."+$("#className").val()+"\">\n" +
" DELETE\n" +
" FROM\n" +
" "+$("#bm").val()+"\n" +
" WHERE\n" +
" "+rows[0].tableValue+" = #"+rows[0].attrValue+"#\n" +
" </delete>\n";
xml += " \n";
//查询sql
xml += " <!--查询一条"+$("#bm").val()+"表数据-->\n" +
" <select id=\"select"+$("#className").val()+"\" resultClass=\""+$("#dblj").val()+"."+$("#className").val()+"\" parameterClass=\""+$("#dblj").val()+"."+$("#className").val()+"\">\n" +
" select\n" +
select1 +
" from "+$("#bm").val()+" t\n" +
" WHERE 1 = 1 \n" +
select2 +
" </select>\n";
xml += "</mapper>\n";
return xml;
}
/**
* 转换Mysql数据库类型为java类型
* @param typeArray 类型
* @param index 序列
* @returns {string} java类型
*/
function swicthDataTypeMysql(typeArray,index) {
var type = "String";
try {
if (typeArray[index].toLowerCase()== "bit") {
type = "bool";
} else if (typeArray[index].toLowerCase()== ("tinyint")) {
type = "byte";
} else if (typeArray[index].toLowerCase()== ("smallint")) {
type = "short";
} else if (typeArray[index].toLowerCase()== ("int")) {
type = "Integer";
} else if (typeArray[index].toLowerCase()== ("bigint")) {
type = "long";
} else if (typeArray[index].toLowerCase()== ("float")) {
type = "float";
} else if (typeArray[index].toLowerCase()== ("decimal")
|| typeArray[index].toLowerCase()== ("numeric")
|| typeArray[index].toLowerCase()== ("real")) {
type = "double";
} else if (typeArray[index].toLowerCase()== ("money")
|| typeArray[index].toLowerCase()== ("smallmoney")) {
type = "double";
} else if (typeArray[index].toLowerCase()== ("varchar")
|| typeArray[index].toLowerCase()== ("char")
|| typeArray[index].toLowerCase()== ("nvarchar")
|| typeArray[index].toLowerCase()== ("nchar")) {
type = "String";
} else if (typeArray[index].toLowerCase()== ("datetime")
|| typeArray[index].toLowerCase()== ("date")) {
type = "Date";
}
else if (typeArray[index].toLowerCase()== ("image")) {
type = "Blob";
} else if (typeArray[index].toLowerCase()== ("text")) {
type = "Clob";
}
} catch (e) {
type = "String";
console.warn(e);
}
return type;
}
/**
* 转换Oracle数据库类型为java类型
* @param typeArray 类型
* @param index 序列
* @returns {string} java类型
*/
function swicthDataTypeOracle(typeArray,index) {
var type = "String";
try {
if (typeArray[index].toUpperCase() == "VARCHAR2" || typeArray[index].toUpperCase() == "CHAR") {
type = "String";
} else if (typeArray[index].toUpperCase() == "NUMBER") {
type = "Integer";
}
else if (typeArray[index].toUpperCase() == "DATE") {
type = "Date";
}
} catch (e) {
type = "String";
console.warn(e);
}
return type;
}
/**
* 浪潮装维系统支持
* 现在在做的项目,提高点效率
* @param layer 弹出层
* @param table table
*/
function wlcsStart(layer,table,form){
var url = "";
if(localStorage['url']!=null&&localStorage['url']!=undefined&&localStorage['url']!=""){
url = localStorage['url'];
}else{
url = "http://localhost:8091/xjwlcs/installBaseAction.do?method=getDatabaseInfo";
}
var content = "<p>该代码会直接读取表名和字段名,有较大的<span style='color:#ff0000;'>安全隐患</span>。不用时请一定屏蔽掉! 不用时请一定屏蔽掉! 不用时请一定屏蔽掉!</p>" +
"<div class=\"layui-form-item layui-form\">\n" +
" <div class=\"layui-inline\">\n" +
" <label class=\"layui-form-label\">请求路径</label>\n" +
" <div class=\"layui-input-inline\">\n" +
" <input type=\"text\" id=\"qqlj\" lay-verify=\"\" value=\""+url+"\" autocomplete=\"off\" placeholder=\"\" class=\"layui-input\">\n" +
" </div>\n" +
" </div>\n" +
" <div class=\"layui-inline\">\n" +
" <label class=\"layui-form-label\">表名</label>\n" +
" <div class=\"layui-input-inline\">\n" +
" <div class=\"layui-input-block\">\n" +
" <select name=\"bm\" lay-verify=\"required\" id='biaoming' lay-search=\"\">\n" +
" <option value=\"\">还未读取表名</option>\n" +
" </select>\n" +
" </div>" +
" </div>\n" +
" </div>" +
"</div>" +
"<pre class=\"layui-code\" lay-title=\"java\" id=\"wlcs_code\">" +
" /**\n" +
" * 自动生成实体类的后台代码支持\n" +
" */\n" +
" public String getDatabaseInfo(InstallBaseForm form, HttpServletRequest request, HttpServletResponse response, User user, int page, int pageSize, int startRow, int endRow) throws Exception {\n" +
" Map map = new HashMap();\n" +
" //添加同意跨域的响应头\n" +
" response.setHeader(\"Access-Control-Allow-Origin\",\"*\");\n" +
" response.setHeader(\"Access-Control-Allow-Methods\",\"GET,POST\");\n" +
" String db_method = request.getParameter(\"db_method\");\n" +
" String table_name = request.getParameter(\"table_name\");\n" +
" StringBuffer sql= new StringBuffer();\n" +
" if(\"all_table_name\".equals(db_method)){\n" +
" sql.append(\"select table_name from user_tables order by table_name\");\n" +
" }else if(\"this_table_name\".equals(db_method)){\n" +
" sql.append(\"select ucc.column_name, atc.data_type, ucc.comments\\n from user_col_comments ucc\\n left join user_tab_cols atc\\n on ucc.table_name = atc.table_name and ucc.column_name = atc.column_name\\n where ucc.table_name = '\");\n" +
" sql.append(table_name).append(\"' order by ucc.column_name\");\n" +
" }else{\n" +
" map.put(\"code\",\"error\");\n" +
" map.put(\"msg\",\"方法名不正确\");\n" +
" toWrite(ObjectToJsonString(map), response);\n" +
" return null;\n" +
" }\n" +
" List list = DBUtil.list(sql.toString());\n" +
" map.put(\"code\",\"ok\");\n" +
" map.put(\"msg\",\"成功\");\n" +
" map.put(\"list\",list);\n" +
" toWrite(ObjectToJsonString(map), response);\n" +
" return null;\n" +
" }" +
"</pre>";
$("#wlcs").on("click",function (e) {
var open1 = layer.open({
content: content
,title :'浪潮装维系统读取表字段'
,area :'80%'
,btn: ['已经添加后台支持并登陆,读取表名', '读取表结构信息','还未添加后台代码']
,yes: function(index, layero){
//按钮【按钮一】的回调
//加载表名
loadTableName(layer,table,form);
}
,btn2: function(index, layero){
//按钮【按钮二】的回调
return loadTableAttr(layer,table,form);
//return false 开启该代码可禁止点击该按钮关闭
},btn3: function(index, layero){
//按钮【按钮二】的回调
layer.msg("请先在后台InstallBaseAction中添加代码支持~");
//return false 开启该代码可禁止点击该按钮关闭
}
,cancel: function(){
//右上角关闭回调
//return false 开启该代码可禁止点击该按钮关闭
}
});
form.render('select');
form.render();
layui.code({elem:"#wlcs_code"});
console.log("[info]原请求地址为:http://localhost:8091/xjwlcs/installBaseAction.do?method=getDatabaseInfo")
$("#qqlj").off('input');
$("#qqlj").on("input",function(e){
//获取input输入的值
localStorage['url'] = e.delegateTarget.value;
});
//有值了自动加载表名
// if(localStorage['url']!=null&&localStorage['url']!=undefined&&localStorage['url']!=""){
// loadTableName(layer,table,form);
// }
})
}
/**
* 加载表名
* @param layer 弹出层
* @param table 表
* @param form 表单
*/
function loadTableName(layer,table,form) {
var url = $("#qqlj").val();
var formData = {};
formData['db_method'] = 'all_table_name';
$.ajax({
type:"post",
"url":url,
data:formData,
dataType:"json",
success:function(data) {
//当执行成功后,执行如下代码
console.log(data);
if(data.code=="ok"){
//关闭对话框
var list = data.list;
var options = "";
for(var i=0;i<list.length;i++){
var tableName = list[i];
options += "<option value=\""+tableName+"\">"+tableName+"</option>";
}
$("#biaoming").html(options);
form.render('select');
}else{
layer.msg(data.msg);
}
},
error:function(xml,code) {
console.log(xml.responseText);
layer.alert("提交数据失败,请确认是否在后台添加了支持代码!");
}
});
}
/**
* 加载表属性
* @param layer 弹出层
* @param table 表
* @param form 表单
*/
function loadTableAttr(layer,table,form) {
var _this = this;
var url = $("#qqlj").val();
var tableName = $("#biaoming").val();
if(tableName==""){
layer.msg("请先读取表名!");
return false;
}
var index = layer.load();
var formData = {};
formData['db_method'] = 'this_table_name';
formData['table_name'] = tableName;
$.ajax({
type:"post",
"url":url,
data:formData,
dataType:"json",
success:function(data) {
//当执行成功后,执行如下代码
console.log(data);
if(data.code=="ok"){
//关闭对话框
layer.close(index);
var list = data.list;
var tableName = "";
var tableDataType = "";
var tableText = "";
for(var i=0;i<list.length;i++){
tableName += list[i][0]+"\n";
try {
tableDataType += list[i][1]+"\n";
} catch (e) {
tableDataType += "\n";
}
try {
tableText += list[i][2]+"\n";
} catch (e) {
tableText += "\n";
}
}
$("#tableName").val(tableName);
$("#tableDataType").val(tableDataType);
$("#tableText").val(tableText);
$(":radio[name=database][value=Oracle]").attr("checked","");
$(":radio[name=dao][value=ibatis]").attr("checked","");
form.render('radio');
$("#bm").val(formData['table_name']);
layer.closeAll();
}else{
layer.msg(data.msg);
//关闭
layer.close(index);
}
},
error:function(xml,code) {
console.log(xml.responseText);
//关闭
layer.close(index);
layer.alert("提交数据失败!");
}
});
return false;
}
</script>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
</body>
</html>