【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 ...
随机推荐
- 简体中国版文档的Markdown语法
Markdown文件 注意︰这是简体中国版文档的Markdown语法.如果你正在寻找英语版文档.请参阅Markdown︰ Markdown: Syntax. Markdown: Syntax 概述 哲 ...
- node 异步回调解决方法之yield
先看如何使用 使用的npm包为genny,npm 安装genny,使用 node -harmony 文件(-harmony 为使用es6属性启动参数) 启动项目 var genny= require( ...
- Windows批处理:自动开关程序
公司有台14年组装的PC,时常无故重启,所以编写了个然并卵的批处理来测试稳定性. 打开程序.bat @echo off title Start Software color 2F : "C: ...
- 手动配置三台虚拟机pacemaker+corosync并添加httpd服务
创建三台虚拟机,实验环境:centos7.1,选择基础设施服务安装. 每台虚拟机两块网卡,第一块为pxe,第二块连通外网,手动为两块网卡配置IP.网关,使它们都能ping通外网并可以互相通过hostn ...
- 前端之web上传文件的方式
前端之web上传文件的方式 本节内容 web上传文件方式介绍 form上传文件 原生js实现ajax上传文件 jquery实现ajax上传文件 form+iframe构造请求上传文件 1. web上传 ...
- Node.js起步 -- (1)
先来简单介绍nodeJS 我们知道JavaScript是运行在浏览器中的,浏览器为它提供了一个上下文(context),从而让JavaScript得以解析执行. nodeJS其实可以这么理解,它是另外 ...
- [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...
- 实现css两端对齐
如何实现css的两端对齐功能? 最近做项目遇到这种情况,如图所示: input左边框的用户,旧密码,新密码,确认密码无法对齐,样式很丑. 解决办法: 找到对应的类名,加上:text-align:jus ...
- 《UNIX环境高级编程》笔记——1.UNIX基础知识
这一章节侧重一些基本概念和书中用到的一些名词. 一.引言 所有的操作都提供服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储区以及获得当前时间等. 二.UNIX体系结构 其实linux常见 ...
- 使用Eclipse进行远程调试
转自:http://blog.csdn.net/sunyujia/article/details/2614614 今天决定做件有意义的事,写篇图文并茂的blog,为什么要图文并茂?因为很多事可能用语言 ...