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

简单理解:java

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

进一步说明:数据库

Dao层实现是简单的CRUD操做。至关于sql中的单条select,insert,upate,delete语句。
而service层就是具体业务的实现。通常屡次组合dao层的方法(dao层方法达到了重用目的),是多个数据库操做的集合,能够看作数据库中的存储过程,并且事务通常控制在service层。这些数据库操做一块儿提交或回滚。
固然,简单的系统彻底能够不划分service层,只用dao层。但那这样的话,代码从用性就不高。this

用户的Dao层spa

Java code
 
?
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()> 0 ){
            return  ((User)users.get( 0 )).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.net

Java code
 
?
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,提示‘用户名或密码错误’
相关文章
相关标签/搜索