2015-05-20 3 views
0

У меня есть два проекта, но они не используют один и тот же слой DAO, а один проект использует URL-запрос для вызова методов из другого проекта. У меня возникла проблема, когда я создаю объект, мне нужно создать отдельный DAO, службу и так далее. Этот DAO использует разное смещение.проект как перепроектировать для использования уникального dao

Я хочу найти один метод или шаблон с приятным дизайном для использования уникального абстрактного DAO и изменить URL-адрес для более четкого и изменчивого способа.

Мой кода, как:

public static String apiDeviceEdit(Device device, HttpSession session, 
      Long operate) { 
     String userId = (String) session 
       .getAttribute(CommonAttributes.API_USERID_SESSION); 
     String token = (String) session 
       .getAttribute(CommonAttributes.API_TOKEN_SESSION); 
     Assert.notNull(userId); 
     Assert.notNull(token); 
     String param = "user_id=" + userId + "&device_sn=" + device.getfSn() 
       + "&operate=" + operate + "&token=" + token; 

     String string = sendPost(setting.getApiDeviceEdit(), param, 
       "DeviceEdit"); 

     return string; 

    } 

различные Dao так:

@Component 
@Scope("singleton") 
public class ConductorDao extends BaseHBDao <Conductor, Long> { 

    @Autowired 
    public ConductorDao (@Qualifier("sessionFactory") SessionFactory session) { 

     super(); 
     this.setSessionFactory (session); 
    } 
} 

public interface ConductorDao extends BaseDao<Conductor, Long> { 

    final String SELECT_BY_SN = "from Conductor c where c.sn =:sn"; 
    Conductor findBySn(String sn) throws Exception; 
    Page<Conductor> findByUserId(Long getfId, Pageable pageable); 

} 

@Component 
@Scope("singleton") 
public class ConductorDaoImpl extends BaseDaoImpl<Conductor, Long> implements ConductorDao { 

    @Override 
    public Conductor findBySn(String sn) throws Exception { 
     List<Conductor> conductors = entityManager.createQuery(SELECT_BY_SN).setParameter("sn", sn).getResultList(); 
     if (conductors == null || conductors.size()== 0) { 
      return new Conductor(); 
     } 
     else { 
      return conductors.get(0); 
     } 
    } 

    @Override 
    public Page<Conductor> findByUserId(Long getfId, Pageable pageable) { 
     CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 
     CriteriaQuery<Conductor> criteriaQuery = criteriaBuilder.createQuery(Conductor.class); 
     Root<Conductor> root = criteriaQuery.from(Conductor.class); 
     criteriaQuery.select(root); 
     Predicate restrictions = criteriaBuilder.conjunction(); 
     restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get("userId"), getfId)); 
     criteriaQuery.where(restrictions); 
     return super.findPage(criteriaQuery, pageable); 
    } 

} 

ответ

0

ок добавить третий слой абстракции, назовет его бизнес и сделать весь ваш призыв к дао слою из этого новый проект, вырезать весь вызов, который идет непосредственно на dao, чтобы использовать ваш бизнес-уровень. то вы можете использовать свои два баночки dao в этом проекте, и тем самым вы можете открыть его как отдых или веб-службы, если хотите.

Смежные вопросы