Java 两个类,内部代码几乎重复

Java 两个类,内部代码几乎重复,java,model,dao,persistent,Java,Model,Dao,Persistent,现在,我有两个类:userhibernateao和tickethibernateadao: import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import model.dao.Dao; import model.entity.User; public class UserDaoHibernate extends HibernateDaoSupport im

现在,我有两个类:
userhibernateao
tickethibernateadao

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;
导入org.springframework.orm.hibernate3.support.HibernateDaoSupport;
导入model.dao.dao;
导入model.entity.User;
公共类UserDaoHibernate扩展HibernateDaoSupport实现Dao{
公共用户获取(长id){
返回getHibernateTemplate().get(User.class,id);
}
公共作废保存(用户){
getHibernateTemplate().save(用户);
}
公共无效删除(长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);

    }
}
import java.util.List;
导入org.springframework.orm.hibernate3.support.HibernateDaoSupport;
导入model.dao.dao;
导入model.entity.Ticket;
公共类TicketDaoHibernate扩展了HibernateDaoSupport实现
刀{
获取公共车票(长id){
返回getHibernateTemplate().get(Ticket.class,id);
}
公共作废保存(票证){
getHibernateTemplate().save(票据);
}
公共无效删除(长id){
getHibernateTemplate().delete(
getHibernateTemplate().get(Ticket.class,id));
}
公共作废保存(票证){
getHibernateTemplate().saveOrUpdate(票证);
}
}
我看到这两个类包含几乎相等的方法和方法实现


我觉得不太好您怎么看?还是正常?

使用泛型并阅读文档。非常好。

类似的东西应该适合您,它通常被称为“通用DAO模式”

公共抽象类BaseDaoHibernate扩展了HibernateDaoSupport实现Dao{
私有最终类entityType;
受保护的BaseDaoHibernate(类entityType){
this.entityType=entityType;
}
公共不获取(长id){
返回getHibernateTemplate().get(entityType,id);
}
公共作废保存(T实体){
getHibernateTemplate().save(实体);
}
公共无效删除(长id){
getHibernateTemplate().delete(get(id));
}
}
然后:

public class TicketDaoHibernate extends BaseDaoHibernate<Ticket> {
    public TicketDaoHibernate() {
        super(Ticket.class);
    }
}
公共类ticketdao Hibernate扩展basedao Hibernate{
公共TicketDaoHibernate(){
超级(机票、舱位);
}
}

公共类UserDaoHibernate扩展了BaseDaoHibernate{
公共用户hibernate(){
super(User.class);
}
}

将以下有用的方法添加到
公共抽象Dao

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));
    }
}

阅读第二个代码示例中是否应该有2个
公共作废保存(票证)
public class UserDaoHibernate extends BaseDaoHibernate<User> {
    public UserDaoHibernate() {
        super(User.class);
    }
}
public Class<E> getEntityClass() {
    if (entityClass == null) {
        Type type = getClass().getGenericSuperclass();
        if (type instanceof ParameterizedType) {
            ParameterizedType paramType = (ParameterizedType) type;
            entityClass = (Class<E>) paramType.getActualTypeArguments()[0];
        } else
            throw new IllegalArgumentException("Could not guess entity class");
    }
    return entityClass;
}
public T get(long id) {
    return getHibernateTemplate().get(getEntityClass(), id);
}

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