Я начинаю большие приложения с пружиной, спящим, maven, jpa, springMVC. На данный момент у меня есть 30 классов. (с интерфейсом для каждого класса у нас есть 60 классов) У меня есть два пакета. (Дао и сервис) Для dao я использую класс genericDao. Мой Classe аннотация для всех Dao является:CRUD с общими классами (dao, service)
>
package org.me.dao.jpageneric;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.apache.log4j.Logger;
public abstract class GenericDAO<T, K> {
@PersistenceContext(unitName="database")
protected EntityManager em;
protected Logger logger=Logger.getLogger(getClass());
public abstract Query getByIdQuery(K id);
public abstract Query getAllQuery();
public T save(T saved) {
if (saved == null) {
throw new IllegalArgumentException("L'argument de save() ne doit pas être nul.");
}
return (T) em.merge(saved);
} // save()
public void delete(T deleted) {
if (deleted == null) {
throw new IllegalArgumentException("L'argument de delete() ne doit pas être nul.");
}
em.remove(deleted);
} // delete().
@SuppressWarnings("unchecked")
public T get(K id) {
if (id == null) {
throw new IllegalArgumentException("L'argument de get() ne doit pas être nul.");
}
Query query = getByIdQuery(id);
return (T) query.getSingleResult();
}
@SuppressWarnings("unchecked")
public List<T> getAll() {
logger.debug("Récupération de tous les objets");
Query query = getAllQuery();
return (List<T>) query.getResultList();
}
Каждый Dao обязательно проходит этот Classe и implemente его интерфейс (и я должен сделать это для 30 других классов). Надеюсь, это хорошая практика.
После этого у меня есть еще один абстрактный общий класс для классов услуг.
package org.me.service.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();
}
ей одно и то же, все службы Classe должны расширить этот общий класс обслуживания и реализовать интерфейс каждого Классе. Это хорошая практика снова?
Из корня у меня есть интерфейс для каждого класса (пакеты dao и службы).
Другой вопрос: мне нужно создавать контроллеры, как я это делаю? Чтобы создать контроллер для каждого класса (скажем, 30 контроллеров?) и как делать со страницами html и jsp? Спасибо. А жаль мой английский плохо :-)
Услуги и контроллеры должны внедрять прецеденты вашего приложения. Они не должны содержать произвольные методы создания, удаления и поиска. Допустим, вы внедряете приложение Банка. Вы действительно не хотите перечислять все учетные записи (которые могут быть миллионы) или все клиенты, не так ли? Кроме того, JPA имеет 'EntityManager.find()' для получения объекта по ID. Используйте это, а не запрос. –
thnks для этой информации. я изменил то, что вы говорите! более легкий и очень полезный. мое заявление касается посольства, агентства путешествий и министерства иностранных дел. –