记录下一个dao层类的写法,方便以后的使用。

 package com.bupt.auth.dao.impl;

 import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet; import org.springframework.stereotype.Repository; import com.bupt.auth.dao.RoleDao;
import com.bupt.auth.dao.base.BaseDaoImpl;
import com.bupt.auth.entity.Permission;
import com.bupt.auth.entity.Role;
import com.bupt.auth.exception.MyException; @Repository("roleDao")
public class RoleDaoImpl extends BaseDaoImpl<Role> implements RoleDao { @Override
public Role findRoleAdminByUserId(Long id) {
// TODO Auto-generated method stub
Role role = this.findRoleByRoleNameAndUserId(id, "administrator"); return role;
} @SuppressWarnings("unchecked")
@Override
public List<Role> findRoleByUserId(Long id) {
// TODO Auto-generated method stub\
String sql = "select r from Role r inner join fetch r.ownerUser u inner join fetch r.accessTokens left join fetch r.permissions where u.id = :id";
List<Role> list = getSession().createQuery(sql).setLong("id", id).list(); if(list == null || list.size() == 0)
return null; List<Role> result = new ArrayList<Role>();
for(Role role:list){
if(!result.contains(role))
result.add(role);
} return result;
} @SuppressWarnings("unchecked")
@Override
public Role findRoleByRoleNameAndUserId(Long id, String rolename) {
// TODO Auto-generated method stub
String sql = "select r from Role r inner join fetch r.ownerUser u inner join fetch r.accessTokens where u.id = :id and r.name = :rolename";
List<Role> list = getSession().createQuery(sql).setLong("id", id).setString("rolename", rolename).list(); if(list == null || list.size() == 0)
return null; return list.get(0);
} @SuppressWarnings("unchecked")
@Override
public List<Role> findRoleByPermId(Long id) {
// TODO Auto-generated method stub
String sql = "select r from Role r inner join fetch r.ownerUser inner join fetch r.accessTokens inner join fetch r.permissions p where p.id = :id";
List<Role> list = getSession().createQuery(sql).setLong("id", id).list(); if(list == null || list.size() == 0)
return null; List<Role> result = new ArrayList<Role>();
for(Role role:list){
if(!result.contains(role))
result.add(role);
} return result;
} @SuppressWarnings("unchecked")
@Override
public boolean deleteRolesPermissionByRoleIdAndPermId(Role role,
Long permid) throws MyException {
// TODO Auto-generated method stub
//Role role = this.loadRoleByRoleId(roleid);
if(role == null)
throw new MyException("Role Not Found", "301"); Set<Permission> pset = role.getPermissions(); if(pset == null){
throw new MyException("Role has no permissions", "");
}
if(pset.size() != 0)
{
Set<Permission> psetCopy = new HashSet<Permission>(pset); for(Permission p : psetCopy)
{
if(p.getId().longValue() == permid.longValue()){
pset.remove(p);
}
}
} this.update(role); return true;
} @Override
public Set<String> findAccessTokensByRoleId(Long roleid) {
// TODO Auto-generated method stub
Role role = this.loadRoleByRoleId(roleid); if(role == null)
return null; return role.getAccessTokens();
} @Override
public boolean deleteAccessTokenByRoleIdAndTokenString(Long roleid,
String accessToken) throws MyException {
// TODO Auto-generated method stub
Role role = this.loadRoleByRoleId(roleid); if(role == null)
throw new MyException("Role Not Found!", "301"); Set<String> accessTokens = role.getAccessTokens();
accessTokens.remove(accessToken);
this.update(role); return true;
} @Override
public Role loadRoleByRoleId(Long roleid){
String sql = "select r from Role r inner join fetch r.ownerUser inner join fetch r.permissions inner join fetch r.accessTokens where r.id = :id";
List<Role> list = this.getSession().createQuery(sql).setLong("id", roleid).list(); if(list == null || list.size() == 0){
String sql2 = "select r from Role r inner join fetch r.ownerUser inner join fetch r.accessTokens where r.id = :id";
List<Role> list2 = this.getSession().createQuery(sql2).setLong("id", roleid).list(); if(list2 == null || list2.size() == 0){
return null;
} return list2.get(0);
} return list.get(0);
}
}

