Я пытаюсь создать CRUD с как можно меньшим количеством кода, основываясь на: Не повторяйте Дао;У меня есть пара вопросов:
- Существует способ не создавать переменную для каждой таблицы в моей базе данных: userService, phoneService, n тысяч таблиц
- Если это невозможно.Как я мог из String получить эти переменные для вызова функций Dao?
In Контроллер
String model = "phone"
Class<?> abc = model+"Service"; ??
Class<?> def = model; ??
abc.read(def, 1);
??
Дао
public interface GenericDao<E, K> {
public E read(Class<E> type, K id);
}
@Repository
public class GenericDaoImpl<E, K extends Serializable> implements GenericDao<E, K> {
@Autowired
private SessionFactory sessionFactory;
@Override
public E read(Class<E> type, K id) {
return currentSession().get(type, id);
}
}
Сервис
public interface GenericService<E, K> {
public List<E> read(Class<E> type);
}
@Service
@Transactional
public class GenericServiceImpl<E, K> implements GenericService<E, K> {
@Autowired
private GenericDao<E, K> dao;
@Override
public E read(Class<E> type, K id) {
return dao.read(type, id);
}
}
Контроллер
@RestController
@RequestMapping("/{model}")
public class CrudController extends Controller {
@Autowired
protected GenericService<User, Integer> userService;
@Autowired
protected GenericService<Phone, Integer> phoneService;
@GetMapping("/{id}")
public ResponseEntity<Object> read(@PathVariable String model, @PathVariable Integer id) {
Object object = phoneService.read(Phone.class, id);
return ResponseEntity.ok(object);
}
}