3.1 Hibernate және дерекқорды байланыстыру
Біз Hibernate-ті Maven арқылы біздің қосымшаға қосуға үйрендік, сондай-ақ кестелерді аннотациялар арқылы класстарға маптауға да үйрендік. Енді келесі сұрақ туады — дерекқордан объектілерді қалай оқи аламыз немесе оларды қалай сақтай аламыз?
Солай оңай емес. Алдымен үш нәрсені түсіну керек:
- Дерекқорға қосылуды конфигурациялау
- Hibernate-ті баптау
- EntityManager-мен жұмыс

Hibernate сенің қосымшаңнан дерекқормен жұмысты толық жасырса да, ешқандай қиындықтар тумас үшін оны дұрыс конфигурациялау керек. Бұл кезеңді өткізіп жіберуге болмайды — әйтпесе, Hibernate қай дерекқорға объектілерді сақтау керектігін қайдан біледі?
Hibernate-ті конфигурациялау және дерекқор туралы ақпаратты белгілеу үш жолмен мүмкін:
- Properties-файлын қолдану
- hibernate.cfg.xml файлын қолдану
- Configuration бинасының әдістерін қолдану
Әрине, маған соңғысы көбірек ұнайды, бірақ сен үш әдіспен де кездесетін боласың, сондықтан біз барлығын қарастырамыз.
3.2 Дерекқорда авторизация
Ең маңыздысынан бастаймыз – дерекқорға қосылу. Мұны істеу үшін саған Hibernate қажетті дерекқорда авторизациялау үшін қажет деректер көрсету керек.
Properties File Конфигурациясы |
---|
hibernate.properties |
|
Бұл параметрлерді xml-файл түрінде де беруге болады:
XML Based Конфигурациясы |
---|
hibernate.cfg.xml |
|
Екі мысалда да бірдей параметрлер мен бірдей мағыналар берілген. Тек бірінші мысалда олар properties-файлы түрінде, ал екіншісінде xml-файлы түрінде ұсынылған.
Бұл параметрлер үш топқа бөлінеді:
- СУБД түрін көрсету
- Диалекті (СУБД түрін), мысалы, Oracle 9.0-ді көрсету
- Бұл СУБД-мен жұмыс істеу үшін JDBC-драйвер атын көрсету
- Дерекқорда авторизациялау деректерін көрсету
- Дерекқор url
- қолданушы аты
- құпиясөз
- Hibernate қозғалтқышын конфигурациялау
hibernate.show_sql
— Hibernate консольде орындаған барлық сұрауларды көрсетедіhbm2ddl.auto
— Қажет болса, Hibernate дерекқор құрылымын өзгертеді/li>
Конфигурацияларды белгілеудің тағы бір тәсілі бар — бина арқылы. Әдетте ол Spring-пен бірге қолданылады, сондықтан біз оны SpringFramework-ті оқып жүргенде қарастырамыз.
3.3 SessionFactory алу
Келесі кезең — SessionFactory объектісін алу. Мұны жасаудың бірнеше жолы бар:
Бірінші тәсіл — hibernate.properties файлын қолдану.
Мұны істеу үшін тек қана мынадай код жазу керек:
SessionFactory sessionFactory = new Configuration().buildSessionFactory();
Егер hibernate.properties файлы ағымдағы жобаның каталогында табылмаса, онда ерекшелік лақтырылады.
Екінші тәсіл — hibernate.cfg.xml көмегімен конфигурацияла.
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Егер сен сондай код жазсаң, онда hibernate.cfg.xml файлы параметрлер көзі ретінде қолданылатын болады. Егер мұндай файл табылмаса, онда buildSessionFactory()
әдісі ерекшелік лақтырады.
Үшінші тәсіл — қолмен конфигурация файлын көрсету.
Дамыту процесінде тестілік дерекқорға ауысу немесе дерекқормен жұмыс істеу үшін басқа параметрлерді өзгерту қажеттілігі туындауы мүмкін, бұл үшін конфигурация файлын қолмен көрсетуге болады:
SessionFactory sessionFactory = new Configuration().configure("hibernate-dev.cfg.xml").buildSessionFactory();
Төртінші тәсіл — кастомды hibernate.properties файлын қолдану:
ClassLoader classLoader = Thread.currentThread().getClassLoader();
Properties properties = new Properties();
properties.load(classLoader.getResourceAsStream("hibernate-dev.properties"));
SessionFactory sessionFactory = new Configuration()
.addProperties(properties)
.buildSessionFactory();
Соңында барлық қажетті параметрлерді кодқа тура енгізуге болады:
Properties properties = new Properties();
properties.put(Environment.DRIVER, "com.mysql.jdbc.Driver");
properties.put(Environment.URL, "jdbc:mysql://localhost:3306/supershop");
properties.put(Environment.USER, "root");
properties.put(Environment.PASS, "password");
SessionFactory sessionFactory = new Configuration()
.setProperties(properties)
.buildSessionFactory();
3.4 Entity-кластарды қайдан іздеу керек екенін көрсету
Бірақ бұл барлық емес. Біз Hibernate-те SessionFactory объектісін конфигурациялаған кезде, сол SessionFactory дерекқорда барлық қажетті кестелер мен қажетті түрдегі бағаналар бар екенін тексереді.
SessionFactory мұны жасау үшін оған дерекқормен сәйкес келетін entity-класстардың тізімін беру керек.
Entity-класстардың тізімін беру үш тәсілмен мүмкін:
Бірінші тәсіл. hibernate.cfg.xml
файлында келесідей жолды қосу:
<mapping class="полное-имя класса" />
Мысал:
<mapping class="com.javarush.data.User" />
<mapping class="com.javarush.data.Employee" />
<mapping class="com.javarush.data.Task" />
Екінші тәсіл. Configuration объектісіне addAnnotatedClass()
әдісін қолдану. Мысал:
SessionFactory sessionFactory = new Configuration()
.configure()
.addAnnotatedClass(com.javarush.data.User.class)
.buildSessionFactory();
Егер кластар көп болса, оларды пакеттермен қосуға болады:
SessionFactory sessionFactory = new Configuration()
.configure()
.addPackage("com.javarush.data")
.buildSessionFactory();
3.5 Соңғы мысал
Biz конфигурациялауға үйренгеннен кейін, біз оны пайдаланатын код жазайық.
Ол үш әдістен тұрады:
- Hibernate конфигурациялау
- Дерекқордан барлық қызметкерлерді алатын әдіс
- Жаңа қызметкерді дерекқорға сақтайтын әдіс
Код үлгісі осылай көрінеді:
class EmployeeManager {
private SessionFactory sessionFactory;
public void class init() {
this.sessionFactory = new Configuration()
.configure()
.buildSessionFactory();
}
public List<Employee> getAllEmployes() {
try (Session session = sessionFactory.openSession()) {
Query<Employee> query = session.createQuery("from Employee", Employee.class);
return query.list();
}
}
public void addEmployee(Employee employee ) {
try (Session session = sessionFactory.openSession()) {
Transaction transaction = session.beginTransaction();
session.save(employee);
transaction.commit();
}
}
}
Дерекқорға сұрату жасамастан бұрын жеке сессия жасау керек. Егер сұратулар байланысты болса, олар бір сессияда орындалуы мүмкін. Егер сұратулар байланыспаған болса (және олардың арасында бірнеше минут өтуі мүмкін), онда олар үшін өз сессияларын жасау керек.
Дерекқордан мәліметтерді оқығың келсе немесе күрделі сұрату жасағың келсе, алдымен Query объектісін құрып, содан кейін өз сұратуыңды орындау керек.
Сондай-ақ, дерекқорға әр сұрау өзінің жеке транзакциясында орындалады. Оның ашылуы, қажетті операцияларды орындауы, содан кейін жабылуы (commit жасалуы) керек.
Келесі лекцияларымызда бұл барлық процесс қалай жұмыс істейтінін толығырақ қарастырамыз.
GO TO FULL VERSION