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