如何在我的服务层中公开我的Dao方法?

时间:2011-12-29 16:01:29

标签: java hibernate spring

我的Dao的设置如下:

UserDao
UserDaoImpl

我的业务层位于服务类中:

UserService
UserServiceImpl

现在我的Dao有基本操作,如get,update,save等。

我想在我的服务类中公开这些方法,而不必手动将它们添加到每个服务接口。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

拥有服务的目的是在事务中聚合DAO方法,并添加业务逻辑。如果你所有的服务都在包装各个DAO方法,那就没有意义了。使用像Grails这样的框架(或Play,所以你仍然可以使用Java,如果你想要的话)动态地将数据访问方法添加到你的域对象中,你可以从控制器中调用它们并且可以减少很少的CRUD代码(但仍然如果您以后需要服务,可以选择服务。)

答案 1 :(得分:2)

如果除了CRUD操作之外该服务没有做任何其他事情,并且没有其他服务需要该DAO,我认为没有理由不能将这些操作放在服务实现中并省去DAO。< / p>

将服务用作传递是很容易的:

public interface FooService {
    Foo find(Long id); // Same as DAO signature
}

@Service
public class FooServiceImpl implements FooService {
    @Resource(name = "fooRepository")
    private FooRepository fooRepository;

    public Foo find(Long id) { return this.fooRepository.find(id); }
}

可以写一个通用的DAO:

public interface GenericRepository<V, K extends Serializable> {
    V find(K key);
    List<V> find();
    K save(V value);
    void update(V value);
    void delete(V value);
}

答案 2 :(得分:0)

是的,这是适配器模式的一种变体

您还可以将UserDaoImpl扩展为UserServiceImpl,例如

UserServiceImpl extend UserDaoImpl implements UserService{
  // Rest of the Service implementation
  }