1.以前我们在写dao的时候总是一个类对应一个dao,其实有好多东西是重复,我们能不能设计一个模板类,然后让其他类直接初始化的时候规定号是哪一个实体对应的操作,

然后直接进行对应实体的数据库操作。

2.具体代码如下  定义一个basedao接口

package com.qbd.dhj.bbs.dao;

import java.io.Serializable;
import java.util.List;

import com.qbd.dhj.bbs.utils.PageBean;

public interface BaseDao<T> {
    
    /**
     * 保存一个对象
     *
     * @param o
     * @return
     */
    public List<T> find(String hql,PageBean pageBean);
    public boolean save(T o);
    
    /**
     * 更新一个对象
     *
     * @param o
     */
    public boolean update(T o);
    
    /**
     * 保存或更新对象
     *
     * @param o
     */
    public boolean saveOrupdate(T o);
    
    /**
     * 删除一个对象
     *
     * @param o
     */
    public boolean delete(T o);
    
    /**
     * 查询
     *
     * @param hql
     * @return
     */
    public List<T> list(String sql);
    
    /**
     * 查询集合
     *
     * @param hql
     * @param param
     * @return
     */
    public List<T> find(String hql, Object[] param);

/**
     * 查询集合
     *
     * @param hql
     * @param param
     * @return
     */
    public List<T> find(String hql, List<Object> param);

/**
     * 查询集合(带分页)
     *
     * @param hql
     * @param param
     * @param page
     *            查询第几页
     * @param rows
     *            每页显示几条记录
     * @return
     */
    public List<T> find(String hql, Object[] param, PageBean pageBean);

/**
     * 查询集合(带分页)
     *
     * @param hql
     * @param param
     * @param page
     * @param rows
     * @return
     */
    public List<T> find(String hql, List<Object> param, PageBean pageBean);

/**
     * 获得一个对象
     *
     * @param c
     *            对象类型
     * @param id
     * @return Object
     */
    public T get(Class<T> c, Serializable id);

/**
     * 获得一个对象
     *
     * @param hql
     * @param param
     * @return Object
     */
    public T get(String hql, Object[] param);

/**
     * 获得一个对象
     *
     * @param hql
     * @param param
     * @return
     */
    public T get(String hql, List<Object> param);

/**
     * select count(*) from 类
     *
     * @param hql
     * @return
     */
    public Long count(String hql);

/**
     * select count(*) from 类
     *
     * @param hql
     * @param param
     * @return
     */
    public Long count(String hql, Object[] param);

/**
     * select count(*) from 类
     *
     * @param hql
     * @param param
     * @return
     */
    public Long count(String hql, List<Object> param);

/**
     * 执行HQL语句
     *
     * @param hql
     * @return 响应数目
     */
    public Integer executeHql(String hql);

/**
     * 执行HQL语句
     *
     * @param hql
     * @param param
     * @return 响应数目
     */
    public Integer executeHql(String hql, Object[] param);

/**
     * 执行HQL语句
     *
     * @param hql
     * @param param
     * @return
     */
    public Integer executeHql(String hql, List<Object> param);

/**
     * 执行SQL语句
     * @param sql
     * @return
     */
    public Integer executeSql(String sql);
    
    public List<T> find(String hql);
}

3.书写其实现类

package com.qbd.dhj.bbs.daoimpl;

import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;

import com.qbd.dhj.bbs.dao.BaseDao;
import com.qbd.dhj.bbs.utils.PageBean;

@Repository("baseDao")
public class BaseDaoImpl<T> implements BaseDao<T> {

private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    @Resource
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

public boolean save(T o) {
        // TODO Auto-generated method stub
        try {
            sessionFactory.getCurrentSession().save(o);
            return true;
        } catch (Exception e) {
            // TODO: handle exception
            return false;
        }
        
    }

public boolean update(T o) {
        // TODO Auto-generated method stub
        try {
            //sessionFactory.getCurrentSession().refresh(o);
            sessionFactory.getCurrentSession().merge(o);
            return true;
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.getMessage());
            return false;
        }
    }

