hibernate 기초) Retrieving an Object까지
mysql에 저장되었다.
CreateStudentDemo.java의 코드는 아래와 같다. 다음 코드를 수행하면 MySQL에 데이터가 저장된다.
transaction은 무엇인가?
package com.luv2code.hibernate.demo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.luv2code.hibernate.demo.entity.Student;
public class CreateStrudentDemo {
public static void main(String[] args) {
// create session factory
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Student.class)
.buildSessionFactory();
// create session
Session session = factory.getCurrentSession();
try {
// create a student object
System.out.println("Creating new student object...");
Student tempStudent = new Student("Paul", "Wall", "paul@luv2code.com");
// start a transaction
session.beginTransaction();
// save the student object
System.out.println("Sabing the student...");
session.save(tempStudent);
// commit transaction
session.getTransaction().commit();
System.out.println("Done!");
}
finally {
factory.close();
}
}
}
Student.java에서
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@GeneratedValue
이거는 뭘까? 기본키 생성 전략
수업으로 돌아가서 mysql에 저장하기를 해보자. 인스턴스 3개 생성하기 위해 다음과 같은 코드를 치고...
package com.luv2code.hibernate.demo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.luv2code.hibernate.demo.entity.Student;
public class PrimaryKeyDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
// create session factory
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Student.class)
.buildSessionFactory();
// create session
Session session = factory.getCurrentSession();
try {
// create a student object
System.out.println("Creating new student object...");
Student tempStudent1 = new Student("John", "Doe", "john@luv2code.com");
Student tempStudent2 = new Student("Mary", "Public", "mary@luv2code.com");
Student tempStudent3 = new Student("Bonita", "Applebum", "bonita@luv2code.com");
// start a transaction
session.beginTransaction();
// save the student object
System.out.println("Sabing the student...");
session.save(tempStudent1);
session.save(tempStudent2);
session.save(tempStudent3);
// commit transaction
session.getTransaction().commit();
System.out.println("Done!");
}
finally {
factory.close();
}
}
}
MySQL handles auto-incrementing // 여기는 1씩 증가
그러면 auto-incrementing을 바꿔볼까?
ALTER TABLE hb_student_tracker.student AUTO_INCREMENT=3000
3000씩 증가하게끔 SQL문 수정
MySQL로 돌아와서 번개 모양 버튼을 누르니 3000씩 증가
이번에는 Retrieving an Object를 해보자.
CRUD 중에 Read를 해본다.
ReadStudentDemo.java
package com.luv2code.hibernate.demo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.luv2code.hibernate.demo.entity.Student;
public class ReadStrudentDemo {
public static void main(String[] args) {
// create session factory
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Student.class)
.buildSessionFactory();
// create session
Session session = factory.getCurrentSession();
try {
// create a student object
System.out.println("Creating new student object...");
Student tempStudent = new Student("Daffy", "Duck", "daffy@luv2code.com");
// start a transaction
session.beginTransaction();
// save the student object
System.out.println("Sabing the student...");
System.out.println(tempStudent);
session.save(tempStudent);
// commit transaction
session.getTransaction().commit();
// MY NEW CODE
// find out the student's id: primary key
System.out.println("Saved student.Generated id: "+tempStudent.getId());
// now get a new session and start transaction
session=factory.getCurrentSession();
session.beginTransaction();
// retrieve student based on the id: primary key
System.out.println("\nGetting student with id: "+tempStudent.getId());
Student myStudent = session.get(Student.class, tempStudent.getId());
System.out.println("Get complete: "+myStudent);
// commit the transaction
session.getTransaction().commit();
System.out.println("Done!");
}
finally {
factory.close();
}
}
}
결과
Creating new student object...
Sabing the student...
Student [id=0, firstName=Daffy, lastName=Duck, email=daffy@luv2code.com]
Hibernate: insert into student (email, first_name, last_name) values (?, ?, ?)
Saved student.Generated id: 3
Getting student with id: 3
Hibernate: select student0_.id as id1_0_0_, student0_.email as email2_0_0_, student0_.first_name as first_na3_0_0_, student0_.last_name as last_nam4_0_0_ from student student0_ where student0_.id=?
Get complete: Student [id=3, firstName=Daffy, lastName=Duck, email=daffy@luv2code.com]
Done!
참고) https://velog.io/@gudnr1451/GeneratedValue-%EC%A0%95%EB%A6%AC
@GeneratedValue 전략
직접 기본키를 생성하는 방법 @Id 어노테이션 만을 사용하여 기본키를 직접 할당해주는 방법이 있다. 기본키를 자동으로 생성하는 방법 4가지 > 기본키를 자동으로 생성할 때에는 @Id와 @GenerratedVa
velog.io
auto increment 뜻) https://seungdols.tistory.com/222
auto_increment란?
데이터가 삽입 될 때마다 1씩 증가해주는 역할을 한다. mysql> create table animals ( -> id mediumint not null auto_increment, -> name char(30) not null, -> primary key (id)); Query OK, 0 rows affected (0.00 sec) mysql> insert into animals
seungdols.tistory.com
트랜잭션 검색한 거)https://coding-factory.tistory.com/226
[DB기초] 트랜잭션이란 무엇인가?
트랜잭션의 정의 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 트
coding-factory.tistory.com
https://gyoogle.dev/blog/computer-science/data-base/Transaction.html
DB 트랜잭션(Transaction) | 👨🏻💻 Tech Interview
DB 트랜잭션(Transaction) 트렌잭션이란? 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위 상태를 변화시킨다는 것 → SQL 질의어를 통해 DB에 접근하는 것 작업 단위 → 많은 SQL 명령문들
gyoogle.dev