美文网首页
JPA表单动态传参

JPA表单动态传参

作者: 了不起的ACER | 来源:发表于2017-09-07 17:21 被阅读0次
一、前提

需求新加了个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<String, String> map) {
        JSONObject jobj = new JSONObject();
        try {
            StringBuffer keys = new StringBuffer("");
            List<String> values = new ArrayList<String>();
            //遍历map参数添加到sql参数中
            for(Entry<String, String> 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<String,String> map = new HashMap<String,String>();
    String jmap = jsonObject.getString("manifest");
    map = (Map<String, String>) JSON.parse(jmap);

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

-end-

相关文章

  • JPA表单动态传参

    一、前提 需求新加了个bean修改的方法,因为不想使用公司的轮子,就自己写了个多参数动态提交的方法,项目的框架是E...

  • Next.js 跳转传参并接收接参

    介绍路由传参,接参使用方法 传参 + 跳转页面接收参数 动态路由传参 + 跳转页面接收参数创建动态路由在pag...

  • Vue 动态路由

    动态路由 动态路由传参

  • react的动态路由

    1. 动态路由传参 建议用这个,刷新不会丢 2 query传参 3. state传参

  • Vue实战第二天

    路由组件传参 动态路由传参 静态路由传参 函数传参htm5 history 模式 设置通用路由,找不到页面跳转自定...

  • form

    表单验证 验证成功后执行的方法3.post传参

  • Pentaho CDE 动态传参

    Pentaho CDE 动态传参 最近有网友说在CDE报表设计的时候参数是写死的,要如何动态传参,网上可用的资料少...

  • DataX 动态传参

    在实际应用当中,往往会需要动态传入分区字段,那么在json文件中,可以选择${参数值}来进行传参 相应的在执行命令...

  • 动态路由传参

    为什么有路由组件传参 如果用$route的方法,会导致它与对应的路由有高度的耦合(也就是说,$route的组件传参...

  • vue路由的介绍(二)--vue动态路由和get的传值

    vue动态路由和get的传值---->同属于路由的传参 1,vue动态路由: 动态路由的配置: ①,在配置路由时加...

网友评论

      本文标题:JPA表单动态传参

      本文链接:https://www.haomeiwen.com/subject/ytgijxtx.html