JPA表单动态传参

一、前提

需求新加了个bean修改的方法,因为不想使用公司的轮子,就自己写了个多参数动态提交的方法,项目的框架是EJB3+JPA,这里记录一下给需要用的人。

三、思路

1.前端根据页面单个表单传递的数据和修改后的表单数据做对比,只将更改过的表单数据传递到后台中;

2.后台得到前端传递的数据,转型为map,根据map的key与value动态的交给JPA Query拼接sql并执行;

3.这里需要注意的是,因为是根据map中的key与value,所以前端传递的key需要与库中的bean表中的属性名称相同。

二、代码

1.dao层

    @Override
    public String updateManifestByCode(String code,Map map) {
        JSONObject jobj = new JSONObject();
        try {
            StringBuffer keys = new StringBuffer("");
            List values = new ArrayList();
            //遍历map参数添加到sql参数中
            for(Entry entry : map.entrySet()){
                if(keys.length()>0){//非第一次添加
                    keys.append(" , "+entry.getKey()+" = ?");
                }else{//第一次添加
                    keys.append(entry.getKey()+" = ?");
                }
                values.add(entry.getValue());
            }
            StringBuffer sql = new StringBuffer("update DPS_MANIFEST_APPLY set ");
            sql.append(keys+" where code = ?");
            System.out.println("当前拼接的sql为:\n"+sql.toString());
            Query query = em.createNativeQuery(sql.toString());
            for (int i = 0; i < values.size(); i++) {
                query.setParameter(i+1, values.get(i));
            }
            query.setParameter(values.size()+1,code);
            int num = query.executeUpdate();
            if(num>0){
                jobj.put("Success", "true");
                jobj.put("Info", "修改成功!正在跳转...");
            }else{
                jobj.put("Success", "false");
                jobj.put("Info", "修改失败!正在返回...");
            }
        } catch (Exception e) {
            jobj.put("Error", "false");
            jobj.put("Info", "发生错误!请重试...");
        }
        
        return jobj.toString();
    }

2.servlet里定义了好了json的格式,所以只对需要处理的数据进行处理就行了

    String code = jsonObject.getString("code");
    Map map = new HashMap();
    String jmap = jsonObject.getString("manifest");
    map = (Map) JSON.parse(jmap);

3.soa前后台分离,所以前台js不是我写的,但是也学到一点东西,对于定义好的对象,是可以直接obj.prop = prop的,我一直以为是需要先定义属性再添加的。

-end-

你可能感兴趣的:(JPA表单动态传参)