티스토리 뷰
Hibernate ORM Framework 시작하기.
Hibernate는 ORM기반의 Framework로 오직 객체와 Database Table Mapping을
통해 RDBMS에 접근 가능하도록 모델을 설계한 Framework 이다.
Mybatis 사용 시 SQL 작성 후 Resultset을 통해 DB Access하는 것보다 심플하기 때문에
빠른생산성을 이유로 많이 사용하고 있다. 이러한 ORM개념은 이미 Ruby on Rails를
필두로 Python Django, Node.js의 node-orm, Java JPA등을 통해 지원하고 있다.
Hibernate 설정을 통해 간단한 Application을 작성해 보았다.
개발 환경
Spring Framework 3.2
Maven 3.0.4
Hibernate 4.3.10
MySQL 5.5
step 1. Maven Dependency 추가
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.10.Final</version> </dependency> <dependency> <groupId>org.hibernate.common</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>4.0.5.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
step 2. Table 생성
DROP TABLE IF EXISTS `stock`; CREATE TABLE `stock` ( `STOCK_ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `STOCK_CODE` VARCHAR(10) NOT NULL, `STOCK_NAME` VARCHAR(20) NOT NULL, PRIMARY KEY (`STOCK_ID`) USING BTREE, UNIQUE KEY `UNI_STOCK_NAME` (`STOCK_NAME`), UNIQUE KEY `UNI_STOCK_ID` (`STOCK_CODE`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
step 3. Stock.java 파일 작성
Stock 객체를 생성한다. DB 컬럼과 매칭하여 생성하도록 한다.
Stock.java
package kr.co.rocksea; /** * Model class for Stock */ public class Stock implements java.io.Serializable { private static final long serialVersionUID = 1L; private Integer stockId; private String stockCode; private String stockName; public Stock() { } public Stock(String stockCode, String stockName) { this.stockCode = stockCode; this.stockName = stockName; } public Integer getStockId() { return this.stockId; } public void setStockId(Integer stockId) { this.stockId = stockId; } public String getStockCode() { return this.stockCode; } public void setStockCode(String stockCode) { this.stockCode = stockCode; } public String getStockName() { return this.stockName; } public void setStockName(String stockName) { this.stockName = stockName; } }
step 4. Stock.hbm.xml 파일 설정
Stock 객체와 Table간의 Mapping 위한 XML파일을 생성한 뒤
kr.co.igrove 패키지에 파일을 추가한다.
Stock.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="kr.co.rocksea.Stock" table="stock" catalog="rocksea"> <id name="stockId" type="java.lang.Integer"> <column name="STOCK_ID" /> <generator class="identity" /> </id> <property name="stockCode" type="string"> <column name="STOCK_CODE" length="10" not-null="true" unique="true" /> </property> <property name="stockName" type="string"> <column name="STOCK_NAME" length="20" not-null="true" unique="true" /> </property> </class> </hibernate-mapping>
step 5. hibernate.cfg.xml 파일 설정
DB 정보 및 XML Mapping Resource에 대한 내용 및 Hibernate관련 설정을 한다.
hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">1234</property> <property name="hibernate.connection.url">jdbc:mysql://192.168.0.200:3306/rocksea</property> <property name="hibernate.connection.username">rocksea</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <mapping resource="kr/co/rocksea/Stock.hbm.xml"></mapping> </session-factory> </hibernate-configuration>
step 6. HibernateUtil.java 작성
Hibernate Session에대한 관리를 위한 객체 class파일을 생성한다.
HibernateUtil.java
package kr.co.rocksea; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; public class HibernateUtil { private static SessionFactory sessionFactory; public static SessionFactory getSessionFactory() { if (sessionFactory == null) { // loads configuration and mappings Configuration configuration = new Configuration().configure(); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()).build(); // builds a session factory from the service registry sessionFactory = configuration.buildSessionFactory(serviceRegistry); } return sessionFactory; } public static void shutdown() { // Close caches and connection pools getSessionFactory().close(); } }
step 7. DB Table Record 저장
이제 DB Table에 값을 넣어보도록 한다.
@RequestMapping(value = "/hibernate", method = RequestMethod.GET) public String hibernate(Locale locale, Model model) { logger.info("Welcome home! The client locale is {}.", locale); System.out.println("Maven + Hibernate + MySQL"); SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); Stock stock = new Stock(); stock.setStockCode("1"); stock.setStockName("rocksea"); session.save(stock); session.getTransaction().commit(); return "home"; }
[그림 1] Record 저장 SQL 출력 화면
출처 : http://www.mkyong.com/hibernate/quick-start-maven-hibernate-mysql-example/
'Developer' 카테고리의 다른 글
[Redis] How to use Transaction (2) | 2015.07.27 |
---|---|
[SpringSecurity#1] How to use SpringSecurity (0) | 2015.07.24 |
[SpringFramework] How to use JSON-RPC (0) | 2015.07.22 |
[Django#3] Getting started with simple application (2) | 2015.07.10 |
[Django#2] Getting started with simple application (0) | 2015.07.02 |
- Total
- Today
- Yesterday
- 비교구문
- mongoDB
- 대명사 구문
- AWS
- hdfs
- 베트남
- 비지니스 영어
- Business English
- ubuntu
- 해외여행
- 도덕경
- redis
- nodejs
- hadoop
- JBOSS
- 스페인 여행
- 조동사
- 다낭
- maven
- 영작
- it
- k8s
- Python Django
- 가정법
- Python
- PostgreSQL
- 여행
- NGINX
- 영문법
- memcached
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |