#1、记录一下第一次参加工作后接触到的数据的三种常用封装形式
##1.1 、首先创建一个user表,里面添加了两条数据
我们查询所有数据来了解一下List<Map<String,Object>>、List<自定义的类对象>、List<Object[ ]>三种数据返回的形式和取数之间的一些区别。
##1.2 、sql语句
select id,name,age,create_time as createTime,node from user;
这里用取别名的方式来进行表字段与pojo对象里面的属性进行关联映射
#2、创建目录结构,提供了三个方法对应三个返回的数据类型
##2.1、创建controller包,在包下创建一个userController类
@RestController//等于@Controller+@ResponseBody
@RequestMapping("user")
public class UserController {
@Autowired
private userService userService;
@RequestMapping("/list1")
public List<Map<String,Object>> list1(){
return userService.queryAll1();
}
@RequestMapping("/list2")
public List<User> list2(){
return userService.queryAll2();
}
@RequestMapping("/list3")
public List<Object[]> list3(){
List<Object[]> list = new ArrayList<>();
List<Map<String, Object>> maps = userService.queryAll3();
//对查询到的数据进行遍历,把每条数据存入object[]中
for (Map<String, Object> map :maps){
Object[] obj = new Object[]{map.get("id"),map.get("name"),map.get("age"),map.get("createTime"),map.get("node")};
list.add(obj);
}
return list;
}
}
##2.2、创建userService接口
public interface userService {
List<Map<String,Object>> queryAll1();
List<User> queryAll2();
List<Map<String,Object>> queryAll3();
}
##2.3创建userService接口的实现类userServiceImpl
@Service
public class userServiceImpl implements userService {
@Autowired
private userMapper userMapper;
@Override
public List<Map<String,Object>> queryAll1() {
List<Map<String, Object>> maps = userMapper.queryAll1();
//对日期格式的转换
for (Map<String,Object> map :maps ){
Object create_time = map.get("createTime");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(create_time);
map.put("createTime",format);
}
return maps;
}
@Override
public List<User> queryAll2() {
List<User> list = userMapper.queryAll2();
System.out.println(list);
return list;
}
@Override
public List<Map<String,Object>> queryAll3() {
List<Map<String, Object>> maps = userMapper.queryAll3();
for (Map<String,Object> map :maps ){
Object createTime = map.get("createTime");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(createTime);
map.put("createTime",format);
}
return maps;
}
}
##2.4、创建数据层接口userMapper
@Mapper
public interface userMapper {
List<Map<String, Object>> queryAll1();
List<User> queryAll2();
List<Map<String,Object>> queryAll3();
}
##2.5创建普通的java类对象POJO,User
@Data//lombok插件提供的注解、编译时自动生成属性的getter和setter方法
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private String node;
}
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)为出参进行的日期数据格式转换;
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)为入参进行的日期数据格式转换;
#3、List<Map<String,Object>>
##3.1、首先在xml文件中配置返回的格式为resultType=“java.util.Map”,xml文件的的sql语句如下:
<select id="queryAll1" resultType="java.util.Map">
select id,name,age,create_time as createTime,node from user;
</select>
##3.2、打断点观察返回的数据形式
在断点的模式下观察,list集合中一共有两条记录(红色箭头),每条记录的大小为size=4(蓝色箭头),在未进行其他配置的情况下,每条记录中的key
的值即为我们返回的字段名(粉色箭头)。值即为每条每条记录相对应的字段对应的值。
##3.3 用postman测试返回的数据类型–url:http://localhost:8088/user/list1
[
{
"id": 1,
"name": "韭菜",
"age": 23,
"createTime": "2021-06-01 08:47:09"
},
{
"id": 2,
"name": "西瓜",
"age": 22,
"createTime": "2021-06-15 08:47:51"
}
]
json字符串中含有两个Map对象,但我们还查询了node指端的值,却并没有显示,观察上面断点即可得知,resultType="java.util.Map"在返回数据的时候是自动省略空值的字段的。
#4、List<自定义的类对象>
##4.1、首先在xml文件中配置resultType="jiucai.demo.XiaoBai.pojo.User"指定对象的映射类,xml文件的的sql语句如下:
<select id="queryAll2" resultType="jiucai.demo.XiaoBai.pojo.User">
select id,name,age,create_time as createTime,node from user;
</select>
##4.2、打断点观察数据返回的类型
可以看出list的集合中有2个对象,对象的属性和值用等号连接。
##4.3用postman测试返回的数据类型–url:http://localhost:8088/user/list2
返回封装好的对象当中没有值的按默认值来显示,这里显示的是null,也可以在对象类中自己定义默认值。
#5、List<Object[ ]>
##5.1这里我们还有返回resultType="java.util.Map"的类型,只是在controller中对数据进行了转换。xml文件的的sql语句如下:
<select id="queryAll3" resultType="java.util.Map">
select id,name,age,create_time as createTime,node from user;
</select>
##5.2断点和3.2一样,我们就看一下用postman测试返回的数据类型–url:http://localhost:8088/user/list3
同样是json串,但里面放置的是两个数组对象,取值的时候根据下标取就可以了。同样没有的值按默认值来处理,显示的是null,不像用对象封装可以在对象的属性上设置默认值,这个并不是调用对象里的get方法哦。