maven项目Dao层优化
平时我们习惯一个实体类就对应一个dao类,这样做,增删改查都大同小异,只是实体类对象不一样而已,因此,我们可以把公用的方法抽取来,建立一个IBaseDao接口,如下:
public interface IBaseDao<T> {
//增加
public Serializable save(T o);
//删除
public void delete(T o);
//更改
public void update(T o);
//查找(单个)
public T get(String hql,Map<String,Object> params);
//查找列表
public List<T> find(String hql);
//根据条件查找
public List<T> find(String hql,Map<String,Object> params);
}
对应的实现类:BaseDao
@Repository("baseDao")
public class BaseDaoImp<T> implements IBaseDao<T> {
@Resource
private SessionFactory sessionFactory;
public Serializable save(T o) {
return sessionFactory.getCurrentSession().save(o);
}
public void delete(T o) {
sessionFactory.getCurrentSession().delete(o);
}
public void update(T o) {
sessionFactory.getCurrentSession().update(o);
}
@SuppressWarnings("unchecked")
public T get(String hql, Map<String, Object> params) {
Query q=sessionFactory.getCurrentSession().createQuery(hql);
if(params!=null&&!params.isEmpty()){
for(String key:params.keySet()){
q.setParameter(key, params.get(key));
}
}
List<T> l=q.list();
if(l!=null&&l.size()>0){
return l.get(0);
}
return null;
}
@SuppressWarnings("unchecked")
public List<T> find(String hql) {
return sessionFactory.getCurrentSession().createQuery(hql).list();
}
@SuppressWarnings("unchecked")
public List<T> find(String hql, Map<String, Object> params) {
Query q=sessionFactory.getCurrentSession().createQuery(hql);
if(params!=null&&!params.isEmpty()){
for(String key:params.keySet()){
q.setParameter(key, params.get(key));
}
}
return q.list();
}
}
每一个实体类对应的接口只要去继承基接口IBaseDao,而实体类去继承BaseDaoImp类 ,同时实现对应的接口即可,这样大大减少了代码量,如下:
public interface IUserDao extends IBaseDao<Tuser> {
}
@Repository("userDao")
public class UserDao extends BaseDaoImp<Tuser> implements IUserDao {
}
最新文章
- [备查]使用 SPQuery 查询 ";Person or Group"; 字段
- [GodLove]Wine93 Tarining Round #3
- ios 同步Get请求的实现
- 离线渲染中的不规则光源(Meshlight)
- [原创]DELPHI木马DIY之生成服务端
- JavaScript: JavaScript的简介和入门代码演示
- 使用Zxing实现扫二维码描
- HDU 4630、BOJ 某题
- Angular2,React集成
- 最近提交一个mysql5.7的bug,提醒自己以后注意写SQL要规范
- MySql-5.7.17-20解压缩版安装配置
- DeepLearning.ai-Week4-Deep Learning &; Art: Neural Style Transfer
- java学习笔记41(数据库连接池 C3p0连接池)
- 浅谈Java多线程中的join方法
- 协程(Coroutine)并不是真正的多线程
- [学习]仿照cnblog 搭建 Oracle RAC 双节点 困.. 后续做不下去了..
- jQuery的动画与特效
- 注册google账号时出现手机号的问题
- 静态实现AOP(翻译自MSDN)
- QDUOJ 东北大炸弹 宝岛地图-枚举+数组记录+前缀和
热门文章
- asp.net 上传XML,txt 直接读取文件内容
- 【bzoj4518】[Sdoi2016]征途 斜率优化dp
- LeetCode-Integer Breaks
- 170302、 Apache 使用localhost(127.0.0.1)可以访问,使用本机局域网IP(192.168.2.*)不能访问
- 火狐老是弹出下载openh264-win32.zip怎么取消
- sql---字段类型转换,sql获取当前时间
- 利用jdt快速实现pmd的功能
- django模板之导入与继承
- Android ViewGroup onInterceptTouchEvent
- Linux学习笔记(9)linux网络管理与配置之一——Linux基础网络命令与学习大纲(0)