ssh中dao自定义的模板类

来源:互联网 发布:开源元数据管理工具 编辑:程序博客网 时间:2024/05/17 07:57

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.注意红色的 出事后要指定对应的实体类。

0 0