public boolean saveOrupdate(T o) {
        // TODO Auto-generated method stub
        try {
            sessionFactory.getCurrentSession().saveOrUpdate(o);
            return true;
        } catch (Exception e) {
            // TODO: handle exception
            return false;
        }
    }

public boolean delete(T o) {
        // TODO Auto-generated method stub
        try {
            sessionFactory.getCurrentSession().delete(o);
            return true;
        } catch (Exception e) {
            // TODO: handle exception
            return false;
        }
    }

public List<T> list(String sql) {
        // TODO Auto-generated method stub
        List<T> list=(List<T>)sessionFactory.getCurrentSession().createQuery(sql).list();
        return list;
    }

public List<T> find(String hql, Object[] param) {
        // TODO Auto-generated method stub
        Query q=sessionFactory.getCurrentSession().createQuery(hql);
        if(param!=null&&param.length>0)
        for(int i=0;i<param.length;i++){
            q.setParameter(i, param[i]);
        }
        return q.list();
    }

public List<T> find(String hql, List<Object> param) {
        // TODO Auto-generated method stub
        Query q=sessionFactory.getCurrentSession().createQuery(hql);
        if(param!=null&&param.size()>0)
        for(int i=0;i<param.size();i++){
            q.setParameter(i, param.get(i));
        }
        return q.list();
    }

public List<T> find(String hql, Object[] param, PageBean pageBean) {
        // TODO Auto-generated method stub
        Query q=sessionFactory.getCurrentSession().createQuery(hql);
        if(param!=null&&param.length>0)
        for(int i=0;i<param.length;i++){
            q.setParameter(i, param[i]);
        }
        return q.setFirstResult(pageBean.getStart()).setMaxResults(pageBean.getPageSize()).list();
    }

public List<T> find(String hql, List<Object> param, PageBean pageBean) {
        // TODO Auto-generated method stub
        Query q=sessionFactory.getCurrentSession().createQuery(hql);
        if(param!=null&&param.size()>0)
            for(int i=0;i<param.size();i++){
                q.setParameter(i, param.get(i));
            }
        return q.setFirstResult(pageBean.getStart()).setMaxResults(pageBean.getPageSize()).list();
    }
    public List<T> find(String hql,PageBean pageBean) {
        // TODO Auto-generated method stub
        Query q=sessionFactory.getCurrentSession().createQuery(hql);
        return q.setFirstResult(pageBean.getStart()).setMaxResults(pageBean.getPageSize()).list();
    }
    public T get(Class<T> c, Serializable id) {
        // TODO Auto-generated method stub
        return (T)sessionFactory.getCurrentSession().get(c, id);
    }

public T get(String hql, Object[] param) {
        // TODO Auto-generated method stub
        List<T> list=find(hql, param);
        if(list!=null&&list.size()>0){
            return list.get(0);
        }
        return null;
    }

public T get(String hql, List<Object> param) {
        // TODO Auto-generated method stub
        List<T> list=find(hql, param);
        if(list!=null&&list.size()>0){
            return list.get(0);
        }
        return null;
    }

public List<T> find(String hql) {
        return sessionFactory.getCurrentSession().createQuery(hql).list();
    }
    
    public Long count(String hql) {
        // TODO Auto-generated method stub
        return (Long) sessionFactory.getCurrentSession().createQuery(hql).uniqueResult();
    }

public Long count(String hql, Object[] param) {
        // TODO Auto-generated method stub
        Query q = sessionFactory.getCurrentSession().createQuery(hql);
        if (param != null && param.length > 0) {
            for (int i = 0; i < param.length; i++) {
                q.setParameter(i, param[i]);
            }
        }
        return (Long) q.uniqueResult();
    }

