你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Mybatis 使用@Insert注解 插入多条记录JSONObject 转 List 的几种方法

2021/11/29 20:57:42

Mybatis 使用@Insert注解 插入多条记录

JSONObject 转 List 的几种方法

软件工程大作业中,想实现一个管理员给多个用户发送消息,这时候前端需要传给后端一个有用户编号的数组。
这边总结几个后端接收前端发来list的几种方法
由 于 前 端 发 送 给 后 端 的 数 据 格 式 为 J s o n , 后 端 接 收 的 格 式 为 J s o n 由于前端发送给后端的数据格式为Json,后端接收的格式为Json JsonJson
我 们 需 要 将 J s o n 格 式 转 化 为 l i s t 我们需要将Json格式转化为list Jsonlist

  • 1. 1. 1. 使用阿里云的JSONObject

JSONObject的源码我还没有完全看懂,有大佬如果对源码有很深的理解,可以指导指导我,JSOBObject继承了JSON类,阿里貌似还有一个FastJson

首先我们需要知道Json数组的格式,举个简单的例子

[1,2,3,4,5] //这是最简单的Json数组
[“a”,“b”,“c”,“d”] //Json数组,内容存的是字符串
Json数组存的内容也可以是对象

具体可以看这篇博客
我的简单理解就是使用 [ ]装起来的数据 ,
同时JSONArray中的每一个元素的类型为JSONObject
方法一:

//JSONObject.getJSONArray
List<Integer> list = p.getJSONArray("list").toJavaList(Integer.class);
//当传递的数据为对象时。
List<Student> stus = p.getJSONArray("stus").toJavaList(Student.class);
// 我们也可以从JSONArray中获得某个元素的值
int adminId = p.getJSONArray("admins").getJSONObject(1).getInteger("adminId");
/*JSONArray中有一个getJSONObject方法,类似于数组取地第几个下标的值,
只不过这时候对象类型为JSONObject,这时候我们在使用JSONObject的get基本类型方法
获得key为“adminId”的元素*/

感觉有时间把源码看一遍会更加清晰,现在暂时就只是会用。

方法二:
下面这种方法非常牛逼,可以说可以转换成任意的形式,转成Map也可以,虽然我还没有使用过。
就一行代码

List<Integer> list1 = JSONObject.parseObject(p.getJSONArray("list").toJSONString(),new TypeReference<ArrayList<Integer>>(){});

写法非常的简单,我们来看看效果。
在这里插入图片描述
我们前端传递一个Json数据,里面包含了一个Json数组,名字叫list,根据代码,p是前端传给后端的JSONObject对象,new TypeReference<>(){}在中括号中填写要转换的数据类型
参考博客
TypeReference似乎也是一个非常牛的东西,好多不会啊,我好菜

使用@Insert注解插入多条记录

直接贴下代码

@Insert("<script> " +
                "insert into news values\n"+
                "  <foreach collection= 'list' item= 'item'  separator=','>\n" +
                    "(#{item.sander_Id},#{item.receiver_Id},#{item.content},#{item.createTime},#{item.state})\n"+
                "</foreach> \n"+
            "</script>")
    void sendNews(@Param(value = "list") List<News> list);

介绍一下@Param注解,用注解来简化xml配置的时候(比如Mybatis的Mapper.xml中的sql参数引入),@Param注解的作用是给参数命名,向上面代码中传入的参数就叫list,item可以理解为传入的list中的一个元素,将他命名为item。

mybatis解析完后,整个mysql语句的逻辑大概是

insert into values (1,1,'a',NOW(),0), (1,2,'a',NOW(),0) 

相当于一个字符串拼接,这个逗号 , , , 实际上是 < f o r e a c h > <foreach> <foreach> 语句中的的separator 提供的,意思是拼接的时候用 , , 隔开。