zoukankan      html  css  js  c++  java
  • 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层

    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

    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,提示‘用户名或密码错误’
  • 相关阅读:
    【.Net】鼠标点击控制鼠标活动范围 ClipCursor
    【设计模式】工厂模式 Factory Pattern
    sublime text3 关闭更新提醒
    Mac下Sublime Text3激活码
    测试开发(1) -- 整数反转
    测试开发工程师面试资料(未完)
    Mojave使用pyenv安装python-zlib错误
    清理 Xcode 10
    mitmproxy
    卸载CocoaPods
  • 原文地址:https://www.cnblogs.com/hoobey/p/6936316.html
Copyright © 2011-2022 走看看