java对json数组格式的字符串的处理

public int insertUser(Users user) {


        Users users = userDao.selectUserByName(user.getUsername());
     if (users != null) {
            throw new RuntimeException("用户名已存在");
        }
            String password = MD5Tools.MD5(user.getPassword());
            user.setPassword(password);
            user.setCreatetime(new Date());
        String positionId = user.getPositionId();
        List<Map> maps = JSON.parseArray(positionId, Map.class);
        StringBuilder sb =new StringBuilder();
        for(Map map: maps){
            Map map1 = userDao.selectPositionNameById(map);
            sb.append(map1.get("dname"));
            sb.append(":");
            sb.append(map1.get("cname"));
            sb.append(",");
        }
        user.setPositionId(sb.substring(0,sb.length()-1));
        userDao.insertUser(user);

    return user.getId();
    }

前端传了[{"pId",23},{"id",24,{"pId",34,"id",12}]名为positionId和一些其他参数的对象过来,.

                data: {positionId:params.positionId,name:params.name,username:params.username,password:params.password,birthday:params.birthday,sex:params.sex,content:params.content},


后端怎么接受呢。对于我菜鸟一脸懵,摸索了一下,在Control里面我们可以用字符串或数组来接收。如果是字符串来接收,直接接受一个实体对象

public String add(Users  params) {}
如果说用数组来接受,就
   public String add(Users  params,@RequestParam ("strings") String[] strings){}
然后用','接收。但是实体类里面的对positionId的get,set方法
依然返回各String,因为数据库就不能存储数组。

先放出我的Seviceimpl类里面的插入数组方法,因为我对json数据的处理现在前段传数据到后端来处理了。

  public int insertUser(Users user) {
        Users users = userDao.selectUserByName(user.getUsername());
     if (users != null) {
            throw new RuntimeException("用户名已存在");
        }
            String password = MD5Tools.MD5(user.getPassword());
            user.setPassword(password);
            user.setCreatetime(new Date());
        String positionId = user.getPositionId();
        List<Map> maps = JSON.parseArray(positionId, Map.class);
        StringBuilder sb =new StringBuilder();
        for(Map map: maps){
            Map map1 = userDao.selectPositionNameById(map);
            sb.append(map1.get("dname"));
            sb.append(":");
            sb.append(map1.get("cname"));
            sb.append(",");
        }
        user.setPositionId(sb.substring(0,sb.length()-1));
        userDao.insertUser(user);

    return user.getId();
    }

这里先想好我要以什么格式来显示多个(部门,职位)的集合。这里我们显示为  部门:职位,部门:职位的格式。在插入数据之前获取position_id,用get方法。


 <select id="selectPositionNameById" parameterType="map" resultType="map">
        select d.department_name dname,c.position_name cname from department d,com_position c
        where d.id = #{pId} and c.id=#{id} limit 1
    </select>

上面是我的mybaties语句,注意要两张表的要显示的相同名字起别名

Dao 

public Map selectPositionNameById(Map<String,Object> map);

输入参数是一个map。其实都不要怎么麻烦,直接输入参数一个string就可以了。

其实对于这个得到个String,然后他又转为一个List<map>,还是有很多疑惑。为什么转为map,它获取到的就是一个json数组索引大小的list了呢。原因是[{"pId",23},{"id",24,{"pId",34,"id",12}]是json格式的数据。这个JSON.parseArray(,)可以直接json格式的字符串转为数组格式,用list接收。然后这个for(Map map: maps){}就可以循环的拼接出多个显示为  部门名:职位名,部门名:职位名 的格式。然后下面这个拼接字符串我就不知道是什么鬼了。大神说是用来去除最后一个“,”。后来想想就是这样的。在后端解析json数据就完成了



二、我现在要在前端传部门名以及他对应的职位名

前端是zTree插件,用来显示部门名和职位名构成的树的。我要传子节点和他对应的父节点,我的程序思维不足,就在纠结怎么传部门名和对应的职位名,就没想到过这个就是传他的子节点与父节点的名字。一般插件都会有获取父节点的函数的。查看zTree的文档,得到此函数。下面放上我的前端整个界面

<%@ page contentType="text/html; charset=utf-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>人力资源管理系统</title>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css ">
    <link rel="stylesheet" href="${pageContext.request.contextPath}/css/demo.css" type="text/css">
    <link rel="stylesheet" href="${pageContext.request.contextPath}/css/zTreeStyle.css" type="text/css">
    <script type="text/javascript" src="${pageContext.request.contextPath}/Js/jquery-1.4.4.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/Js/jquery.ztree.core.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/Js/jquery.ztree.excheck.js"></script>
    <%--<script type="text/javascript" src="${pageContext.request.contextPath}/Js/jquery.js"></script>--%>
    <%--<script type="text/javascript" src="${pageContext.request.contextPath}/Js/typem.js"></script>--%>
    <script type="text/javascript">
        window.onload = function () {
            var talentSex = $("#talentSex").val();
            $("input[name='sex']").each(function (index, element) {
                if ($(this).val() == talentSex) {
                    $(this).prop("checked", true);
                }
            });
            document.getElementById("username").onblur = function () {
                var name = $("#username").val();
                var filter = /^[0-9A-Za-z.@-_]{6,16}$/;
                var a = "1";
                $.ajax({
                    type: 'POST',
                    url: '${pageContext.request.contextPath}/users/verifyName?name=' + name,
                    contentType: "application/json; charset=utf-8",
                    //data : {"name":name},
                    dataType: 'json',
                    success: function (data) {
                        if (data.code == "000001") {
                            console.info(data.msg)
                            a = data.msg;
                            if (filter.test(name)) {
                                document.getElementById("msg").innerHTML = a + ',格式正确';
                            }

                            else {
                                document.getElementById("msg").innerHTML = '应为数字 字符 . @ - _ 字符组成 6到16个字符';
                                return;
                            }
                            // document.getElementById("msg").innerHTML=data.msg;
                        } else if (data.code == "000002") {
                            a = data.msg;
                            //document.getElementById("msg").innerHTML=data.msg;

                        }

                    }
                });


            }
        }
    </script>
    <script type="text/javascript">
        function formsubmit() {
            var params = {};
            var name = $("#username").val();
            var rel_name = $("#name").val();
            var password = $("#password").val();
            var birthday = $("#birthday").val();//获取值
            var sex = $('input:radio:checked').val();
            var content = $("#content").val();
            var position = $('#citySel').val();

            params.name = rel_name;
            params.username = name;
            params.password = password;
            params.birthday = birthday;
            params.sex = sex;
            params.content = content;
            params.positionId = position;

            if (name == null || "" == name) {
                alert("用户名不能为空");
                return false;
            }
            if (rel_name == null || "" == rel_name) {
                alert("姓名不能为空");
                return;
            }
            if ($("#msg").text() == "用户名不可用") {
                return;
            }

            if (password == null || "" == password) {
                alert("密码不能为空");
                return;
            }
            if (birthday == null || "" == birthday) {
                alert("出生日期不能为空");
                return;
            }
            //console.info(JSON.stringify($('#userForm').serialize()));
            $.ajax({
                type: 'POST',
                url: '${pageContext.request.contextPath}/users/addUser',
                data: {positionId:params.positionId,name:params.name,username:params.username,password:params.password,birthday:params.birthday,sex:params.sex,content:params.content},
                //data:JSON.stringify(params),
                dataType: 'json',
                error: function (data) {
                    alert("请求失败,网络异常")

                },
                success: function (data) {
                    if (data.code == "000000") {
                        alert(data.msg);

                    } else {
                        alert(data.msg);
                    }
                }
            });


        }
    </script>
    <script type="text/javascript">
        <!--
        var zNode;
        var setting = {
            check: {
                enable: true,
                chkboxType: {"Y": "", "N": ""}
            },
            view: {
                dblClickExpand: false
            },
            data: {
                simpleData: {
                    enable: true
                }
            },
            callback: {
                beforeClick: beforeClick,
                onCheck: onCheck
            }
        };
        function getTree() {
            $.post("/hrm/users/assignjob", function (data) {
                zNode = data.data;
                for (var i = 0; i < zNode.length; i++) {
                    if (zNode[i].isParent == 1) {
                        zNode[i].open = true;
                        zNode[i].nocheck = true;
                    }
                }
                $.fn.zTree.init($("#treeDemo"), setting, zNode);

            })
        }
        function beforeClick(treeId, treeNode) {
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");
            zTree.checkNode(treeNode, !treeNode.checked, null, true);
            return false;
        }

        function onCheck(e, treeId, treeNode) {
            var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
                nodes = zTree.getCheckedNodes(true),
                v = "";
           // vs = [];
            /*va = "";*/
            for (var i = 0, l = nodes.length; i < l; i++) {
                v +=nodes[i].getParentNode().name+":"+ nodes[i].name + ",";

//                var c={};//传入一个对象
                c.pId=nodes[i].pId;
                c.id=nodes[i].id+100000000;
//                vs.push(c);

            }

            if (v.length > 0) v = v.substring(0, v.length - 1);
            var cityObj = $("#citySel");
            cityObj.attr("value", v);
            /*if (vs.length > 0) v = vs.substring(0, v.length - 1);*/
            var cityObj2 = $("#assignId2");
        //    cityObj2.attr("value", JSON.stringify(vs));

        }

        function showMenu() {
            var cityObj = $("#citySel");
            var cityOffset = $("#citySel").offset();
            $("#menuContent").css({
                left: cityOffset.left + "px",
                top: cityOffset.top + cityObj.outerHeight() + "px"
            }).slideDown("fast");

            $("body").bind("mousedown", onBodyDown);
        }
        function hideMenu() {
            $("#menuContent").fadeOut("fast");
            $("body").unbind("mousedown", onBodyDown);
        }
        function onBodyDown(event) {
            if (!(event.target.id == "menuBtn" || event.target.id == "citySel" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length > 0)) {
                hideMenu();
            }
        }

        $(document).ready(function () {
            getTree();

        });
        //-->
    </script>
    <style type="text/css">
        <!--
        .atten {
            font-size: 12px;
            font-weight: normal;
            color: #F00;
        }

        -->
    </style>

</head>
<body class="ContentBody">
<form id="userForm">
    <div class="MainDiv">
        <table width="99%" border="0" cellpadding="0" cellspacing="0" class="CContent">
            <tr>
                <th class="tablestyle_title">人员信息录入</th>
            </tr>
            <tr>
                <td class="CPanel">

                    <table width="90%" border="0" cellpadding="0" cellspacing="0" style="width:80%" align="center">
                        <tr>
                            <td align="left">
                                <%--<input type="submit"value="保存" class="button"/> --%>


                            </td>
                        </tr>

                        <TR>
                            <TD width="100%">
                                <fieldset style="height:100%;">
                                    <legend>人员信息</legend>
                                    <table width="100%" border="0" cellpadding="2" cellspacing="1" style="width:100%">

                                        <tr>
                                            <td nowrap align="right" width="9%">用户名:</td>
                                            <td width="36%">
                                                <input name="username" type="text" class="input" id="username"/>
                                                <span class="red">*</span> <span id="msg"></span></td>
                                            <td nowrap align="right" width="9%">真实姓名:</td>
                                            <td width="36%">
                                                <input name="name" type="text" class="input" value="${name}" id="name"/>
                                                <span class="red">*</span> 
                                            </td>

                                        </tr>
                                        <tr>
                                            <td width="12%">
                                                <div align="right">登陆密码:</div>
                                            </td>
                                            <td width="43%">
                                                <input name="password" type="password" class="input" id="password"/>
                                                <span class="red">*</span></td>

                                            <td>
                                                <div align="right"><label for="birthday">出生日期:</label></div>
                                            </td>
                                            <td>
                                                <input name="birthday" TYPE="date" value="<fmt:formatDate value="${birthday }"
                                                                            pattern="yyyy-MM-dd"/>" class="input"
                                                       id="birthday"/>
                                                <span class="red">*</span></td>

                                            <%--<input  name="birthday" id="birth
                                            day" type="text"  />--%>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width="12%">
                                                <div align="right">部门及职位:</div>
                                            </td>
                                            <td width="43%">

                                                <input id="citySel" type="text" readonly style="width:120px;"
                                                       οnclick="showMenu();"/>
                                                <a id="menuBtn" href="#" οnclick="showMenu(); return false;">select</a>
                                                <span class="red">*</span></td>
                                            <input id="assignId2" name="positionId" type="hidden" value=""> 
                                            <td nowrap align="right" width="9%">性别:</td>
                                            <td>
                                                <input id="talentSex" type="hidden" value="${sex}"/>
                                                <input name="sex" type="radio" value="1"> 男
                                                <input name="sex" type="radio" value="0" checked>女
                                            </td>
                                        </tr>

                                        <tr>
                                            <%--<td nowrap align="right">是否管理员:</td>--%>
                                            <%--<td>--%>
                                            <%--<input type="checkbox">--%>
                                            <%--<input type="hidden"  name="isadmin" id="isadmin"></td>--%>
                                            <td> </td>
                                            <td> </td>
                                        </tr>
                                        <tr>
                                            <td nowrap align="right">人员简介:</td>
                                            <td colspan="3">
                                                <textarea name="content" cols="100" rows="6" class="input"
                                                          id="content"></textarea></td>
                                        </tr>
                                    </table>
                                    <br/>
                                </fieldset>
                            </TD>

                        </TR>
                    </TABLE>
                </td>
            </tr>
            <TR>
                <TD colspan="2" align="center" height="50px">
                    <%--<button οnclick="submit()">保存</button>--%>
                    <input name="提交" type="button" class="button" value="保存" οnclick="formsubmit()"> 
                    <input name="重置" type="reset" class="button" value="重置"/>


                </TD>

            </TR>
        </TABLE>
    </div>
    <div id="menuContent" class="menuContent" style="display:none; position: absolute;">
        <ul id="treeDemo" class="ztree" style="margin-top:0; width:180px; height: 300px;"></ul>
    </div>
</form>


</body>
</html>



下面我在放出添加后的用户列表查询语句。

<!--where代表查询所有-->
    <select id="selectAllUser" resultMap="users" parameterType="map">
        select id,job_id,username,name,password,sex,birthday,createtime,position_id,
      CASE WHEN (length(content) <=5) THEN content ELSE CONCAT(left(content,5),'……') END
        as content from users  where 1=1
        <trim>
            <if test="username != null">
                and username like concat(concat('%',#{username}),'%')
            </if>
            <if test="sort ==1 and starTime != null">
                and createtime > #{starTime}
            </if>
            <if test="sort ==1 and endTime != null">
                and createtime < #{endTime}
            </if>
            <if test="sort ==2 and starTime != null">
                and birthday > #{starTime}
            </if>
            <if test="sort ==2 and endTime != null">
                and birthday < #{endTime}
            </if>
            <if test="pageSize != null and pageNum != null">
                order by createtime DESC limit #{pageNum} ,#{pageSize}
            </if>
        </trim>

    </select>

注意那个order by语句是放着where语句后面,也就是</trim>下面,如果有分页就放着分页语句前面就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值