1.BaseDao接口

package com.learning.crm.base;

import java.io.Serializable;
import java.util.List; public interface BaseDao<T> { /**
* 保存
* @param t
*/
public void save(T t); /**
* 更新
* @param t
*/
public void update(T t); /**
* 查询所有
* @return
*/
public List<T> findAll(); /**
* 根据id查询
* @param id
* @return
*/
public T findById(Serializable id); /**
* 删除
* @param t
*/
public void delete(T t); /**
* 条件加分页查询
* @param t
* @param pageSize
* @param currentPage
* @return
*/
List<T> findAll(final String condition,final Object[] objects, final int pageSize, final int currentPage);
}

2.BaseDaoImpl:

package com.learning.crm.base.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.List; import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.learning.crm.base.BaseDao; public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>{ private Class<?> clazz; public BaseDaoImpl() throws InstantiationException, IllegalAccessException {
//获得T
ParameterizedType parameterizedType= (ParameterizedType) this.getClass().getGenericSuperclass();
//获得运行时的T类型
clazz = (Class<?>) parameterizedType.getActualTypeArguments()[0]; } @Override
public List<T> findAll(String condition,final Object[] objects, final int pageSize, final int currentPage) { final String hql="from "+clazz.getName()+" where 1=1 "+condition;
return this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() { public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
query.setFirstResult((currentPage-1)*pageSize);
query.setMaxResults(pageSize);
return query.list();
}
});
} @Override
public void save(T t) {
this.getHibernateTemplate().save(t); } @Override
public void update(T t) { this.getHibernateTemplate().update(t);
} @Override
public List<T> findAll() { return this.getHibernateTemplate().find(" from "+ clazz.getName());
} @Override
public T findById(Serializable id) {
this.getHibernateTemplate().get(clazz, id);
return null;
} @Override
public void delete(T t) {
this.getHibernateTemplate().delete(t); } }

3.编写自己的Dao时,比如UserDao要继承BaseDao,UserDaoImpl要实现UserDao,继承BaseDaoImpl

BaseDao的编写:实现 增,删,改,查,分页这些公共方法的编写的更多相关文章

  1. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  2. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  3. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  4. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  5. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  6. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  7. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  8. list 增 删 改 查 及 公共方法

    # 热身题目:增加名字,并且按q(不论大小写)退出程序 li = ['taibai','alex','wusir','egon','女神'] while 1: username = input('&g ...

  9. 简单的php数据库操作类代码(增,删,改,查)

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

随机推荐

  1. PHP打开空白的解决办法

    先打开错误提示,再查找原因 找到php.ini # 显示错误:On开启,Off关闭 display_errors = On 也可在php文件中加入以下任意一行代码 # 禁用错误报告 error_rep ...

  2. 为什么要使用encodeURL转换URL编码?

    参考: https://www.cnblogs.com/haitao-fan/p/3399018.html http://www.ruanyifeng.com/blog/2010/02/url_enc ...

  3. 练习vue(class,style属性)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 设置xml中控件的圆润边框效果

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...

  5. IOS工作中的问题(转)

    1.UITableView的scrollDelegate问题 下午遇到一个奇怪的问题,之前都没有注意过,由于A VC中要实现tableView和其他View位置的联动,所以实现了tableView的d ...

  6. IOS的各种控件(转载,防止遗忘)

    UITextView控件的详细讲解 感觉写的相当不错,而且很全就直接转载了 1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: #import <UIKit/UIKi ...

  7. windows form参数传递过程

    三.windows form参数传递过程 在Windows 程序设计中参数的传递,同样也是非常的重要的. 这里主要是通过带有参数的构造函数来实现的, 说明:Form1为主窗体,包含控件:文本框text ...

  8. webbench源码学习-->命令行选项解析函数getopt和getopt_long函数

    对于webbench这个网站压力测试工具网上介绍的很多,有深度详解剖析的,对于背景就不在提了, 听说最多可以模拟3万个并发连接去测试网站的负载能力,这里主要是学习了一下它的源码,做点 笔记. 官方介绍 ...

  9. 在树莓派上运行 .net core 2.1 程序 并实现开机启动

    本篇文章完整的说明如和在树莓派上运行 .net core2.1程序,当然也参考了其他的博客,此处结合我自己的经验,再写一篇完整的博客,方便大家,还有我自己进行查阅. https://blog.csdn ...

  10. 使用Django+MySQL+Apache+Linux创建简单的博客

    本教程基于慕课网<Django入门与实践>编写,基于CentOS 7 基础知识 什么是django? Django是一个基于Python的高级Web开发框架, 特点:高效,快速,高度集成( ...