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:
- Učitavanje drajvera baze podataka.
- Uspostavljanje veze (
Connection). - Kreiranje objekta
StatementiliPreparedStatement. - Izvršavanje SQL upita.
- Obrada rezultata (
ResultSet). - 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).