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

问题描述

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

用户基础表关联了很多用户其他信息的表,现在要把所有查询出来,是使用多个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层的处理要简单很多。但复用性不够

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九阴真经战无不胜服务器位置,九阴真经各门派武功风水宝地分类及坐标大全

寻得一处风水宝地可以养神还可以修炼武功,九阴真经中的各大门派和全部武功适合修炼的宝地都在哪里呢?都分为哪几类,具体坐标是什么?1、风水宝地作用:九阴真经风水宝地共分山、水、洞、林、雪、市六种,分别对…

Gartner Q2服务器市场报告5大要点

服务器场景调查 根据市场研究公司Gartner的调查报告,第二季度Dell的服务器市场取得了丰富的成果,HPE的市场份额比去年同期略有下降,但仍保留了其全球服务器市场第一的位置。 Gartner表示,全球服务器销售收入在第二季度与去年同期相…

MySQL实战面试题_Mysql实战面试题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼一、索引B Tree 原理1. 数据结构B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。B Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B T…

Redux有何优点?

by Justin Falcone贾斯汀法尔科内(Justin Falcone) Redux有何优点? (What’s So Great About Redux?) Redux elegantly handles complex state interactions that are hard to express with React’s component state. It is essentially a message-passing syste…

python基础——使用模块

python基础——使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env python3 # -*- coding: utf-8 -*- a test module __author…

力扣——键盘行

给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例: 输入: ["Hello", "Alaska", "Dad", "Peace"] 输出: ["Alaska", "Dad"]注意: 你可…

网络空间技术实验室:打造信息安全技术培育平台

从PC互联网到移动互联网,音视频、图片越来越成为大众关注的热点。过去,人们习惯于在网络浏览文字新闻;今天,人们对于视频新闻、图片新闻的接受度更高。 网络的发展无疑给人们带来了便利。但同时,一个不可否认的事实是&…

如何对mysql做物理备份_如何创建物理MySQL备份

前提条件在开始之前,确保你有一个有sudo权限的用户和一个MySQL数据库服务器。查找数据目录使用root密码登录到MySQL服务器。$ sudo mysql -u root -p下面的SQL显示MySQL实例的数据目录。mysql> select datadir;输出类似于-----------------| datadir |----------…

freecodecamp_1000天的freeCodeCamp

freecodecampToday, the freeCodeCamp community turns 1,000 days old. We’ve accomplished a lot together in that time:今天,freeCodeCamp社区已经有1000天的历史了。 到那时我们已经共同完成了很多工作: 6,000 campers have gotten their first d…

如何正确遍历删除List中的元素,你会吗?

遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题。下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合条件的一个元素 3.通过普通的for删除删除符合条件的多个元素…

Jmeter 通过json Extracted 来获取 指定的值的id

在没有 精确或模糊查询的接口时可以使用jmeter 获取指定的值的ID import java.lang.String ; String getTargetName"iphone632g"; //判读相应结果中是否包含指定值:iphone632g boolean containsCategoryprev.getResponseDataAsString().contains(getTarge…

mysql 结果保存到文件_将MySQL中sql运行结果保存到文件

将MySQL中sql运行结果保存到文件有两种方法。方法一:在mysql>提示符中使用teemysql> tee output.txtLogging to file output.txtmysql> noteeOutfile disabled.或者mysql> \T output.txtLogging to file output.txtmysql> \tOutfile disabled.这个类…

获取电脑和操作系统信息-uname

用法:uname [选项]...输出一组系统信息。如果不跟随选项,则视为只附加-s 选项。-a, --all 以如下次序输出所有信息。其中若-p 和-i 的探测结果不可知则被省略:-s, --kernel-name 输出内核名称-n, --nodename 输出网络节点…

MobileSpace-关于我的激情的故事

by Monte Thakkar通过Monte Thakkar MobileSpace-关于我的激情的故事 (MobileSpace — A story about my passions) 我发现,学习和教授iOS开发的旅程 (My journey to discovering, learning, and teaching iOS development) “Let this be the first thing you hea…

Do you have an English name? 你有英文名吗?

文中提到的所有人名都是虚构的,如有雷同,纯属巧合。当然,你的洋名儿也可能是德文、法文、意大利文,等々々々。 全球化时代,和老外的交流也多了。“高端”的程序员想要进欧美系外企,想要出国看世界&#xff…

php+nginx导入太大文件报http error错误的原因

项目中用到太多的导入导出,最近换了服务器,导致一旦文件过大就出现http error的错误,查找后是配置文件没有同步的原因,php.ini需要几个配置 upload_max_filesize 20M 表示上传的最大文件为20M post_max_size 20M 允许post提交的…

rhel 7.2 安装mysql_在rhel7.2下源码安装mysql-5.6.35

如何在一台新机rhel7.2下源码安装mysql-5.6.35一、前期准备工作1、首先安装依赖包,避免在安装过程中出现问题yum -y install gcc gcc-c cmake ncurses-devel autoconf perl perl-devel2、下载源码包3、创建mysql安装目录以及数据存放目录[[email protected] liuzhen…

网络安全不是奢侈品,而是必需品

2016年国家网络安全宣传周于9月19日至25日在武汉隆重举办。《长江日报》记者高萌采访了思科全球副总裁、大中华区首席技术官曹图强,以下是9月19日《长江日报》刊登的采访全文: 思科全球副总裁、大中华区首席技术官曹图强昨日下午,思科全球副总…

开源开发平台_电线之间:开源开发商Sindre Sorhus的采访

开源开发平台by Vivian Cromwell通过维维安克伦威尔(Vivian Cromwell) 电线之间:开源开发商Sindre Sorhus的采访 (Between the Wires: An interview with open source developer Sindre Sorhus) Here’s my interview Sindre Sorhus, a prolific open source devel…

白宫力挺FBI:库克干扰司法与正义

据中文业界资讯站报道,眼看着谷歌、Mozilla、Facebook等大组织都开始声援库克,美国白宫也就关于要求苹果协助解锁iPhone调查加州枪击案的事件作出了回应。白宫新闻秘书Josh Earnest强调,FBI并没有要求苹果重新设计产品或者是给它们留后门&…