Sobes.tech
Junior

Ako spojiť triedu s databázou v Jave?

sobes.tech AI

Odpoveď od AI

U Javi se obično veza klase s bazom podataka ostvaruje pomoću tehnologija objektno-relejcionog mapiranja (ORM) ili JDBC.

JDBC (Java Database Connectivity)

JDBC je API koji pruža standardni način pristupa relacijskim bazama podataka. Omogućava izvršavanje SQL upita iz Java koda.

Koraci:

  1. Učitavanje drajvera baze podataka.
  2. Uspostavljanje veze (Connection).
  3. Kreiranje objekta Statement ili PreparedStatement.
  4. Izvršavanje SQL upita.
  5. Obrada rezultata (ResultSet).
  6. Zatvaranje resursa (Connection, Statement, ResultSet).

Primer dobijanja podataka:

// Primer dobijanja podataka iz tabele "users"
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;

try {
    // Učitavanje drajvera (zavisi od DB)
    Class.forName("org.postgresql.Driver"); // Primer za PostgreSQL

    // Uspostavljanje veze
    connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mydatabase", "user", "password");

    // Kreiranje Statement
    statement = connection.createStatement();

    // Izvršavanje upita
    resultSet = statement.executeQuery("SELECT id, name, email FROM users");

    // Obrada rezultata
    while (resultSet.next()) {
        int id = resultSet.getInt("id");
        String name = resultSet.getString("name");
        String email = resultSet.getString("email");
        System.out.println("Korisnik ID: " + id + ", Ime: " + name + ", Email: " + email);
    }
} catch (SQLException | ClassNotFoundException e) {
    e.printStackTrace();
} finally {
    // Zatvaranje resursa
    try {
        if (resultSet != null) resultSet.close();
        if (statement != null) statement.close();
        if (connection != null) connection.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

ORM (Objektno-relejciono mapiranje)

ORM okviri (npr. Hibernate, JPA na osnovu Hibernate) automatizuju proces mapiranja Java objekata na tabele baze podataka i obrnuto. Omogućavaju rad sa podacima kao sa Java objektima, bez potrebe za pisanjem SQL-a.

Glavni koncepti:

  • Entity: Obična POJO klasa, označena specijalnim anotacijama, koja odgovara tabeli u bazi.
  • Annotations: Koriste se za opis veza između klase i tabele, polja i kolona, veza između entiteta (jedan prema jednom, jedan prema mnogo itd.).
  • EntityManager (JPA) / Session (Hibernate): Interfejsi za izvršavanje operacija sa entitetima (čuvanje, ažuriranje, brisanje, pretraga).

Primer entiteta:

// Primer entiteta User
import javax.persistence.*;

@Entity // Označava da je entitet
@Table(name = "users") // Ime tabele
public class User {

    @Id // Primarni ključ
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Strategija generisanja ID
    private Long id;

    @Column(name = "name") // Ime odgovarajuće kolone
    private String name;

    @Column(name = "email", unique = true)
    private String email;

    // Getteri, setteri, konstruktori
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Primer čuvanja entiteta pomoću JPA:

// Primer čuvanja entiteta User
import javax.persistence.*;

EntityManagerFactory emf = Persistence.createEntityManagerFactory("my_persistence_unit"); // iz persistence.xml
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();

try {
    transaction.begin();

    User newUser = new User();
    newUser.setName("John Doe");
    newUser.setEmail("john.doe@example.com");

    em.persist(newUser); // Čuvanje entiteta

    transaction.commit();
} catch (Exception e) {
    if (transaction != null && transaction.isActive()) {
        transaction.rollback();
    }
    e.printStackTrace();
} finally {
    em.close();
    emf.close();
}

Izbor između JDBC i ORM:

Karakteristika JDBC ORM (JPA/Hibernate)
Složenost Nizak nivo apstrakcije, više koda. Visok nivo apstrakcije, manje koda.
Fleksibilnost Puna kontrola nad SQL-om. Ograničena mogućnost rada direktno sa SQL-om.
Performanse Potencijalno viša uz ručnu optimizaciju. Može biti niža zbog overhead-a ORM-a.
Vreme razvoja Više vremena za ručno procesiranje podataka. Manje vremena, automatizacija mnogih zadataka.
Podrška veza Zahteva ručno implementiranje. Automatski (jedan prema jednom, jedan prema mnogo).

U modernim Java aplikacijama se obično koriste ORM okviri zbog njihove efikasnosti u razvoju i održavanju. JDBC se koristi u slučajevima kada je potreban potpuni kontrol nad SQL-om ili ORM nije pogodan iz nekog razloga (npr. veoma specifične optimizacije).