Skip to content
Eugene Maximov edited this page Apr 8, 2015 · 1 revision

Тестовое задание

Написание простейшей ORM библиотеки

Требyется создать библиотеку java-классов, которая позволяла бы сохранять в БД и извлекать произвольные плоские объекты.

Библиотека должна предоставлять:

  1. Класс, реализующий интерфейс EntityManager, используемый для сохранения в БД и извлечения из БД объектов, см. приложение 1.
  2. Аннотацию @Id, которой помечается свойство объекта, соответствующие первичному ключу. Пример использования описан в приложении 2.

Требования к реализации библиотеки:

  1. Библиотека должна использовать только возможности JavaSE без использования дополнительных библиотек.
  2. Библиотека должна работатать с БД Postgres через интерфейс JDBC
  3. Библиотека должна предоставлять функции для соединения с БД и отключения от нее.
  4. Библиотека должна позволять сохранять в БД и извлекать из БД объекты произвольных плоских классов, в объявлении которых есть свойство, помеченное аннотацией @Id. "Плоский" означает, что все члены класса имеют один из примитивных типов.
  5. Библиотека должна сама создавать в БД таблицы, соответствующие классам сохраняемых объектов, Имена таблиц соответствуют именам классов объектов, имена колонок соответствуют именам свойств объектов.
  6. Работа с библиотекой должна быть потокобезопасна.
  7. Библиотека должна быть документирована по стандарту JavaDoc
  8. Сборка библиотеки должна производится стандартным инструментом (ant, maven или gradle по выбору)

Рекомендуется задавать вопросы, уточняющие требования к выполнению задания.

Приложение 1. Интерфейс EntityManager
public interface EntityManager 
{
 	//сохранить объект
    public <T> void persist(T entity) throws Exception;
    //Получить объект определенного типа по его ключу
    public <T, IdT> T getById(Class<T> type, IdT id) throws Exception; 
	//Получить все объекты определенного типа
    public <T> List<T> getAll(Class<T> type) throws Exception; 
}
Приложение 2. Пример Использования библиотеки

Пример класса для сохранения в БД:

public class SomeEntity {
    @Id
    private long num;
    private String data;
    private transient int otherData;
    public long getNum(){...};
    public String getData(){...};
    public long getOtherData(){...};
    
    public void setNum(long num){...};
    public void getData(String data){...};
    public void setOtherData(long otherData){...};
} 

Пример сохранения в БД и извлечения из БД:

SomeEntity ent1, ent2, ent3;
ent1=...
ent2=...
ent3=...
...
EntityManager em=...
em.persist(ent1);
long id2=em.persist(ent2);
em.persist(ent3);
...
SomeEntity ent=em.getById(SomeEntity.class, id2);
List<SomeEntity> allEnts=em.getAll(SomeEntity.class);