public Long count(String hql, List<Object> param) {
        // TODO Auto-generated method stub
        Query q = sessionFactory.getCurrentSession().createQuery(hql);
        if (param != null && param.size() > 0) {
            for (int i = 0; i < param.size(); i++) {
                q.setParameter(i, param.get(i));
            }
        }
        return (Long) q.uniqueResult();
    }

public Integer executeHql(String hql) {
        // TODO Auto-generated method stub
        return sessionFactory.getCurrentSession().createQuery(hql).executeUpdate();
    }

public Integer executeHql(String hql, Object[] param) {
        // TODO Auto-generated method stub
        Query q = sessionFactory.getCurrentSession().createQuery(hql);
        if (param != null && param.length > 0) {
            for (int i = 0; i < param.length; i++) {
                q.setParameter(i, param[i]);
            }
        }
        return q.executeUpdate();
    }

public Integer executeHql(String hql, List<Object> param) {
        // TODO Auto-generated method stub
        Query q = sessionFactory.getCurrentSession().createQuery(hql);
        if (param != null && param.size() > 0) {
            for (int i = 0; i < param.size(); i++) {
                q.setParameter(i, param.get(i));
            }
        }
        return q.executeUpdate();
    }

public Integer executeSql(String sql) {
        // TODO Auto-generated method stub
        Query q = sessionFactory.getCurrentSession().createSQLQuery(sql);
        return q.executeUpdate();
    }
}

4.userservice代码

package com.qbd.dhj.bbs.service;

import java.util.List;

import com.qbd.dhj.bbs.model.User;
import com.qbd.dhj.bbs.utils.PageBean;

public interface UserService {

public User  login(User user);
    public boolean add(User user);
    public boolean update(User user);
    public boolean delete(User user);
    public long getUserCount(User user);
    public List<User> list(User user,PageBean pageBean);
}

5.userserviceimpl代码

package com.qbd.dhj.bbs.serviceimpl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.qbd.dhj.bbs.dao.BaseDao;
import com.qbd.dhj.bbs.model.User;
import com.qbd.dhj.bbs.service.UserService;
import com.qbd.dhj.bbs.utils.PageBean;
import com.qbd.dhj.bbs.utils.StringUtil;

@Service("userService")
public class UserServiceImpl implements UserService {

private BaseDao<User> baseDao;
    
    
    
    public BaseDao<User> getBaseDao() {
        return baseDao;
    }

@Resource
    public void setBaseDao(BaseDao<User> baseDao) {
        this.baseDao = baseDao;
    }

public User login(User user) {
        // TODO Auto-generated method stub
        List<Object> param=new ArrayList<>();
        StringBuffer hql=new StringBuffer("from User u where u.name=? and u.password=?");
        param.add(user.getName());
        param.add(user.getPassword());
        return baseDao.get(hql.toString(), param);
    }

public boolean add(User user) {
        // TODO Auto-generated method stub
        return baseDao.save(user);
    }

public boolean update(User user) {
        // TODO Auto-generated method stub
        return baseDao.update(user);
    }

public boolean delete(User user) {
        // TODO Auto-generated method stub
        return baseDao.delete(user);
    }

public long getUserCount(User user) {
        // TODO Auto-generated method stub
        List<Object> param = new ArrayList<Object>();
        StringBuffer hql = new StringBuffer("select count(*) from User");
        if(user!=null){
            if(StringUtil.isNotEmpty(user.getName())){
                hql.append(" and name like ?");
                param.add("%"+user.getName()+"%");
            }
        }
        return baseDao.count(hql.toString().replaceFirst("and", "where"), param);
    }

public List<User> list(User user, PageBean pageBean) {
        // TODO Auto-generated method stub
        List<Object> param = new ArrayList<Object>();
        StringBuffer hql = new StringBuffer("from User");
        if(user!=null){
            if(StringUtil.isNotEmpty(user.getName())){
                hql.append(" and name like ?");
                param.add("%"+user.getName()+"%");
            }
        }
        if(pageBean!=null){
            return baseDao.find(hql.toString().replaceFirst("and", "where"), param,pageBean);
        }else {
            return baseDao.find(hql.toString());
        }
    }

}
6.注意红色的 出事后要指定对应的实体类。

