DAO接口类和SERVICE接口类区别

zacom1025hai 2010-04-06 12:30:01
DAO接口类和SERVICE接口类具体区别再哪里,一直弄不清楚,最好能举例说说
...全文
461 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tdgwj 2010-04-06
  • 打赏
  • 举报
回复
其中可能包括检测用户名是否存在和插入用户数据两部分
勘误:两个方法
tdgwj 2010-04-06
  • 打赏
  • 举报
回复
DAO数据库访问对象 实现连接数据库 修改、添加等细节
service服务层 面向功能 把一个整个服务 细化 调用DAO
其实service其中都是一些方法 去调用DAO 甚至方法名都和DAO中一样的
如某个service是用作用户注册的
其中可能包括检测用户名是否存在和插入用户数据两部分
分别调用DAO中具体实现 操纵数据库
看起来逻辑更清晰而已
gabriel80 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 quxiuer 的回复:]
dao层是sql的增删改查
service层是给dao层得到结果添加业务逻辑

以‘用户登录’为例
dao层只负责查询用户名是username、密码是password的用户返回list
service层添加逻辑判断,list的size如果大于0,返回用户;size小于0,提示‘用户名或密码错误’
[/Quote]
这个不太对吧。。dao层只是简单的sql操作。。
quxiuer 2010-04-06
  • 打赏
  • 举报
回复
dao层是sql的增删改查
service层是给dao层得到结果添加业务逻辑

以‘用户登录’为例
dao层只负责查询用户名是username、密码是password的用户返回list
service层添加逻辑判断,list的size如果大于0,返回用户;size小于0,提示‘用户名或密码错误’
palgerrard 2010-04-06
  • 打赏
  • 举报
回复
贴个例子给你看

用户的Dao层


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


@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;
}

}
palgerrard 2010-04-06
  • 打赏
  • 举报
回复
Dao层实现是简单的CRUD操作。相当于sql中的单条select,insert,upate,delete语句。
而service层就是具体业务的实现。一般多次组合dao层的方法(dao层方法达到了重用目的),是多个数据库操作的集合,可以看做数据库中的存储过程,而且事务一般控制在service层。这些数据库操作一起提交或回滚。

当然,简单的系统完全可以不划分service层,只用dao层。但那这样的话,代码从用性就不高。

67,520

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