使用 mybatis 到底要不要写一对多、一对一关联

2015-10-26 16:03:08 +08:00
 loshine1992

方法一

方法二

方法一在效率上貌似有优势,但写 resultMap 和语句真是不开心
方法二对程序员比较友好,但效率不如方法一,而且 service 层会比较臃肿

不知道大家的项目中都是如何使用的

PS:临时从 Android 调到 Web 这边帮忙, web 技术并不精通,还请大家多多指教

16251 次点击
所在节点    Java
17 条回复
zts1993
2015-10-26 20:28:50 +08:00
不知道。。。我感觉看心情。简单的可以关联一下。。数据量大,感觉就不能这么玩了。。
zkaip
2015-10-26 22:01:28 +08:00
我是主要在 service 层写逻辑, dao 层只简单的做一些关联查询
Lpl
2015-10-27 08:54:39 +08:00
一般在实际开发中我们都使用的是方法一,因为这样子比较适合多人开发吧。而且基本的增删改查可以使用 mybatis 的 xml 文件自动生成的。

resultmap 有个好处是需要什么数据就拿什么数据,不怎么需要 vo 层了。
loshine1992
2015-10-27 09:18:38 +08:00
@Lpl 感谢,知道咋弄拉
loshine1992
2015-10-27 09:36:38 +08:00
@Lpl 还有一个问题请教一下噢,比如我现在存在以下对应关系

* 班级 一对多 学生
* 学生 一对多 科目
* 科目 一对一 老师

那么我需要在查询班级的时候直接把 班级对应学生 学生对应科目 科目对应老师 的**resultMap**都写好然后再写好查询`SQL`语句么

那如果有很复杂的对应关系的时候会不会比较麻烦额。。
domty
2015-10-27 09:49:40 +08:00
单表的查询都是用 mybatis generator 生成 xml,bean 之类的代码,虽然用起来比较啰嗦但是还是还是挺好用的.

多表查询就得自写 xml 的 sql 了以及自设的结果集了,关联查询用 join 感觉还是挺方便的.
thinkmore
2015-10-27 09:54:46 +08:00
多对多好麻烦。如果需要这种直接关联查询出来之后,然后在组装到对应的实体类中去不就行了,当然这里组装麻烦了一点点吧。

数据量小的情况下还是建议多对多的
loshine1992
2015-10-27 09:58:14 +08:00
@domty 感谢回答,目前我采取的也是这种方式😄
loshine1992
2015-10-27 10:04:32 +08:00
@thinkmore 确实,我也觉得这种情况下写 SQL 还是比较麻烦的。。
codeyung
2015-10-27 10:47:41 +08:00
一般都多表 join 返回对象 数据库没有做关联 - - 都是单表自己写 sql
PandaFack
2015-10-27 14:41:45 +08:00
一般都多表 join 返回对象 数据库没有做关联 - - 都是单表自己写 sql + 1
Lpl
2015-10-27 19:51:13 +08:00
@loshine1992 按照我们是这样子做的,把三张表写 sql 语句,使用 left join 取出来一些你需要的列放在 resultmap 中
Lpl
2015-10-27 19:52:03 +08:00
left join 类似的有坑...我记得当时踩过,然后忘了,就是在一对多的时候出现的
loshine1992
2015-10-27 20:00:41 +08:00
@Lpl 感谢回复,其实已经使用这种方式了,就是不太喜欢这种机械式的劳作。。。。
Lpl
2015-10-27 20:05:36 +08:00
@loshine1992 但是这种是比较好的方式。有一点,你们是不是在数据库中显式定义 foreign key 了?这样子不好
loshine1992
2015-10-27 21:17:29 +08:00
@Lpl 没有显式定义外键的,这个在项目启动的时候我就和后端的负责人建议过。
目前其实有一个比较糟糕的情况,因为后端的负责人之前不太了解 Spring MVC 和 Mybatis
所以现在的代码是比较不规范的
比如 Controller 层中大量使用了 request.addAttribute(key,value) 而非 modelMap.put(key, value),返回 json 也是直接操作的 response
最为麻烦的其实是。。他手写了 dao 层的实现而没有使用 Spring 扫描 Mybatis 的代理实现方式。。。。。。。
Lpl
2015-10-28 09:03:48 +08:00
@loshine1992 你们后端负责人为什么不听建议...

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

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

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

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

© 2021 V2EX