记录下一个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. 在WCF中不使用svc文件直接使用cs文件

    在 配置中有个节点可以实现 此功能 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" > &l ...

  2. 关于null和undefined

    null和undefined都是一种类型..typeof查看变量类型.不要为该函数迷惑..因为他只是看上去官方! 见http://www.cnblogs.com/zhepama/articles/30 ...

  3. USB相关知识

    USB基础知识概论 如何实现Linux下的U盘(USB Mass Storage)驱动: How to WriteLinux USB MSC (Mass Storage Class) Driver U ...

  4. Android基本控件之ListView(二)<ListView优化>

    之前我们说到ListView的基本用法.但是,有很多的时候会额外的占用一些内存,从而消耗了性能.既然有消耗性能的可能,那么我们就对其做出相应的优化 我们首先来说说优化的步骤: 第一步.将宽和高设置为填 ...

  5. 用jQuery+easyUI遇到的几个插件与文件详解

    很早就开始跟着老师学习jQuery课程,那时候是要求熟练使用jQuery中的easyUI插件中的控件,包括textbox.combobox.panel.checkbox.tree.datagrid等等 ...

  6. 并发MD5计算方法

    MD5与SHA算法一样,利用他们可以计算某段数据的唯一hash值,常用做校验码.而MD5比SHA算法性能高.在我参加的一个项目中,主要用MD5码值来去重,因此对计算性能要求较高.网上有对MD5算法并行 ...

  7. Google镜像站更新地址

    越来越觉得某度的行为无耻无下限,Google镜像站地址,不方便访问Google的可以参考,后面会尽量保持更新可用的镜像库. (收藏地址即可,免得镜像站被封) https://g.jikewenku.c ...

  8. Wince 中的图形编程

    图形编程程序当中,笔者主要要和大家讨论的是画刷的创建和使用以及绘图函数,比如2D图像的绘制等等. *画刷的定义: HBRUSH hBrush; *画刷的类型: 1. 系统内置画刷:GetStockOb ...

  9. Java Classloader原理分析

       类的加载过程指通过一个类的全限定名来获取描述此类的二进制字节流,并将其转化为方法区的数据结构,进而生成一个java.lang.Class对象作为方法区这个类各种数据访问的入口.这个过程通过Jav ...

  10. hdu 4630 树状数组

    思路:这题的处理方式和hdu4358有点像.我们用一个pre[x]表示约数x的倍数上次出现的位置,将查询按区间的右节点升序排序.num[i]的约数为j,如果pre[j]为0,就将pre[j]置为i;否 ...