html单页面js完成表数据库自动生成带注释的java实体类和简单的增删改查sql

支持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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值