0
    package com.lhoussaine.springjsfjpa.entities;

    @Table(name="address")
    @Entity
    public class Address {

             @Id
             @GeneratedValue(strategy = GenerationType.AUTO)
             private int id;
             private String streetNumber;
             private String streetName;
             private String city;
             getter/setter 
    }

我有 30 个实体。

现在存储库:

package com.lhoussaine.springjsfjpa.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.repository.annotation.RestResource;
import com.lhoussaine.springjsfjpa.entities.Address;

@RestResource(rel="address", path="address")
public interface AddressRepository extends JpaRepository<Address,Integer> { 

}

这里我不需要实现 CRUD 操作!感谢 spring-data-jpa!我希望控制器和服务具有相同的标准:

public interface IAddressService {
}


package com.lhoussaine.springjsfjpa.services.generic;

import java.util.List;

public abstract class GenericService<T,K> {         
     public abstract T create(T saved);     
     public abstract void remove(T deleted);    
     public abstract T findById(K id) ;     
     public abstract List<T> findAll();
     public abstract T removeById(K id); 
}


package com.lhoussaine.springjsfjpa.services.impl;

 @Service 
 @Transactional 
 public class AddressService extends GenericService<Address, Integer> implements IAddressService {  
    @Autowired private AddressRepository iaddressRepository;

    public Address create(Address saved) {      
               Address address=saved;
        return iaddressRepository.save(address);    
       }

     public void remove(Address deleted) {
        iaddressRepository.delete(deleted);     
       }

     public Address findById(Integer id) {      
                return iaddressRepository.findOne(id);  
       }

     public List<Address> findAll() {       
               return iaddressRepository.findAll();     
        }

     public Address removeById(Integer id) {        
               Address addr= iaddressRepository.findOne(id);        
               if(addr!=null){
           iaddressRepository.delete(addr);         
               }        
               return addr;
       }
 }

现在的问题是:有了控制器我怎么办?为每个类开发一个控制器?知道我有 30 个服务类。是否有一些接近相同标准的东西,例如 Spring Data JPA,但对于服务和控制器?正如您在服务类中看到的那样!我有义务为GenericService我的包实体中的每个类创建类并创建一个接口。

4

2 回答 2

1

控制器和服务不应该是通用的。虽然可以理解应用程序中的每个实体都可以通过 ID 创建或查找,但服务应该只具有实现应用程序业务逻辑所需的方法。

并且应该创建控制器来实现应用程序的 UI 层。因此,一旦您对应用程序的特定页面的外观和工作方式有了规范(或清晰的想法),然后实现控制器和服务来实现该页面。

如果您的应用程序非常通用以至于它所做的只是创建、更新和删除表中的行,那么您不需要实现任何东西:像 PHPMyAdmin 这样的通用数据库 Web 界面就可以了。

于 2013-11-14T11:31:37.263 回答
0

您只能在没有注释的情况下使用通用服务和控制器,即使用 XML 配置。对于控制器,您还必须为每个控制器设置 Map<[methodName],org.springframework.web.bind.annotation.RequestMapping> 并扩展(覆盖) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 以使用它。参见示例https://sites.google.com/site/beigeerp/home/spring-generic-controller

于 2013-11-21T12:57:05.523 回答