dao层实现类的常见写法的更多相关文章

  1. 四、spring集成ibatis进行项目中dao层基类封装

    Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库 ...

  2. sping整合hibernate之二:dao层开发

     在上一篇日志中将hibernate的会话工厂sessionFactory注入到了spring的容器中,但这样还不够,因为hibernate的增删改查是要使用事务机制的, 所以还要在spring中配置 ...

  3. ssh_maven的搭建之dao层的开发

    之前都是使用我们传统的方式进行引入jar包,现在我们使用maven进行管理依赖,这样,我们的jar就不需要我们进行管理,而且,我们的maven还可以进行项目构建,一个项目从编写源代码到编译,测试,运行 ...

  4. mybatis dao 层开发简易版 非整合 spring

    同样老习惯,先上项目结构截图 首先 补充上篇文中缺失的 mysql demo 用的 小脚本 drop database if exists mybatis; CREATE DATABASE `myba ...

  5. hibernate+pageBean实现分页dao层功能代码

    今天闲来无事,摆弄了一下分页,突然发现很多代码长时间不用就生梳了,虽然有些基础,但没有一篇整合的.这里还是简单示例,主要是以后自己翻着看不用百度找啊找找不到一篇想要的 1.PageBean实体类,一页 ...

  6. [MyBatis]DAO层只写接口,不用写实现类

    团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...

  7. SpringBoot+MyBatis项目Dao层最简单写法

    前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写 ...

  8. java中dao层的通用层,通过反射机制,操作数据库的增删改,适用的范围是不包含属性类

    这里首先必须注意的是:类的类名.字段必须与数据库中的表名和字段名保持一致,否则无法通过反射机制作出通用层 /** * 学生信息类,数据库中的StuInfo表 * */public class StuI ...

  9. controller层负责创建类传递类给service;service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性;dao层负责数据的持久化

    controller层负责创建类传递类给service:service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性:dao层负责数据的持久化

随机推荐

  1. C#的WebBrowser操作frame如此简单

    刚学c#不久,也不太懂什么IHTMLDocument.IHTMLDocument2.IWebBrowser2等等.自己琢磨了好久,终于知道了怎么用WebBrowser操作frame和iframe. 1 ...

  2. WPF基础到企业应用系列7——深入剖析依赖属性(WPF/Silverlight核心)

    一. 摘要 首先圣殿骑士非常高兴这个系列能得到大家的关注和支持.这个系列从七月份開始到如今才第七篇,上一篇公布是在8月2日,掐指一算有二十多天没有继续更新了,最主要原因一来是想把它写好,二来是由于近期 ...

  3. DataTable转换为List<Model>的通用类

    在开发中,把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有模型类型检索方便. 所以很多人都是按照以下方式做的: // 获得查询结果DataTable dt = DbHelper ...

  4. IOS AutoLayout 文章

    开始iOS 7中自动布局教程(一) 开始iOS 7中自动布局教程(二) 代码的方式自动布局 自动布局时计算Cell高度

  5. as 中的反射

    flash.utils包中的getDefinitionByName,getQualifiedClassName,getQualifiedSuperclassName..可以当做反射用. 1.getDe ...

  6. MySQL 高可用MHA安装部署以及故障转移详细资料汇总 转

    http://blog.itpub.net/26230597/cid-87082-list-2/ 1,简介 .1mha简介 MHA,即MasterHigh Availability Manager a ...

  7. IIS 之 添加绑定域名 或 设置输入IP直接访问网站

    1.打开IIS,右键站点 → 编辑绑定,弹出“网站绑定”窗口,如下图:   2.点击“添加”,弹出“添加网站绑定”窗口,如下图:   注意:若想输入 IP 地址直接访问,则可以有以下两种设置任一均可: ...

  8. Scheme中一些函数在C++里面的实现与吐槽

          最终我失败了,这是显而意见,我试图在一个很看重类型是什么的语言中实现无类型操作,事实上,哪怕我实现了基本的cons,car,cdr,list后面的代码也无法写下去.比如说list-n,根据 ...

  9. Honda HDS IMMO PCM Code calculator Free Download

    HDS IMMO PCM Code calculator software for Honda vehicle models is free download available in Eobd2.f ...

  10. 安装Laravel之坎坷记述

    写这篇文章记录以及分享我安装Laravel框架的一些经验 过程如下: 1.按照官方的描述,第一步是先安装composer来管理依赖=>composer下载传送门 下载之后点击安装,按照提示它需要 ...