3.1 Nyambung Hibernate lan Database

Kita sinau babagan carane nyambungake Hibernate menyang aplikasi nggunakake Maven, lan carane peta tabel menyang kelas nggunakake anotasi. Lan saiki pitakonan sabanjure muncul - kepiye carane maca obyek saka database utawa nyimpen ing kono?

Ora cepet banget. Kaping pisanan, sampeyan kudu ngrampungake telung perkara liyane:

  • Konfigurasi sambungan database
  • Nyetel Hibernate
  • Nggarap EntityManager

Hibernate rampung ndhelikake karya karo database saka aplikasi, nanging supaya ora keluwihan, iku kudu dikonfigurasi bener. Sampeyan ora bisa ngliwati tahap iki - yen ora, kepiye carane Hibernate bakal ngerti database kanggo nyimpen obyek?

Hibernate bisa dikonfigurasi lan diwenehi informasi basis data kanthi telung cara

  • Gunakake file Properties
  • Gunakake file hibernate.cfg.xml
  • Gunakake metode kacang Konfigurasi

Lan sanajan aku paling seneng sing pungkasan, sampeyan mesthi bakal nemoni kabeh telu, mula kita bakal nganalisa kabeh telu ing kene.

3.2 Wewenang ing database

Ayo dadi miwiti karo sing paling penting - sambungan database. Kanggo nindakake iki, sampeyan kudu nyedhiyani data supaya Hibernate bisa mlebu menyang database sing dikarepake.

Konfigurasi File Properties
hibernate.properties
hibernate.dialect= org.hibernate.dialect.Oracle9Dialect
hibernate.connection.driver_class= oracle.jdbc.driver.OracleDriver 
hibernate.connection.url= jdbc:oracle:thin:@localhost:1521:supershop
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=update

Setelan sing padha bisa disetel ing wangun file xml:

Konfigurasi adhedhasar XML
hibernate.cfg.xml

<hibernate-configuration>	
	<session-factory>	
        	
    	<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>  	
    	<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 	
    	<property name="connection.url">jdbc:oracle:thin:@localhost:1521:supershop</property>  	
    	<property name="connection.username">root</property>  	
    	<property name="connection.password">secret</property>
    	<property name="hibernate.show_sql ">true</property>        
    	<property name="hbm2ddl.auto">update</property> 	
     	
	</session-factory>	
</hibernate-configuration> 

Ing loro conto, kita ndeleng setelan sing padha karo nilai sing padha. Mung conto pisanan minangka file properti , lan sing nomer loro minangka file xml .

Setelan iki dipérang dadi telung klompok:

  1. Nemtokake jinis DBMS
    • Nemtokake dialek (jinis DBMS), contone, Oracle 9.0
    • Nemtokake jeneng driver JDBC kanggo nggarap DBMS iki
  2. Nemtokake data kanggo wewenang ing database
    • url database
    • jeneng panganggo
    • sandi
  3. Konfigurasi Mesin Hibernate
    • hibernate.show_sql- Hibernate bakal duplikat ing console kabeh panjalukan sing executes
    • hbm2ddl.auto- Hibernate bakal ngganti struktur database yen perlu

Ana cara katelu kanggo nyetel konfigurasi - liwat tong sampah. Biasane digunakake bebarengan karo Spring, supaya kita bakal ndeleng nalika sinau SpringFramework.

3.3 Entuk SessionFactory

Langkah sabanjure kanggo njaluk SessionFactory obyek. Ana sawetara cara kanggo nindakake iki:

Cara pisanan yaiku nggunakake file hibernate.properties .

Kanggo nindakake iki, sampeyan mung kudu nulis kode ing ngisor iki:

SessionFactory sessionFactory = new Configuration().buildSessionFactory();

Yen file hibernate.properties ora ditemokake ing direktori proyek saiki, pangecualian bakal dibuwang.

Cara kapindho yaiku konfigurasi nggunakake hibernate.cfg.xml .

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Yen sampeyan nulis kode kasebut, banjur hibernate.cfg.xml. Yen ora ana file kasebut, metode kasebut buildSessionFactory()bakal mbuwang pengecualian.

Cara katelu yaiku nyetel file konfigurasi kanthi manual .

Kadhangkala sajrone proses pangembangan, sampeyan kudu ngalih menyang basis tes utawa ngganti sawetara setelan liyane kanggo nggarap pangkalan, kanggo iki sampeyan bisa nyetel file konfigurasi kanthi manual:

SessionFactory sessionFactory = new Configuration().configure("hibernate-dev.cfg.xml").buildSessionFactory();

Cara papat - kita nggunakake file hibernate.properties khusus:

ClassLoader classLoader = Thread.currentThread().getClassLoader();

Properties properties = new Properties();
properties.load(classLoader.getResourceAsStream("hibernate-dev.properties"));

SessionFactory sessionFactory = new Configuration()
            .addProperties(properties)
            .buildSessionFactory();

Lan pungkasane, sampeyan mung bisa njahit kabeh parameter sing dibutuhake langsung menyang kode:

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 Nemtokake ngendi kanggo nggoleki kelas Entitas

Nanging ora mung kuwi. Nalika kita ngatur obyek SessionFactory ing Hibernate, SessionFactory iki mriksa sing kabeh tabel sing dibutuhake karo jinis kolom dibutuhake ana ing database.

Lan supaya SessionFactory bisa nindakake iki, kudu dilewati dhaptar kelas entitas sing kudu dipetakan menyang database.

Ana telung cara kanggo ngliwati dhaptar kelas entitas:

Metode siji. Ing hibernate.cfg.xmlnambah baris kaya:

<mapping class="class-qualified-name" />

Tuladha:

<mapping class="com.codegym.data.User" />
<mapping class="com.codegym.data.Employee" />
<mapping class="com.codegym.data.Task" />

Cara loro. Nelpon cara ing obyek KonfigurasiaddAnnotatedClass() . Tuladha:

SessionFactory sessionFactory = new Configuration()
   	.configure()
   	.addAnnotatedClass(com.codegym.data.User.class)
   	.buildSessionFactory();

Yen ana akeh kelas, sampeyan bisa nambah kabeh paket:

SessionFactory sessionFactory = new Configuration()
   	.configure()
   	.addPackage("com.codegym.data")
   	.buildSessionFactory();

3.5 Tuladha pungkasan

Saiki kita wis sinau babagan carane ngatur obyek SessionFactory, ayo nulis kode sing bakal digunakake.

Iku bakal kalebu telung cara:

  1. Konfigurasi Hibernate
  2. Cara sing entuk kabeh karyawan saka database
  3. Cara sing nyimpen karyawan anyar menyang database

Cithakan kode iki bakal katon kaya iki:

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();
     	}
   }
}

Sadurunge nglakokake pitakon menyang database, sampeyan kudu nggawe sesi sing kapisah. Yen panjaluk kasebut ana gandhengane, mula bisa ditindakake ing sesi sing padha. Yen panjaluk kasebut ora ana hubungane (lan sawetara menit bisa dilewati ing antarane), mula kudu nggawe sesi dhewe.

Yen sampeyan pengin maca data saka database utawa nglakokake pitakon kompleks, sampeyan kudu nggawe obyek Query dhisik lan digunakake kanggo nglakokake pitakon sampeyan.

Uga, saben pitakon menyang database dieksekusi ing transaksi dhewe. Sampeyan kudu mbukak, nindakake operasi sing dibutuhake, banjur nutup (komit).

Ing kuliah ing ngisor iki, kita bakal nganalisa kanthi luwih rinci babagan cara kerjane.