๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ๋ฐ ํ ์คํธ
๊ทธ๋ฆฌ๊ณ ์ง๊ธ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด. Hibernate ์ฝ๋๋ฅผ ํ ์คํธํ ๋ ์ค์ ๊ธฐ๋ฐ์ด ์๋๋ผ ์ต์ํ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์ผ์ข ์ ์คํ ์ผ๋ก ์์ ํ๊ธฐ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋งค์ฐ ๋ง์ต๋๋ค.
๋๋ถ๋ถ์ SQL Server ํ์ค์ ๊ตฌํํ๋ ์คํ ์ ์์ํ ์ ์์ต๋๊น? ๋ ์๋์ผ. ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ทธ ์์ฒด๋ก ํ์ํฉ๋๋ค. ๋๋ต ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
- @BeforeAll ๋ฉ์๋์์ ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ด๊ธฐํํฉ๋๋ค.
- @BeforeEach ๋ฉ์๋์์ ์ธ์ ์ ๊ฐ์ ธ์ค๊ณ ํธ๋์ญ์ ์ ์ฝ๋๋ค.
- @Test ๋ฉ์๋์์๋ ํ์ฌ ์ธ์ ๋ฐ ํธ๋์ญ์ ์ผ๋ก ์์ ํฉ๋๋ค.
- @AfterEach ๋ฉ์๋์์ ํธ๋์ญ์ ์ ์ปค๋ฐํฉ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก AfterAll ๋ฉ์๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฐ๊ฒฐ์ ๋ซ์ต๋๋ค.
ํ ์คํธ ์ค๋น๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@Test
public class HelloTest {
private static SessionFactory sessionFactory = null;
private Session session = null;
@BeforeAll
static void setup(){
try {
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure("hibernate-test.cfg.xml").build();
Metadata metadata = new MetadataSources(standardRegistry)
.addAnnotatedClass(Employee.class)
.getMetadataBuilder()
.build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
@BeforeEach
void setupThis(){
session = sessionFactory.openSession();
session.beginTransaction();
}
@AfterEach
void tearThis(){
session.getTransaction().commit();
}
@AfterAll
static void tear(){
sessionFactory.close();
}
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ Hibernate์ ์์ ์์ ํ ์คํธ ์์ฒด๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋๋ค.
@Test
public class HelloTest {
@Test
void createSessionFactoryWithXML() {
Employee emp = new Employee();
emp.setEmail("demo-user@mail.com");
emp.setFirstName("demo");
emp.setLastName("user");
Assertions.assertNull(emp.getEmployeeId());
session.persist(emp);
Assertions.assertNotNull(emp.getEmployeeId());
}
}
ํ ์คํธ ๋ฐ์ดํฐ
ํ ์คํธ ๋ฐ์ดํฐ๋ก ํ ์คํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฑ์ธ ์๋ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด๋ฅผ ์ํด ๋ ๊ฐ์ SQL ํ์ผ์ด ๋ง๋ค์ด์ง๋๋ค.
- schema.sql์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์์ฑํ๋ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- test-data.sql์๋ ํ ์คํธ ๋ฐ์ดํฐ๋ก ํ ์ด๋ธ์ ์ฑ์ฐ๋ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์๋ก ๋ค๋ฅธ ํ ์คํธ ๊ทธ๋ฃน์ ๋ํ ์์ฒด ํ ์คํธ ๋ฐ์ดํฐ ๊ทธ๋ฃน์ด ๊ฑฐ์ ํญ์ ๋ํ๋๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ ์์ฑ ๋ฐ ํ ์คํธ ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ํ์ผ๋ก ๋ถ๋ฆฌ๋ฉ๋๋ค.
์ด ํ์ผ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
void runSqlScriptFile(String filePath){
String sqlScript = new String( Files.readAllBytes(Paths.get(filePath)) );
Session session = sessionFactory.openSession();
Query query = session.createNativeQuery("BEGIN " + sqlScript + " END;");
query.executeUpdate()
}
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ฐฉ๋ฒ์ด ์ฝ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
@BeforeAll
static void setup(){
try {
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure("hibernate-test.cfg.xml").build();
Metadata metadata = new MetadataSources(standardRegistry)
.addAnnotatedClass(Employee.class)
.getMetadataBuilder()
.build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
runSqlScriptFile(โscema.sqlโ);
runSqlScriptFile(โtest-data.sqlโ);
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
GO TO FULL VERSION