栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

用mybatis将map对象存入mysql数据库的某一列

用mybatis将map对象存入mysql数据库的某一列

最近几天自己在做用springboot将mqtt协议的物联网设备数据存入mangodb数据库中的小demo,突发奇想尝试了一下mysql数据库。记录一下我遇到的问题。数据格式如图,不同的设备body中属性可能会有所不同。

 

一开始是利用阿里的fastjson将body中的每个属性都解析出来,映射到实体类的对应属性,但由于设备body的不确定性,实体类属性无法一一对应。故本人将实体类设计为

 

public class DeviceMesToDatabase implements Serializable {
    private String cmd;
    private String code;
    private String deviceId;
    private Map body;

    public String getCmd() {
        return cmd;
    }

    public void setCmd(String cmd) {
        this.cmd = cmd;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getDeviceId() {
        return deviceId;
    }

    public void setDeviceId(String deviceId) {
        this.deviceId = deviceId;
    }

    public Map getBody() {
        return body;
    }

    public void setBody(Map body) {
        this.body = body;
    }
}

利用map存储body中的属性。

然而,映射到mysql数据库时,问题就来了。如何将map中的所有键值对存入mysql表中的body列?

解决方法:

一开始尝试

            
                
                    #{key}:#{value}
            
            

总是报错,badsqlException...

后来折腾了几个小时,发现问题:

mybatis中的#{property}在生成sql语句时,会自动添加单引号  '  ,因此会生成如下情况的sql语句:

insert into table_name (列1,列2,列3,body) values (值1,值2,值3,'{ 'key1:value1'  'key2:value2'  'key3:value3'  'key4:value4'  }' ) 

由于值4中每个key-value都被单引号包围,造成了错误的sql语法,所以必然报错badsqlException....

解决方法?

看下面:

            
                
                    ${key}:${value}
            
            

 采用${property}不会给属性周围自动添加单引号,此时问题就解决了。

提示:#{}能防止sql注入,${}有sql注入的风险,请根据情况使用。

菜鸟的第一篇文章,写的不好请见谅。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/279996.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号