文章目录
这一节的主要内容是属性分组查询、新增规格参数属性的功能。
一, 查询全部时增加模糊匹配功能
查询调用的是这个接口product/attrgroup/list/{catelogId}
。
修改结果对应的Service中的方法的代码。
@Override
public PageUtils queryPage(Map<String, Object> params, Long catelogId) {
if (catelogId == null) {
IPage<AttrGroupEntity> page = this.page(new Query<AttrGroupEntity>().getPage(params), new QueryWrapper<>());
return new PageUtils(page);
}
String key = (String)params.get("key");
QueryWrapper<AttrGroupEntity> wrapper = new QueryWrapper<>();
wrapper.eq("catelog_id", catelogId);
if (!StrUtil.isEmpty(key)) {
wrapper.and((obj)->{
obj.eq("attr_group_id",key).or().like("attr_group_name",key);
});
}
IPage<AttrGroupEntity> page = this.page(new Query<AttrGroupEntity>().getPage(params), wrapper);
return new PageUtils(page);
}
二,新增规格参数
新增对应的后台接口是product/attr/save
。
这是代码自动生成工具生成的代码,还不够晚上,前端提交的分组信息没有保存。
为了实现这个功能,在vo包下新增一个AttrVo类。
AttrVo
相对于AttrEntity
多了一个attrGroupId
属性。
Controller
使用AttrVo
封装前端传的数据。
saveAttr的实现即保存了属性信息,也保存了属性和分组的关系。
三,关于vo的知识
在Java开发中,VO(Value Object)、DTO(Data Transfer Object)、TO(Transfer Object)、DO(Data Object)、POJO(Plain Old Java Object)、Entity(实体)和DAO(Data Access Object)是常见的术语,它们用于描述不同层面的数据模型和对象。
总结:
- VO常在Controller层接收接口调用方传来的参数,接口响应的数据也通常封装在VO中
- DTO通常用在服务间相互传递参数
- Entity对应数据库表
- POJO是VO、DTO等的总称
- DAO与VO等区别较大,DAO中通常会定义操作数据的方法,如save()/update()
VO - Value Object(值对象)
- 定义:值对象通常用于表示业务领域中的概念,它们可以看作是业务实体的一部分,通常不包含任何业务逻辑。值对象的实例代表了一组不可变的数据,因此它们常常被设计成不可变类(Immutable Class)。
- 用途:当业务实体过于复杂或者需要将部分属性提取出来单独处理时,可以使用值对象。
- 示例:例如,一个
Address
类可以作为一个值对象来表示用户的地址信息。
DTO - Data Transfer Object(数据传输对象)
- 定义:数据传输对象主要用于不同层之间传递数据,特别是在网络环境中。它们通常包含一些简单的数据属性,而不包含复杂的业务逻辑。
- 用途:在不同的系统或服务之间传输数据时,使用DTO可以隐藏内部数据结构,提供统一的数据接口。
- 示例:例如,一个
UserDTO
类可以用于从前端传输到后端的用户信息。
TO - Transfer Object
- 定义:TO(Transfer Object)是一个泛指,通常与DTO相似,用于在不同层级之间传输数据。
- 用途:与DTO相同,用于在不同系统或服务之间传输数据。
- 示例:可以视为DTO的同义词,例如
UserTO
。
DO - Data Object
- 定义:数据对象通常用于表示数据库中的记录,可以被视为实体类的另一种说法。
- 用途:用于表示数据库表映射到Java的对象,通常包含与数据库表列相对应的字段。
- 示例:例如,一个
UserDO
类可以表示数据库中的用户表。
POJO - Plain Old Java Object(简单的Java对象)
- 定义:POJO是一个普通的Java对象,它没有任何框架特定的限制。它可以是VO、DTO或DO,也可以只是一个简单的Java类。
- 用途:通常用于表示实体类,即数据库表映射到Java的对象,也可以用作VO、DTO的基础类。
- 示例:例如,一个
UserPOJO
类可以表示用户信息。
Entity - 实体
- 定义:实体通常是指业务领域的核心对象,它包含了业务逻辑和规则。
- 用途:在面向对象的设计中,实体类用于表示业务逻辑中的核心对象。
- 示例:例如,一个
UserEntity
类可以表示用户信息,并可能包含一些业务逻辑方法。
DAO - Data Access Object(数据访问对象)
- 定义:数据访问对象用于封装对数据源(如数据库)的访问逻辑,提供了一种将业务逻辑与底层数据存储分离的方法。
- 用途:DAO层负责处理与数据库的交互,例如增删查改操作。
- 示例:例如,一个
UserDAO
接口可以定义用户数据的操作方法,如save()
,find()
等。
总结
- VO:用于封装业务领域的数据,通常是不可变的。
- DTO/TO:用于不同层级间传输数据,一般没有业务逻辑。
- DO/POJO/Entity:用于表示数据库中的记录,可以包含业务逻辑。
- DAO:封装了对数据源的访问逻辑。
在实际开发中,这些概念有时会被混合使用或互换使用,但了解它们对于了解项目结构非常重要,是工作中必须学会的知识。