问题描述

假如目前有一个查询用户详情的接口

用户基础表关联了很多用户其他信息的表,现在要把所有查询出来,是使用多个dao在service中组合,还是直接链接查询好

示例代码

用户表(user_base)

用户信息表1(user_info_1)

用户信息表2(user_info_2)

用户信息表3(user_info_3)

...

用户信息表n(user_info_n)

多个dao查询返回

@Service

public class UserDetailServiceImpl implements UserService{

@Autowired

private UserBaseDao userBaseDao;

@Autowired

private UserInfoDao1 userInfoDao1;

@Autowired

private UserInfoDao2 userInfoDao2;

@Override

public UserInfoVo getDetail(String userId){

UserInfoVo userInfoVo = new UserInfoVo ();

// 多个dao获取相关要返回的信息

UserBase userBase = userBaseDao.getByUserId(userId);

UserInfo1 userInfo1 = userInfoDao1.getByUserId(userId);

UserInfo2 userInfo2 = userInfoDao2.getByUserId(userId);

// 最后返回的VO类各种set信息返回给前台

userInfoVo.set(dao1返回结果);

...

...

userInfoVo.set(daoN返回结果);

return userInfoVo ;

}

}

链接查询

@Service

public class UserDetailServiceImpl implements UserService{

@Autowired

private UserBaseDao userBaseDao;

@Override

public UserInfoVo getDetail(String userId){

// 单个dao内用链接查询返回一个VO类

UserInfoVo userInfoVo = userBaseDao.getDetail(userId);

// 查询的sql伪代码

String sql =

"select '要返回字段' from user_base

left join user_info_1 on user_base.user_id = user_info_1.user_id

left join user_info_2 on user_base.user_id = user_info_2.user_id

...

left join user_info_n on user_base.user_id = user_info_n.user_id

where user_base.user_id = :userId";

// 这里就可以省略各种set

return userInfoVo ;

}

}

相关疑问

使用第一种多个Dao组合返回数据,在Service层各种set虽然要复杂一些,但感觉上,耦合性没有那么高,各个部分dao都很独立,也可以在其他地方复用

使用第二种方法,除了要自己手写很长的sql语句,Service层的处理要简单很多。但复用性不够

希望能基于相关程序设计思想上,对这两种方式的选择给予相关的解答,或者有其他设计实现方法。不胜感激

dao层mysql复合语句_在业务中是使用多个Dao组合好,还是一个链接查询好?相关推荐

  1. 中service层的作用_浅析Java中dto、dao、service、controller的四层结构

    目前我所在的项目组采用的是SpringBoot框架,前端使用BootStrap+jQuery. SpringBoot是BS开发框架之一,不用单独开启tomcat服务器,目前比较流行,一般开发大型项目时 ...

  2. dao层通用封装_层超类型模式:封装多层系统中的通用实现

    dao层通用封装 Being one of the cornerstones of OOP, Inheritance is pretty much like a doubled-sided door ...

  3. centos 7 mysql随机密码_在centos中安装了mysql5.7之后解决不知道随机的密码的问题...

    在安装完成mysql5.7 之后,发现密码不知道.不要紧,直接重置密码. 1.修改配置文件my.cfg [root@localhost ~]# vi /etc/my.cnf 找到mysqld在之后添加 ...

  4. kubernetes中mysql乱码_在kubernetes中部署tomcat与mysql集群-Go语言中文社区

    在kubernetes中部署tomcat与mysql集群之前必须要有以下这些基础: 1. 已安装.配置kubernetes 2. 集群中有tomcat与mysql容器镜像 3. 有docker基础 具 ...

  5. opensips mysql 认证_基于ubuntu中使用mysql实现opensips用户认证的解决方法

    1 MySQL支持 1.1 MySQL模块支持 默认安装时,不包含MySQL模块. opensipsctlrc文件中包含了数据库配置的信息,要想让opensips支持mysql数据库,在编译安装的时候 ...

  6. dapper mysql 预处理_.Net Core中Dapper的使用详解

    Dapper 是一个轻量级ORM框架,在项目中如果对性能比较看中,Dapper是一个不错的选择.接下来我们就来看看如何在项目中使用Dapper. 1.安装Dapper 这里直接使用Nuget安装. 安 ...

  7. mac mysql使用_在Mac中安装和使用MySQL

    下载安装MySQL 在官网下载MySQL 进入官网后可以看到有多个版本可选: Oracle MySQL Cloud Service 基于企业版数据库的云服务 MySQL Enterprise Edit ...

  8. php mysql 迁移_将phpstudy中的mysql迁移至Linux教程

    项目目的 将原来windows环境中使用phpstudy搭建的mysql 5.5.53 中的数据迁移至新主机Linux环境中 环境情况 新主机 系统平台: CentOS release 7.4 (Fi ...

  9. php mysql 失败_在php中插入失败的数据mysql

    我需要将记录添加到表'文字'中.正如您在下面的代码中看到的那样,失败会导致消息data insert failed.在php中插入失败的数据mysql 我已经试图改变一切,在线论坛建议,但它没有帮助. ...

最新文章

  1. spark-shuffle分析
  2. hdu 2049 不容易系列之(4)——考新郎 解题报告
  3. 系统中多种隐藏超级用户添加方法第1/2页
  4. JDK1.8 Lambda 使用详解(转)
  5. spring boot整合freemarker及freemarker基础语法超详细讲解
  6. CF442C-Artem and Array【贪心】
  7. 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信
  8. python2.7升级到python3.6注意事项
  9. linux7自动挂载怎么做,centos 7 实现自动按需挂载
  10. 矩阵、优化理论常用记号
  11. 软考数据库系统工程师day01
  12. MSP430G2553学习笔记
  13. 用计算机画统计图,统计图
  14. sparc处理器开发工具_SPARC高性能处理器集成开发环境及其编译器设计与实现
  15. Python爬虫实例--新浪热搜榜[xpath语法]
  16. C++模拟手机调查问卷
  17. Amdahl定律(阿姆达尔定律)
  18. 高一计算机专业学期总结,高一计算机学期工作总结
  19. 解决 Nacos 服务注册使用 Docker 容器内网 ip 问题
  20. 荣耀android手机怎么截图,华为荣耀畅玩5C怎么截图/截屏方法教程

热门文章

  1. Redis 服务安装
  2. 004-docker常用命令[二]-容器操作ps,top,attach,export
  3. bzoj 2296: 【POJ Challenge】随机种子
  4. python 装饰器 三 (带有参数的装饰器)
  5. 【整理】fiddler不能监听 localhost和 127.0.0.1的问题
  6. android 多线程概述
  7. 2011阿里巴巴程序设计公开赛 / 1002 Fruit Ninja
  8. 学习笔记----linux下编译samba
  9. SBO部分SQL查询奉献
  10. leetcode面试题 17.07. 婴儿名字(并查集)