ssh中dao自定义的模板类
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.注意红色的 出事后要指定对应的实体类。
ssh中dao自定义的模板类相关推荐
- python 多线程 类_Python中如何自定义一个多线程类呢?
摘要: 下文讲述Python中自定义一个多线程类的方法分享,如下所示: 实现思路: 1.定义一个类继承threading.Thread 2.在自定义类中构造函数重写run方法 例: Python3中自 ...
- WCF 中序列化自定义依赖属性类
众所周知.NetFramework中存在着两种依赖属性,他们也分别集成着不同但名称相同的依赖对象: System.Windows.DependencyProperty:System.Windows.D ...
- 在R.java中新建自定义的新类
今天在写Android程序的时候,需要引用R.java文件中一些资源.如:R.color.color1 但是我弄了半天都不能在R.java文件中新建color的新类,原因很简单,R.java是不能被编 ...
- 简单来说一下java中的泛型,ssh中dao层使用会简化代码量
原来仅仅是听老师说泛型特别好用,但是后来一直弄android用的泛型就比較少了.但是感觉它真的非常重要,于是花了一下午的时间写了个demo.好,老规矩.上代码: 首先,sysout是个工具,可是用着不 ...
- mapreduce中设置自定义的输入类,进行文本解析(默认以tab键为分隔符)
job.setInputFormatClass(KeyValueTextInputFormat.class);//此时map端输入的键的内容为第一个tab键以左的内容,值得内容为第一个tab键以右的内 ...
- c++ template笔记(2)模板类
1.自定义Stack模板类 #include <vector> #include <stdexcept>template <typename T> class St ...
- 模板类h和cpp分开写问题浅析
.h文件 #pragma oncetemplate<class T> class Person { public:Person(T age);void Show(); public:T a ...
- PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP
smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title} 利用正则表达式找到并替换成 ...
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)...
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, cla ...
最新文章
- 机器学习笔记七:损失函数与风险函数
- java excel转word表格_java利用poi生成/读取excel表格、生成word
- 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II
- 忆阻尖峰神经网络中基于STDP的模式识别学习的必要条件
- Just For Fun:闲来无事,C语言+GTK生成mnist数据集的图形用户界面GUI
- LeetCode 5353. 灯泡开关 III
- 今天,很高兴!我成为了园子里的一份子!
- js的this作用域
- 从游戏AI到自动驾驶,一文看懂强化学习的概念及应用
- oel+oracle,OEL7.6安装Oracle Database 19C(VERSION 19.3.0.0)
- 互联网企业掀起安全大战 各显神通
- MLY -- 11.When to change dev/test sets and metrics
- 地下管孔资源紧张,气吹微缆不香吗?
- vb/vb.net开发精粹(19)
- 中国·乌镇互联网产业园项目总投资约100亿元
- TTD 专题 (第一篇):C# 那些短命线程都在干什么?
- 网络入侵检测--Snort软件配置文件snort.conf详解
- 年终,使用 Python 汇总各月开发的报表数量
- DSP ADAU1452输入与ASRC之间的关系
- 程序员你需要鼓励师吗?