MVC下的DAO介面類和SERVICE介面類區別?
簡單理解:
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;
}
}
|
service層是給dao層得到結果新增業務邏輯
以‘使用者登入’為例
dao層只負責查詢使用者名稱是username、密碼是password的使用者返回list
service層新增邏輯判斷,list的size如果大於0,返回使用者;size小於0,提示‘使用者名稱或密碼錯誤’
http://shenzhen.offcn.com/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2650998/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 介面和抽象類的區別抽象
- 抽象類和介面的區別抽象
- JAVA中介面和抽象類的區別Java抽象
- Spring MVC 核心類和介面SpringMVC
- Java中抽象類和介面的區別Java抽象
- java-介面和抽象類的聯絡和區別。Java抽象
- 抽象類與介面的區別抽象
- Java抽象類與介面的區別Java抽象
- 多維度分析:抽象類和介面的區別抽象
- 【Java基本功】聊聊抽象類和介面的區別Java抽象
- Java中抽象類與介面的區別Java抽象
- java中抽象類跟介面的區別Java抽象
- JAVA的類和介面Java
- abstract類和介面
- 介面和抽象類抽象
- 抽象類和介面抽象
- Java 8 中的抽象類和介面到底有啥區別?Java抽象
- Java 介面和抽象類是什麼,有什麼區別Java抽象
- Java:面試題:抽象類與介面的區別Java面試題抽象
- C#點滴 - 抽象類與介面區別C#抽象
- 介面和抽象類 (abstract)抽象
- 使用Thread類和Runnable介面實現多執行緒的區別thread執行緒
- Java 抽象類、普通類、介面的區別——值得你一看的乾貨Java抽象
- API介面------外部介面和內部介面區別API
- 選擇介面還是抽象類?---應用例項說明介面與抽象類的應用場合(區別)抽象
- java中抽象類和介面Java抽象
- 【Java基礎】類和介面Java
- 介面和抽象類詳解抽象
- java 設計模式6原則 介面,抽象類區別Java設計模式抽象
- C#虛基類繼承與介面的區別C#繼承
- Java中抽象類和介面的介紹及二者間的區別Java抽象
- 類微信介面
- RPC介面和http介面的區別RPCHTTP
- 序列化涉及的類和介面
- Java集合框架中的介面和類Java框架
- Java抽象(方法,類)和Java的介面Java抽象
- golang中的類和介面的使用Golang
- 運維和開發知識,Java中的抽象類和介面的兩大區別!運維Java抽象