【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 ...
随机推荐
- Prometheus 系统监控方案 二 安装与配置
下载Prometheus 下载最新安装包,本文说的都是在Linux x64下面内容,其它平台没尝试过,请选择合适的下载. Prometheus 主程序,主要是负责存储.抓取.聚合.查询方面. Aler ...
- MVC中部分视图调用方法总结
部分视图不走 controller @Html.Partial(“_Menu”); //这种是不走Controller的,直接在加载_Menu的视图 @Html.Partial(“_Menu”, ...
- float4与half4数据类型
连续4个32位float类型数的向量 HLSL数据类型 GPU是以四维向量为基本单位来计算的.4个浮点数所组成的float4向量是GPU内置的最基本类型.使用GPU对两个float4向量进行计算,与C ...
- MFC快速入门 - 菜单
本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6231104.html 打开VS2010,依次打开File – New – Proje ...
- JAVA中使用FTPClient实现文件上传下载实例代码
一.上传文件 原理就不介绍了,大家直接看代码吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- Linux系统下输出某进程内存占用信息的c程序实现
在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统/proc 计算某进程内存占用的程序实现方法. 首先, 为什么会有所谓的 伪文件 呢. Linu ...
- [NOI2006] 最大获利
[NOI2006] 最大获利 ★★★☆ 输入文件:profit.in 输出文件:profit.out 简单对比时间限制:2 s 内存限制:512 MB [问题描述] 新的技术正冲击着手 ...
- [LeetCode] Paint House II 粉刷房子之二
There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...
- C 语言学习 第六次作业总结
本次作业,同学们开始学习函数.通过之前和同学们的沟通,似乎同学们在这里遇到的问题比较多.下面,我先帮同学们整理下函数的相关知识点. 什么是函数 首先,需要明确的是,什么是函数.所谓函数,也就是一段有名 ...
- 【WCF】wcf不支持的返回类型
亲测不支持 DateView 不支持函数重载 参看:http://www.cnblogs.com/zeroone