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层负责数据的持久化
随机推荐
- mysql 找不到或无法加载已注册的 .Net Framework Data Provider
需要安装 mysql-connector-net-6.7.4.msi 在C盘安装mysql的位置找到三个DLL,复制到Bin文件夹下 在C:\Windows\Microsoft.NET\Framewo ...
- HDU 4593 H - Robot 水题
H - RobotTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.act ...
- Android 滑动效果高级篇(七)—— 华丽翻页效果
By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处 之前看到像ipad上的ibook的模拟书籍翻页的特效感觉很炫,在android上也有像laputa和ireader ...
- 更新mac自带的python
mac lion自带的python是2.7版本的,有点儿低,要使用一些应用的时候还需要3.3以上的,这时可以用以下的方法更新mac自带的python. 先去python的官网下载最新的python,并 ...
- You Need This One Skill to Succeed in IT--reference
The ability to program in five languages, including one machine-level? Not it. Project management sk ...
- Redis HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构. Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非 ...
- 大四找实习(web前端),加油
大四很奇妙,课程变少了,事情却繁杂了. 大三暑假去学驾照,在很多人看来太迟了(毕竟身边很多人跑去实习了),包括我自己.学驾照特别费时间,尤其是对即将大四,希望用实习充实自己的我来说.考虑再三,终于决定 ...
- C++: Why pass-by-value is generally more efficient than pass-by-reference for built-in (i.e., C-like) types
A compiler vendor would typically implement a reference as a pointer. Pointers tend to be the same s ...
- Python文件IO
Python文件IO 有如下文本内容,文件路径为D:\temp,文件名称为lyric.txt, line1 Look ! line2 If U had one shot line3 One oppor ...
- HDU 3999 The order of a Tree 二叉搜索树 BST
建一个二叉搜索树,然后前序输出. 用链表建的,发现很久没做都快忘了... #include <cstdio> #include <cstdlib> struct Node{ i ...