小白日记--返回数据的三种常用封装形式

#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方法哦。

上一篇:php 24小时订单未支付删除订单功能案例


下一篇:原型模式