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 {
  }

时间: 2024-08-02 19:16:25

maven项目Dao层优化的相关文章

java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl

在spring+hibernate的web项目中,处理数据层通常会使用Spring框架提供的HibernateTemplate类提供的方法.通常的用法是每一个实体类对应的去写DAO层的接口和实现类.每个实现类中都写hibernateTemp.save(entity).hibernateTemp.update(entity).hibernateTemp.get(id)...这样写固然没错,但存在着大量的重复代码.所以懒惰的程序员烦了,他们要写一个通用的实现类来解决这个问题,让DAO层解放出来.如果

SpringBoot+MyBatis项目Dao层最简单写法

前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写Dao层的接口的.如果你没有一个好的思路,那就看看我的思路吧.如果你有更好的思路,欢迎指正. 正文 1.每一个实体类对应一个Dao接口文件和一个mybatis文件 结构如下: 2.UserDao采用统一写法 Dao层只写六个接口就能解决百分之九十的问题 User.java package com.e

SSH项目Dao层和Service层及Action的重用

各个类的组成 1.BaseDao 对crud的接口进行了抽象设计 2.BaseDaoImpl 对crud做一个公共的实现 3.PersonDao 是一个具体的dao 4.PersonDaoImpl 是一个具体的dao的实现 5.BaseService 对crud进行声明 6.BaseServiceImpl 调用baseDao,对BaseService进行crud的实现 7.PersonService 8.PersonServiceImpl 泛型: 1.泛型的定义 1.泛型是一种类型    1.关

##管家婆项目(dao层)

管家婆项目--dao层代码 package cn.kgc.gjp.dao; import cn.kgc.gjp.domain.ZhangWu; import cn.kgc.gjp.tools.JDBCUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import java.sql.SQLException; import

SSH 项目中 用Hibernate底层 简单的封装DAO层

废话不多少了,主要是使用hibernate的查询方法,自己封装了DAO层,供service来方便使用. 首先:必须要继承的 public class CommonDao extends HibernateDaoSupport 紧接着是要注入必须的数据源: @Resource private SessionFactory sessionFactory; @PostConstruct public void initSessionFactory() { super.setSessionFactory

Maven项目中,使用mybatis,根据数据库自动生成pojo实体类、dao、mapper

一.首先,用eclipse创建一个maven项目. 二.其次,在pom.xml文件下,加入如下插件配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.ap

项目OA之Dao层设计

1.今天中秋节,一个人过,祝自己能找到一个好的实习,不多废话,写上今天的项目笔记. 2.昨天完成了OA系统管理中的User       Department     Role  3个实体类的设计,今天完成其中一组的功能设计,细节很多,知识点很多,整理的比较长. 3.首先需要处理的就是包结构的设计,分三层:显示层(View),业务层(Service),数据访问层(Dao)如下: 包名 说明 com.icss.oa.domain 实体(Domain) com.icss.oa.dao Dao接口 co

029医疗项目-模块三:药品供应商目录模块——Dao层:基本的查询语句的编写

我们安装显示的要求: 我们能看到显示的目录里面有:供货企业的名字(这个数据来自于供货商的表[usergys]),流水号,通用名,剂型(这些都来自药品信息表),供货的状态(这个呢在gysypml_control中其实就是一个数字1或者0,但是我们要显示的是正常或者暂停 啊,这样的话这个信息就要查找数据字典表dictinfo才能达到这个功能的 ).... 所以我们在查上面要显示的内容的时候:要关联的表有 gysypml, usergys, gysypml_control, ypxx,dictinfo

一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构

表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的DAO层就是将访问数据库的代码,数据库层是数据存储与管理的代码 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO. VO,值对象