通用服务和控制器弹簧

时间:2013-11-13 20:44:08

标签: spring hibernate spring-data-jpa generic-programming

  

package com.lhoussaine.springjsfjpa.entities;

     

@Table(名称= “地址”)    @实体   公共类地址{

    @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扩展了JpaRepository {

     

}

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

  

public interface IAddressService {   }

     

package com.lhoussaine.springjsfjpa.services.generic;

     

import java.util.List;

     

公共抽象类GenericService {
      public abstract T create(T保存);
      public abstract void remove(T删除);
      public abstract T findById(K id);
      public abstract List findAll();       公共摘要T removeById(K id);

     

}

     

package com.lhoussaine.springjsfjpa.services.impl;

     

@服务   @Transactional   公共类AddressService扩展GenericService实现IAddressService {
    @Autowired私有AddressRepository iaddressRepository;

     

公共地址创建(已保存地址){
                地址=已保存;         return iaddressRepository.save(address);
        }

     

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

     

公共地址findById(整数id){
                 return iaddressRepository.findOne(id);
        }

     

public List findAll(){
                return iaddressRepository.findAll();
         }

     

公共地址removeById(整数id){
                地址addr = iaddressRepository.findOne(id);
                如果(地址!= NULL){            iaddressRepository.delete(ADDR);
                }
                返回地址;         }   }

现在的问题是:用控制器怎么办? 为每个类开发控制器?知道我有30个服务类。 是否存在接近相同标准的东西,例如spring-data-jpa,但是对于服务和控制器? 正如您所看到的服务类!我不得不创建genericService类,并为我的包实体中的每个类创建接口。 如果不清楚请告诉我! 感谢

2 个答案:

答案 0 :(得分:1)

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

应创建控制器以实现应用的UI层。因此,一旦您有关于应用程序的特定页面应该如何工作的规范(或清晰的想法),那么实现te控制器和服务来实现此页面。

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

答案 1 :(得分: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