Mybatis 使用@Insert注解 插入多条记录
JSONObject 转 List 的几种方法
软件工程大作业中,想实现一个管理员给多个用户发送消息,这时候前端需要传给后端一个有用户编号的数组。
这边总结几个后端接收前端发来list的几种方法
由
于
前
端
发
送
给
后
端
的
数
据
格
式
为
J
s
o
n
,
后
端
接
收
的
格
式
为
J
s
o
n
由于前端发送给后端的数据格式为Json,后端接收的格式为Json
由于前端发送给后端的数据格式为Json,后端接收的格式为Json
我
们
需
要
将
J
s
o
n
格
式
转
化
为
l
i
s
t
我们需要将Json格式转化为list
我们需要将Json格式转化为list
- 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 提供的,意思是拼接的时候用 , , ,隔开。