java - 两个里面几乎有重复代码的类

标签 java model dao persistent

此刻,我有两个类:UserHibernateDaoTicketHibernateDao:

import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import model.dao.Dao;
import model.entity.User;

public class UserDaoHibernate extends HibernateDaoSupport implements Dao<User> {

    public User get(long id) {
        return getHibernateTemplate().get(User.class, id);
    }

    public void save(User user) {
        getHibernateTemplate().save(user);

    }

    public void remove(long id) {
        getHibernateTemplate().delete(
                getHibernateTemplate().get(User.class, id));
    }
}

第二个:

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import model.dao.Dao;
import model.entity.Ticket;

public class TicketDaoHibernate extends HibernateDaoSupport implements
        Dao<Ticket> {

    public Ticket get(long id) {

        return getHibernateTemplate().get(Ticket.class, id);

    }

    public void save(Ticket ticket) {
        getHibernateTemplate().save(ticket);
    }

    public void remove(long id) {

        getHibernateTemplate().delete(
                getHibernateTemplate().get(Ticket.class, id));

    }

    public void save(Ticket ticket) {

        getHibernateTemplate().saveOrUpdate(ticket);

    }
}

我看到这两个类包含几乎相同的方法和方法实现。

我觉得,不是很好。 你怎么看?还是正常的?

最佳答案

像这样的东西应该对你有用,它通常被称为“通用 DAO 模式”。

public abstract class BaseDaoHibernate<T> extends HibernateDaoSupport implements Dao<T> {

    private final Class<T> entityType;

    protected BaseDaoHibernate(Class<T> entityType) {
        this.entityType = entityType;
    }

    public T get(long id) {
        return getHibernateTemplate().get(entityType, id);
    }

    public void save(T entity) {
        getHibernateTemplate().save(entity);
    }

    public void remove(long id) {
        getHibernateTemplate().delete(get(id));
    }
}

然后:

public class TicketDaoHibernate extends BaseDaoHibernate<Ticket> {
    public TicketDaoHibernate() {
        super(Ticket.class);
    }
}

public class UserDaoHibernate extends BaseDaoHibernate<User> {
    public UserDaoHibernate() {
        super(User.class);
    }
}

关于java - 两个里面几乎有重复代码的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006288/

相关文章:

java - Map Stream 获取 Key 和 Value 乘积的总和

c# - 当一切看起来都很好时,为什么我的 MVC 应用程序中的 ModelState.IsValid 属性等于 false

java - 如何使用 Apache Shiro 将哈希 pws 存储到数据库中?

kotlin - 使用jOOQ DAO删除带有复合键的记录

java - 如何在字节数组的开头添加空格

java - 字符串过滤器忽略正则表达式

model - 需要一些帮助来理解模型和数据提供者

java - 每个具有相同结构的多个表一个 DAO

java - AWS lambda JAVA : usage of external libraries

c# - 在没有数据库的情况下在 C# 中使用模型?