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<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-

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,148评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,095评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,261评论 18 399
  • 前些天在微博上看见有人在推荐一部台湾电视剧《荼靡》,自大学期间看过《我可能不会爱你》就再也没看过电视剧的...
    大写的苏子阅读 3,561评论 0 0
  • 越长大越孤单,当叮叮咚咚的节日问候此起彼伏,朋友圈洒满了欢,默默然,和着风的叹息在这个从不缺少热闹的城市悄然声响。...
    芳草幽兰阅读 1,558评论 0 0

友情链接更多精彩内容