Здравствуйте скажите пожалуйста в чем разница между JPA и HIBERNATE и если не сложно скажите что такое HIBERNATE и что такое JPA
JPA - это стандарт ORM, а Hibernate - это одна из его реализаций.
UPDATE:
Постараюсь как можно более просто. Для начала о том, что такое ORM. Данные в реляционных базах хранятся в таблицах.
id | name | age
-----------------
1 | Jack | 24
2 | John | 31
Если отбросить нюансы, то при выборке этих данных из базы в программу с помощью JDBC получается двумерный "массив" - массив строк таблицы, каждая из которых представляет массив колонок таблицы. Неудобная для работы структура. Java-программистам намного удобнее работать с объектами.
class Person {
long id;
String name;
int age;
// Модификаторы доступа, конструкторы
// и аксессоры опущены для краткости
}
Поэтому программист напишет код, который обойдёт в цикле массив строк, на каждой итерации создаст объект, присвоит полям объекта значения из массива колонок и вернёт их все в виде списка.
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/somedatabase",
"someuser",
"somepassword");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select id, name, age from persons");
List<Person> persons = new ArrayList<>();
while (rs.next()) {
Person person = new Person();
person.setId(rs.getLong("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
persons.add(person);
}
rs.close();
conn.close();
Это называется mapping. Но, во-первых, у всех таблиц разная структура и надо под каждую писать маппер, во-вторых, надо писать запросы в базу на языке SQL, в-третьих, надо самому создавать структуру таблиц. А если на каком-то из этих этапов запутался, компилятор не заметит и программа упадёт при выполнении. К тому же, надо ведь данные ещё и обратно в базу сохранять, извлекать данные из объекта, формировать запрос, выполнять его. Неудобно. Вот бы просто описать класс, а потом запустить какой-нибудь универсальный маппер, чтобы он сам создал таблицу под этот класс и сам конвертировал данные между таблицей и объектами. Такой универсальный маппер и есть ORM.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersonUnit");
EntityManager entityManager = emf.createEntityManager();
List<Person> persons = entityManager.createQuery("from Person", Person.class)
.getResultList();
Чтобы объяснить разницу между стандартом JPA и его реализацией Hibernate прибегну к аналогиям. Стандарт - это схема, описывающая общие принципы работы. Например, схема грузовика описывает, что у грузовика должны быть колёса, кабина, кузов, двигатель, вращение руля должно поворачивать колёса, а нажатие на педаль тормоза останавливать грузовик. Реализация - это конкретное решение выполненное по схеме - ЗИЛ-131, Камаз-43501 и т.п. Преимущество реализации выполненной по стандарту в том, что программист/водитель может легко сменить одну реализацию/грузовик на другую, не тратя время и силы на переобучение.
На сегодняшний день JPA реализуют Hibernate, EclipseLink, OpenJPA и DataNucleus. Широко применяются первые два, а эталонной реализацией считается Hibernate.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как найти нужный мне методДело в том ,что прочитав многие туториалы , так и не сложилось понимание , как же правильно применять те или иные...
Всем привет! Хочу сделать окошко по центру (очень заезжанная тема), но при помощи margin'а не получается(Я гуглил, ничего путного не нагуглил
Продолжаю учиться верстке и хочу сделать такую штуку:
Такой код реагирует на requestFullscreen и cancelFullScreen, но если нажимать F11 консоль остается пустой