MVC下的DAO接口类和SERVICE接口类区别?

发布时间:2020-08-10 21:33:03 作者:ii_chengzi
来源:ITPUB博客 阅读:185

简单理解:

DAO数据库访问对象 实现连接数据库 修改、添加等细节 
service服务层 面向功能 把一个整个服务 细化 调用DAO
其实service其中都是一些方法 去调用DAO 甚至方法名都和DAO中一样的
如某个service是用作用户注册的
其中可能包括检测用户名是否存在和插入用户数据两部分
分别调用DAO中具体实现 操纵数据库
看起来逻辑更清晰而已

进一步说明:

Dao层实现是简单的CRUD操作。相当于sql中的单条select,insert,upate,delete语句。
而service层就是具体业务的实现。一般多次组合dao层的方法(dao层方法达到了重用目的),是多个数据库操作的集合,可以看做数据库中的存储过程,而且事务一般控制在service层。这些数据库操作一起提交或回滚。
当然,简单的系统完全可以不划分service层,只用dao层。但那这样的话,代码从用性就不高。

用户的Dao层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
public   class   UserDaoHibernate  extends   BaseDaoHibernate  implements
         IUserDao {
 
     /**
      * 增加用户
     
      * @param user
      */
     public   Long addUser(User user) {
         return   addEntityRetVal(user);
     }
 
     /**
      * 通过id删除用户
     
      * @param user
      */
     public   void   deleteUser(Long id) {
         User userPO = (User) getHibernateTemplate().load(
                 User. class , id);
         deleteEntity(userPO);
     }
 
     /**
      * 删除用户
     
      * @param user
      */
     public   void   deleteUser(User user) {
         User userPO = (User) getHibernateTemplate().load(
                 User. class , user.getUserid());
         deleteEntity(userPO);
     }
 
     /**
      * 更新用户
     
      * @param user
      */
     public   void   updateUser(User user) {
         User userPO = (User) getHibernateTemplate().load(
                 User. class , user.getUserid());
         BeanUtil.copyProperties(userPO, user);
         updateEntity(userPO);
     }
 
     /**
      * 通过id查询用户
     
      * @param id
      * @return
      */
     public   User queryUserById(Long id) {
         return   (User) getHibernateTemplate().load(User. class , id);
     }
      
     /**
      * 通过用户名字查询用户实体   -- 这个方法存在SQL注入攻击问题
      * @param usernme
      * @return
      */
     public   User queryUserByName(String username){
         String hql =  "select u from User u where u.username = '"   + username +  "'" ;
         return   (User)  this .queryObjectByHql(hql);
     }
 
     /**
      * 查询所有用户
     
      * @return
      */
     public   List<User> queryAllUser() {
         return   queryAllEntitys(User. class );
     }
 
     /**
      * 分页查询用户
      */
     public   List<User> queryAllUser(String hql,  int   currentPage,
             int   pageSize) {
         return   queryAllEntitys(currentPage,pageSize,hql);   //调用的是有currentPage的分页方法
     }
 
     /**
     
      * 通过用户id查询用户名称,查不到返回 null 
      * @param id
      * @return
      */
     public   String queryNameById(Long id){
         String hql =  " from User d where d.userId = ?" ;
         List<?> users = getHibernateTemplate().find(hql,id);
         if (users.size()> ){
            return   ((User)users.get( )).getUsername();
         } else {
            return   null ;
         }
          
     }
       
     /**
      * 得到用户分页记录总数
      * @param parentId
      * @return
      */
     /*
     public Long queryTotalNumberOfUser(){
         String hql = "select count(*) from User";
         List<?> childNumber = getHibernateTemplate().find(hql);
         return (Long)childNumber.get(0);
     }*/
      
     public int queryAllUserNubmer(String hql){
         return queryAllEntitysNumer(hql);
     }
      
     /**
      * 查询用户的权限
      * @param userId
      * @return
      */
     public List<UserAuth> queryFunctionOnlyByUserId(Long userId){
         String hql = "select ua from UserAuth ua where ua.userid = " + userId;
         List<UserAuth>  userAuths = queryAllObjectByHql(hql);
         return userAuths;
     }
 
     /**
      * 查询用户的角色
      * @param userId
      * @return
      */
     @SuppressWarnings ( "unchecked" )
     public   List<UserRole> queryRoleOnlyByUserId(Long userId){
         String hql =  "select ur from UserRole ur where ur.userid = "   + userId;
         List<UserRole>  userAuths =  queryAllObjectByHql(hql);
         return   userAuths;
     }
             
}



service层,又可细化为查询业务UserHelper,还有增加,更新,删除业务集中在UserFacade中。这里贴出UserHelper.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
@WebService
public   class   UserHelper  implements   IUserHelper {
 
