【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 ...
随机推荐
- 使用专业的消息队列产品rabbitmq之centos7环境安装
我们在项目开发的时候都不可避免的会有异步化的问题,比较好的解决方案就是使用消息队列,可供选择的队列产品也有很多,比如轻量级的redis, 当然还有重量级的专业产品rabbitmq,rabbitmq ...
- 【mysql】关于binlog格式
写在前面的话 1.推荐用mixed,默认使用statement,基于上下文 set session/global binlog_format=mixed; 2.二进制日记录了数据库执行更改的操作,如 ...
- linux共享windows文件并自动化改变文件编码
以k3日志为例: 在k3的数据库服务器进行如下操作: 1.在k3的数据库服务器导出日志数据到本地D:/K3LOG下(脚本自动化执行) 2.设置脚本定时任务每天拷贝D:/K3LOG下的文件到D:/K3L ...
- ascii、unicode、utf、gb等编码详解
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节".再后来,他们又做了一些可以处理这 ...
- windows10的第一天使用总结
一.快速开机设置 我的电脑配置如图,装有VS2015 2010 OFFICE等常用开发工具,在线升级后开机速度并没有明显提升. 1.保证windows font cache service服务启动,3 ...
- CANopen学习——PDO
查找资料时,发现一个很好的博客,博主剖析的通俗易懂 http://www.cnblogs.com/winshton/p/4897556.html PDO定义: 过程数据对象,用来传输实时数据.因为 ...
- 项目游戏开发日记 No.0x000004
14软二杨近星(2014551622) 还有两周就要交项目了, 我们的作品, 作为作业, 好吧, 其实它完成了接近50%, (only the first bate), 其实也是各种各种忙, 然后才赶 ...
- 利用Oracle创建表空间和用户
本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217152.html 第一步,创建表空间 以SYS/sys账户和SYSDBA身份登录 ...
- MySQL字符串函数substring:字符串截取
MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...
- mvn-打jar运行包(含环境变量配置)
前沿条件 maven下载:http://maven.apache.org/download.cgi 配置环境变量 MAVEN_HOME= D:\Softwares\apache-maven-3.2.2 ...