好友
阅读权限10
听众
最后登录1970-1-1
|
PO BO VO DTO POJO DAO DO这些Java中的概念分别指一些什么?
就比如说我用一个实际场景举例子吧,你更好懂,假如有一张user表,里面有几个字段:
| user_id | user_name | pass_word | create_time| dept_id |
假设就这么多吧,一张很基础的表,那么对应Java的写法就是一个类:
class User{private Long userId;private String userName;private String passWord;private LocalDateTime createTime;private Long deptId;//getter setter
那么我现在需要对于User这张表进行增删改查,那么如果我假设你学过Mybatis?还是JPA这种持久层框架的话,或者你只要学过JDBC的话,你就应该知道,Java中肯定需要一个对象来映射数据库的这张表。
User类的每个属性就是数据库表的每一个字段,该类的每一个对象就代表数据库中的每一行,List<User>就代表该表的所有记录。这个User类就被称为PO,一般也不会加PO的说法,这个类一般就是User。
下面来说说DTO和VO。Data Transfer Object和View Object下面用一个实际场景解释一下:比如,User这张表,一般在前端我们会进行分页+条件查询,然后在前端用一个列表组件,对于后端请求过来的数据做渲染。
对于CRUD来说,这也是一个基本的需求。那么假设现在有这样一个情况:假设我们再简化一下情况,我们只做条件查询,我需要按照用户名userName模糊匹配,用户创建时间createTime区间匹配的时候,我后端应该如何写?
我后端应该用一个什么对象来接收前端传过来的请求参数?
这时候我们来想想,User类对象,他还能胜任吗?userName还好说,那create Time的区间怎么表示呢?
显然这时候我们就不能在后端这样写了:public XXX【】 selectUserByCondidition(@RequestBody @ValIDAted User user);
光靠一个User对象我们是不足以接收前端传过来的请求参数的,那你说我可以这样啊:
public XXX【返回值】 selectUserByCondidition(String userName,LocalDateTime startTime,LocalDateTime endTime)
这还只是两个字段的条件,如果字段一但多起来了,你确定这样写?你确定老板看了以后不会让你当场毕业?
所以这时候我们就要用到DTO了,数据传输对象,用于在网络中涉及到数据传输的封装对象。那么此时我们就可以在后端定义这样一个DTO:
public class UserQueryConditionDTO{private String userName;private LocalDateTime startTime;private LocalDateTime endTime;//getter setter validation_annotation constrcutor .... } |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|