     private   IUserDao userDao =  null ;
     private   IDepartmentDao departDao =  null ;
     private   IFunctionHelper functionHelper =  null ;
     private   IRoleHelper roleHelper =  null ;
 
     public   void   setUserDao(IUserDao userDao) {
         this .userDao = userDao;
     }
 
     public   void   setFunctionHelper(IFunctionHelper functionHelper) {
         this .functionHelper = functionHelper;
     }
 
     public   void   setDepartDao(IDepartmentDao departDao) {
         this .departDao = departDao;
     }
 
     public   void   setRoleHelper(IRoleHelper roleHelper) {
         this .roleHelper = roleHelper;
     }
 
     /**
      * 通过id查询权限,没有则返回null
     
      * @param id
      * @return
      */
     public   UserVO queryUserById(Long id)  throws   GeneralException {
         User user =  null ;
         try   {
             user = userDao.queryUserById(id);
         catch   (Exception e) {
             e.printStackTrace();
             throw   new   GeneralException( "error.userDeatil" "通过id查询权限时出错!" );
         }
         // PO 转 VO
         UserVO userVO = userPoToVo(user);
         return   userVO;
     }
 
     /**
      * 得到所有权限的集合,没有则返回 null
     
      * @return
      */
     public   List<UserVO> queryAllUser()  throws   GeneralException {
         List<UserVO> allFuncVOs =  new   ArrayList<UserVO>();
         List<User> allFuncs =  null ;
         try   {
             allFuncs = userDao.queryAllUser();
         catch   (Exception e) {
             throw   new   GeneralException( "error.userList" "得到所有权限的集合时出错!" );
         }
         for   (Iterator<?> iterator = allFuncs.iterator(); iterator.hasNext();) {
             User user = (User) iterator.next();
             // PO 转 VO
             UserVO userVO = userPoToVo(user);
             allFuncVOs.add(userVO);
         }
         return   allFuncVOs;
     }
  
     /**
      * 权限的PO 到 VO 转换的方法
     
      * @param user
      * @return
      */
     public   UserVO userPoToVo(User user)  throws   GeneralException {
         UserVO userVO =  new   UserVO();
         BeanUtil.copyProperties(userVO, user);
         try   {
             userVO.setDepartName(departDao.queryNameById(user.getDepartid()));  // 设置部门名称
         catch   (Exception e) {
             throw   new   GeneralException( "error.user" " 权限的PO 到 VO 转换时出错!" );
         }
         if (userVO.getStatus().equals( "1" )){
             userVO.setStatus( "可用" );
         } else {
             userVO.setStatus( "不可用" );
         }
         userVO.setRegisterName( "ZHANG" );
         userVO.setChangerName( "ZHANG" );
         return   userVO;
 
     }
 
     /**
      * 通过分页查询权限信息集合
     
      * @param hql
      * @param currentPage
      * @param pageSize
      * @return
      * @throws GeneralException
      */
     public   List<UserVO> queryUserByPage(String hql,  int   currentPage,
             int   pageSize)  throws   GeneralException {
         List<UserVO> allFuncVOs =  new   ArrayList<UserVO>();
         List<User> allFuncs =  null ;
         try   {
             allFuncs = userDao.queryAllUser(hql, currentPage, pageSize);
         catch   (Exception e) {
             throw   new   GeneralException( "error.userList" "分页得到权限的集合时出错!" );
         }
         for   (Iterator<?> iterator = allFuncs.iterator(); iterator.hasNext();) {
             User user = (User) iterator.next();
             // PO 转 VO
             UserVO userVO = userPoToVo(user);
             allFuncVOs.add(userVO);
         }
         return   allFuncVOs;
     }
 
     /**
      * 返回User分页对象
     
      * @param currentPage
      * @return
      */
     public   Pagination getPagination( int   currentPage, String hql) {
         return   new   Pagination(currentPage,
                 DisplayRecordCount.DISPLAY_IN_USER_LIST, userDao
                         .queryAllUserNubmer(hql));
     }
 
     /**
      * 查到用户的所有角色ID
     
      * @param userId
      * @return
      * @throws GeneralException
      */
     public   List<Long> queryAllRoleidsOfUser(Long userId)
             throws   GeneralException {
         List<Long> rolesOfUser =  new   ArrayList<Long>();
         List<UserRole> userRoles =  null ;
         try   {
             userRoles = userDao.queryRoleOnlyByUserId(userId);  // 查到角色权限
         catch   (Exception e) {
             throw   new   GeneralException( "error.userRoleidsList" ,
                     "得到用户的角色ID集合出错!" );
         }
         for   (Iterator<?> iterator = userRoles.iterator(); iterator.hasNext();) {
             UserRole userRole = (UserRole) iterator.next();
             Long roleid = userRole.getRoleid();
             rolesOfUser.add(roleid);
 
         }
         return   rolesOfUser;
     }
 
     /**
      * 查到用户的所有角色
     
      * @param userId
      * @return
      * @throws GeneralException
      */
     public   List<RoleVO> queryAllRoleOfUser(Long userId)  throws   GeneralException {
         List<Long> rolesOfUser =  new   ArrayList<Long>();
         List<RoleVO> userRoles =  new   ArrayList<RoleVO>();
         try   {
             rolesOfUser = queryAllRoleidsOfUser(userId);
             for   (Iterator<?> iterator = rolesOfUser.iterator(); iterator
                     .hasNext();) {
                 Long roleid = (Long) iterator.next();
                 RoleVO roleVO = roleHelper.queryRoleById(roleid);
                 userRoles.add(roleVO);
             }
         catch   (Exception e) {
             e.printStackTrace();
             throw   new   GeneralException( "error.userRoleList" ,
                     "得到用户的角色集合出错!" );
         }
         return   userRoles;
     }
 
     /**
      * 查询用户的所有权限 1.查询所有用户的权限 2.查询所有用户的角色 3.查询所有用户的权限+角色的权限-共同的权限
     
      * @param userId
      * @return
      */
     public   List<FunctionVO> queryAllFunctionOfUser(Long userId,String system)
             throws   GeneralException {
         Set<FunctionVO> userAllFuncs =  new   HashSet<FunctionVO>();
         List<FunctionVO> userAllFuncsList =  new   ArrayList<FunctionVO>();
         try   {
             List<UserAuth> userFuncs = userDao
                     .queryFunctionOnlyByUserId(userId);  // 查到权限
 
             if   (userFuncs !=  null ) {
                 for   (Iterator<?> iterator = userFuncs.iterator(); iterator
                         .hasNext();) {
                     UserAuth userFunc = (UserAuth) iterator.next();
                     Long funcId = userFunc.getFuncid();
                     FunctionVO funcVO = functionHelper
                             .queryFunctionById(funcId);
                     userAllFuncs.add(funcVO);
                 }
             }
 
             List<UserRole> userRoles = userDao.queryRoleOnlyByUserId(userId);  // 查到角色
 
             if   (userRoles !=  null ) {
                 // 查到所有角色的所有权限,将权限放入到userAllFuncs中
                 for   (Iterator<?> iterator = userRoles.iterator(); iterator
                         .hasNext();) {
                     UserRole userRole = (UserRole) iterator.next();
                     Long roleId = userRole.getRoleid();
                     List<FunctionVO> funcVOs = roleHelper
                             .queryFunctionOfRole(roleId);
                     for   (Iterator<?> iterator2 = funcVOs.iterator(); iterator2
                             .hasNext();) {
                         FunctionVO functionVO = (FunctionVO) iterator2.next();
                         userAllFuncs.add(functionVO);
                     }
                 }
             }
 
             // 将筛选了数据的无序Set集合转换为有序的List集合.一定要从小到大,否则权限树显示就会有问题
 
             for   (Iterator<?> iterator = userAllFuncs.iterator(); iterator
                     .hasNext();) {
                  
                 FunctionVO userAllFun = (FunctionVO) iterator.next();
                 if (system.equals( "crm" )){
                     if (userAllFun.getFuncid()>=20000000l){
                         userAllFuncsList.add(userAllFun);
                     }
                 } else   if (system.equals( "hr" )){
                     if (userAllFun.getFuncid()<20000000l){
                         userAllFuncsList.add(userAllFun);
                     }
                 }
             }
 
             FunctionComparator fc =  new   FunctionComparator();
             Collections.sort(userAllFuncsList, fc);
         catch   (Exception e) {
             e.printStackTrace();
             throw   new   GeneralException( "error.userAllFuncsList" "得到用户的权限集合出错!" );
         }
         return   userAllFuncsList;
     }
 
}
dao层是sql的增删改查
service层是给dao层得到结果添加业务逻辑
以‘用户登录’为例
dao层只负责查询用户名是username、密码是password的用户返回list
service层添加逻辑判断,list的size如果大于0,返回用户;size小于0,提示‘用户名或密码错误’

http://shenzhen.offcn.com/

推荐阅读:
  1. 接口和抽象类的区别
  2. 抽象类和接口的区别

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

dao mvc service

上一篇:CentOS下使用yum方式安装percona xtrabackup步骤

下一篇:反射的应用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》