dao层实现类的常见写法
记录下一个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层实现类的常见写法的更多相关文章
- 四、spring集成ibatis进行项目中dao层基类封装
Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库 ...
- sping整合hibernate之二:dao层开发
在上一篇日志中将hibernate的会话工厂sessionFactory注入到了spring的容器中,但这样还不够,因为hibernate的增删改查是要使用事务机制的, 所以还要在spring中配置 ...
- ssh_maven的搭建之dao层的开发
之前都是使用我们传统的方式进行引入jar包,现在我们使用maven进行管理依赖,这样,我们的jar就不需要我们进行管理,而且,我们的maven还可以进行项目构建,一个项目从编写源代码到编译,测试,运行 ...
- mybatis dao 层开发简易版 非整合 spring
同样老习惯,先上项目结构截图 首先 补充上篇文中缺失的 mysql demo 用的 小脚本 drop database if exists mybatis; CREATE DATABASE `myba ...
- hibernate+pageBean实现分页dao层功能代码
今天闲来无事,摆弄了一下分页,突然发现很多代码长时间不用就生梳了,虽然有些基础,但没有一篇整合的.这里还是简单示例,主要是以后自己翻着看不用百度找啊找找不到一篇想要的 1.PageBean实体类,一页 ...
- [MyBatis]DAO层只写接口,不用写实现类
团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...
- SpringBoot+MyBatis项目Dao层最简单写法
前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写 ...
- java中dao层的通用层,通过反射机制,操作数据库的增删改,适用的范围是不包含属性类
这里首先必须注意的是:类的类名.字段必须与数据库中的表名和字段名保持一致,否则无法通过反射机制作出通用层 /** * 学生信息类,数据库中的StuInfo表 * */public class StuI ...
- controller层负责创建类传递类给service;service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性;dao层负责数据的持久化
controller层负责创建类传递类给service:service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性:dao层负责数据的持久化
随机推荐
- BZOJ 1051: [HAOI2006]受欢迎的牛 缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- HDU 4588 Count The Carries 数学
Count The CarriesTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- iOS开发——数据持久化Swift篇&文件目录路径获取(Home目录,文档目录,缓存目录等)
文件目录路径获取(Home目录,文档目录,缓存目录等) iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.下面介绍常用的程序文件夹目录: 1,Home ...
- iOS开发——UI_swift篇&TableView自定义聊天界面
TableView自定义聊天界面 1,下面是一个放微信聊天界面的消息展示列表,实现的功能有: (1)消息可以是文本消息也可以是图片消息 (2)消息背景为气泡状图片,同时消息气泡可根据内容自适应大小 ...
- WebBrowser 禁用脚本错误提示
public partial class Text : UserControl { public Text() { ...
- currentTarget 与 Target 的区别
在一般情况下,target与currentTarget指向的是同一个对象.一般情况是指我们只对某一个独立的mc添加侦听器.如下: var mc:Sprite=new Sprite();addChild ...
- Flex4之元数据标签使用
Flex 元数据标签 1.[ArrayElementType] 使用ArrayElementType元数据标签可以让你定义数组元素的数据类型. 程序代码: [ArrayElementType(&quo ...
- Python integer objects implementation
http://www.laurentluce.com/posts/python-integer-objects-implementation/ Python integer objects imple ...
- 网络IPC:套接字之非阻塞和异步I/O
通常,recv函数没有数据可用时会阻塞等待.同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞.在套接字非阻塞模式下,行为会改变.在这种情况下,这些函数不会阻塞而是失败,设置errno ...
- Python_爬虫4
Python爬虫入门(8):Beautiful Soup的用法 上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则 ...