В ОО-программе вы не используете SQL, вместо этого вы позволяете сделать это незаметно для вашего механизма постоянства.Для объяснения:
Если у вас есть объектно-ориентированная программа, вам нужна объектная модель, которая естественным образом представляет концепции автора, книги и магазина.Затем у вас возникает проблема «объект / реляционное отображение».Каким-то образом вы хотите получать данные из базы данных, используя SQL, и при этом работать с вашими объектами естественным образом.
В мире Java мы делаем это с помощью Java Persistence API (JPA).Вы на самом деле не пишете SQL, а просто «аннотируете» Java-класс, чтобы сказать «Этот класс соответствует этой таблице, этот атрибут - этому столбцу», а затем делаете некоторые интересные вещи с JOIN и фактически можете выбрать любой Lazy.или Стремитесь к загрузке, поскольку это имеет смысл.
Таким образом, вы можете получить класс Author (для краткости я делаю здесь атрибуты общедоступными, в реальной жизни у нас есть личные атрибуты, методы получения и установки.
@Entity
public Class Author {
public int id;
public String name;
// more in a minute
Этот класс аннотирован как сущность, поэтому JPA сопоставляет атрибуты объектов с их столбцами в соответствующей таблице. У аннотаций больше возможностей, так что вы можете задавать сопоставления между именами атрибутов и столбцами, которые нене совсем совпадают; сопоставления, такие как
PUBLISHED_AUTHOR => Author,
FULL_NAME => name
А как насчет JOINS и отношений? Класс автора имеет коллекцию Books
@Entity
public Class Author {
public int id;
public String name;
public List<Book> books;
, а класс Book имеет атрибут, которыйэто автор
@Entity
public Class Book {
public int id;
public String title
public Author author
Класс JPA Entity Manager извлекает экземплярBook с использованием метода find (я не буду вдаваться в подробности)
int primaryKey = 1;
Book aBook = em.find( primaryKey); // approximately
Теперь ваш код может просто идти
aBook.author.name
Вы никогда не увидите тот факт, что SQL использовался дляизвлекайте данные для Book, и к тому времени, когда вы запрашиваете атрибут author, также извлекаются данные об авторе.SQL JOIN вполне может быть использован, вам не нужно знать.Вы можете контролировать, будет ли выборка Eager или Lazy с помощью большего количества аннотаций.
Аналогично
int primaryKey = 2
Author author = em.find( primaryKey );
author.books.size() ; // how many books did the author write?
мы получаем список всех книг, а также авторов других данных, SQL произошло, мыне видел этого