Java 数据查询,使用 Map 还是实体类封装?

2019-07-23 10:34:56 +08:00
 wishining

目前:使用 mybatis

一般来说,一张表对应一个实体类。但是大多数时候,我们需要关联查询。迄今为止,我所待过公司除了少数查询结果使用实体类接收,其他都是使用 Map 返回(取值的时候比实体类麻烦得多)。那推荐使用实体类、还是 Map、还是看情况两者都用呢?

另外,每张表中的关联字段,在实体类中的对应的属性,应该如何设置好呢?比如有一张 student 表,一张 class 表,student 表中有一个 int 型的 class_id 字段。那我 Student.java 这个类里面对应的 classId 这个字段的类型应该是使用 Integer 还是 Clazz.java 这个类型呢?

上述两个问题,各个大公司中,比较规范的是哪种开发方式呢?

5488 次点击
所在节点    Java
9 条回复
guo8345345
2019-07-23 10:52:49 +08:00
结合使用,单表的 CRUD 也不少。
用 Integer
BestSera
2019-07-23 14:59:54 +08:00
再写个 Vo 类接收,里面可以包括实体类,这样既不像 map 一样太暴露也不会像实体类一样太死板
EastLord
2019-07-25 15:51:13 +08:00
DTO
za8800286
2019-07-25 17:15:20 +08:00
写个 vo 去继承咯 vo 实体类中就写一些拓展字段
zhouhu
2019-08-05 10:25:24 +08:00
实体类啊,不要想着偷懒。( map 一时爽,一直 map 一直爽)
wishining
2019-08-05 11:08:17 +08:00
@zhouhu emmm,偷懒只是副产物,主要我不知道大点的,或者说开发比较规范的公司是什么一个情况。《阿里 Java 开发手册》上也没写。用 map 如果业务都能通过 SQL 解决倒方便,但是有很多时候要在业务层处理,写一堆 get,还要强转类型。。。
wishining
2019-08-05 11:10:10 +08:00
嗯,综合大家的说法,所以是 Dao 层返回 Entity 或者叫 DO,然后业务层对数据关联封装,返回 DTO,
wishining
2019-08-05 11:17:26 +08:00
`Ctrl + Enter` 是直接发送吗 0.0

嗯,接上条。综合大家的说法和我之前在网上搜的一些,是:

1. Dao 层返回 Entity 或者叫 DO (包含连表查询),里面的每个字段与表字段一一对应(包括关联字段)
2. Service 业务层返回 DTO 类,在业务层里面封装关联关系,比如一对多的,“多”的那部分就作为“一”的一个 List 属性
3. 视图层返回 VO 类

比较规范的,是这样吗?
cnzjl
2019-08-19 09:20:01 +08:00
我一般都是拿实体类 domain 去接收,图省事就拿 Map,如果需要一些特别字段,就写个 Vo 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585319

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX