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

2023-06-12,,

简单理解:

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/

《MVC下的DAO接口类和SERVICE接口类区别?.doc》

下载本文的Word格式文档,以方便收藏与打印。