【01-05】hibernate BaseDao
BaseDao接口定义
package org.alohaworld.util.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* @author aloha_world_
* @date 2016年11月13日 上午11:27:24
* @version v1.00
* @description
*/
public interface BaseDao<T> {
T get(Class<? extends T> clazz, Serializable id);
Serializable save(T t);
void update(T t);
void delete(T t);
List<T> find(String hql, Map<String, Object> params);
List<T> find(String hql, Object[] params);
List<T> find(String hql, Object[] params, Integer page, Integer rows);
List<T> list(String hql);
}
BaseDao实现
package org.alohaworld.util.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
/**
* @author aloha_world_
* @date 2016年11月13日 上午11:30:05
* @version v1.00
* @param <T>
* @description
*/
@Repository
/**
* 为什么 @Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为
* Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 Spring
* 本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。
*
* @author 123456
*
* @param <T>
*/
public class BaseDaoImpl<T> implements BaseDao<T> {
@Autowired
private SessionFactory sf;
@Override
public T get(Class<? extends T> clazz, Serializable id) {
return sf.getCurrentSession().get(clazz, id);
}
@Override
public Serializable save(T t) {
return sf.getCurrentSession().save(t);
}
@Override
public void update(T t) {
sf.getCurrentSession().update(t);
}
public SessionFactory getSessionFactory() {
return sf;
}
@Override
public void delete(T t) {
sf.getCurrentSession().delete(t);
}
@SuppressWarnings("unchecked")
@Override
public List<T> find(String hql, Map<String, Object> params) {
// select * from a where a=:param1 and b=:param2
Query query = sf.getCurrentSession().createQuery(hql);
Set<Map.Entry<String, Object>> entrySet = params.entrySet();
for (Map.Entry<String, Object> entry : entrySet) {
query.setParameter(entry.getKey(), entry.getValue());
}
return query.list();
}
@Override
public List<T> find(String hql, Object[] params) {
return null;
}
@SuppressWarnings("unchecked")
@Override
public List<T> find(String hql, Object[] params, Integer page, Integer rows) {
Query query = sf.getCurrentSession().createQuery(hql);
query.setFirstResult(rows * (page - 1));
query.setMaxResults(rows);
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public List<T> list(String hql) {
return sf.getCurrentSession().createQuery(hql).list();
}
}
Service工具类
//通过spring自动注入
@Autowired
private BaseDao<User> dao;
【01-05】hibernate BaseDao的更多相关文章
- 【SSH系列】---Hibernate的基本映射
开篇前言 在前面的博文中,小编分别介绍了[SSH系列]-- hibernate基本原理&&入门demo,通过这篇博文,小伙伴们对hibernate已经有了基本的了解,以及h ...
- 【SSH系列】-- Hibernate持久化对象的三种状态
在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是 ...
- 【SSH系列】hibernate映射 -- 一对一双向关联映射
开篇前言 上篇博文[SSH进阶之路]hibernate映射--一对一单向关联映射,小编介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身 ...
- 【面试 hibernate】【第二篇】hibernate相关问题
1.hibernate工作原理[说一下你怎么理解的hibernate] hibernate是一个ORM对象关系映射的持久层框架,是对JDBC的轻量级封装. [可以不记,hibernate核心接口] 1 ...
- 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)
目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...
- POJ 2923 Relocation 装车问题 【状态压缩DP】+【01背包】
题目链接:https://vjudge.net/contest/103424#problem/I 转载于:>>>大牛博客 题目大意: 有 n 个货物,并且知道了每个货物的重量,每次用 ...
- HDU 2955 Robberies【01背包】
解题思路:给出一个临界概率,在不超过这个概率的条件下,小偷最多能够偷到多少钱.因为对于每一个银行都只有偷与不偷两种选择,所以是01背包问题. 这里有一个小的转化,即为f[v]代表包内的钱数为v的时候, ...
- 【16.05%】【codeforces 664B】Rebus
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【19.05%】【codeforces 731F】 Video Cards
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
随机推荐
- mysql半同步复制问题排查
1.问题背景 默认情况下,线上的mysql复制都是异步复制,因此在极端情况下,主备切换时,会有一定的概率备库比主库数据少,因此切换后,我们会通过工具进行回滚回补,确保数据不丢失.半同步复制则 ...
- hibernate注解CascadeType
http://blog.csdn.net/strong8808/article/details/6318994(参考) CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体, ...
- 【linux】free命令中cached和buffers的区别
一.命令 [root@localhost ~]# free -m total used free shared buffers cached Mem: 7869 7651 218 1 191 5081 ...
- iOS开发常用代码块(第二弹)
GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispat ...
- 刷新页面时 select值保持不变
刷新页面时,要使下拉菜单(select).raido保持不变,用ajax是无法实现的.我想只能通过cookies才能实现.刷新前先把select或radio的值保存在cookies中,刷新后再填回去. ...
- Salesforce Apex 使用JSON数据的示例程序
本文介绍了一个在Salesforce Apex中使用JSON数据的示例程序, 该示例程序由以下几部分组成: 1) Album.cls, 定了了封装相关字段的数据Model类 2) RestClient ...
- jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table. Run the create.jbpm.schema target first in the install tool.
jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table. Run the create.jbpm.schema target first in the ...
- Hemodynamic response function (HRF) - FAQ
Source: MIT - Mindhive What is the 'canonical' HRF? The very simplest design matrix for a given expe ...
- UOJ #221 【NOI2016】 循环之美
题目链接:循环之美 这道题感觉非常优美--能有一个这么优美的题面和较高的思维难度真的不容易-- 为了表示方便,让我先讲一下两个符号.\([a]\)表示如果\(a\)为真,那么返回\(1\),否则返回\ ...
- [LeetCode] Burst Balloons 打气球游戏
Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by ...