Spring/Spring&Hibernate 강의

hibernate 기초) Retrieving an Object까지

빙하둘리 2022. 12. 31. 01:54
728x90

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

 

728x90