ssh中dao自定义的模板类相关推荐

  1. python 多线程 类_Python中如何自定义一个多线程类呢?

    摘要: 下文讲述Python中自定义一个多线程类的方法分享,如下所示: 实现思路: 1.定义一个类继承threading.Thread 2.在自定义类中构造函数重写run方法 例: Python3中自 ...

  2. WCF 中序列化自定义依赖属性类

    众所周知.NetFramework中存在着两种依赖属性,他们也分别集成着不同但名称相同的依赖对象: System.Windows.DependencyProperty:System.Windows.D ...

  3. 在R.java中新建自定义的新类

    今天在写Android程序的时候,需要引用R.java文件中一些资源.如:R.color.color1 但是我弄了半天都不能在R.java文件中新建color的新类,原因很简单,R.java是不能被编 ...

  4. 简单来说一下java中的泛型,ssh中dao层使用会简化代码量

    原来仅仅是听老师说泛型特别好用,但是后来一直弄android用的泛型就比較少了.但是感觉它真的非常重要,于是花了一下午的时间写了个demo.好,老规矩.上代码: 首先,sysout是个工具,可是用着不 ...

  5. mapreduce中设置自定义的输入类,进行文本解析(默认以tab键为分隔符)

    job.setInputFormatClass(KeyValueTextInputFormat.class);//此时map端输入的键的内容为第一个tab键以左的内容,值得内容为第一个tab键以右的内 ...

  6. c++ template笔记(2)模板类

    1.自定义Stack模板类 #include <vector> #include <stdexcept>template <typename T> class St ...

  7. 模板类h和cpp分开写问题浅析

    .h文件 #pragma oncetemplate<class T> class Person { public:Person(T age);void Show(); public:T a ...

  8. PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP

    smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title} 利用正则表达式找到并替换成 ...

  9. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)...

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code  1 2   template < class _Ty, cla ...

最新文章

  1. 机器学习笔记七:损失函数与风险函数
  2. java excel转word表格_java利用poi生成/读取excel表格、生成word
  3. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II
  4. 忆阻尖峰神经网络中基于STDP的模式识别学习的必要条件
  5. Just For Fun:闲来无事,C语言+GTK生成mnist数据集的图形用户界面GUI
  6. LeetCode 5353. 灯泡开关 III
  7. 今天,很高兴!我成为了园子里的一份子!
  8. js的this作用域
  9. 从游戏AI到自动驾驶,一文看懂强化学习的概念及应用
  10. oel+oracle,OEL7.6安装Oracle Database 19C(VERSION 19.3.0.0)
  11. 互联网企业掀起安全大战 各显神通
  12. MLY -- 11.When to change dev/test sets and metrics
  13. 地下管孔资源紧张,气吹微缆不香吗?
  14. vb/vb.net开发精粹(19)
  15. 中国·乌镇互联网产业园项目总投资约100亿元
  16. TTD 专题 (第一篇):C# 那些短命线程都在干什么?
  17. 网络入侵检测--Snort软件配置文件snort.conf详解
  18. 年终,使用 Python 汇总各月开发的报表数量
  19. DSP ADAU1452输入与ASRC之间的关系
  20. 程序员你需要鼓励师吗?

热门文章

  1. 附解决方案,小程序获取的用户信息中昵称图然变成了“微信用户”,而且头像也显示不了?
  2. clickhouse-backup 备份恢复测试
  3. 数值分析——追赶法求解线性方程组的python实现
  4. 基于Highcharts箱线图实现k线图
  5. 虹膜识别—DeepIrisNet2
  6. 教你一招|Python实现无向图最短路径
  7. Android基础之intent-filter、action、category标签使用
  8. 《暗时间》 读书感悟
  9. 新能源造车的恒大创新样本
  10. 直接存储器存取(DMA)有哪3种工作方式?