JSP

하이버네이트/JPA - 자바의 ORM.

 

=> 생활 코딩

 

Maven 3 + Hibernate 3.6 + Oracle 11g Example (XML Mapping)

 

 

org.hibernate.MappingException: Unknown entity: annotations.Users

 

 

 

14. hibernate

 

가. 객체 관계 매핑(Object-relational mapping; ORM)

데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않은 데이터를 변환하는 프로그래밍 기법

나. ORM의 종류

1) hibernate

2) mybatis


다. 하이버네이트(Hibernate ORM)

1) 자바 언어를 위한 객체 관계 매핑 프레임워크

2) 객체 지향 도메인 모델을 관계형 데이터베이스로 매핑하기 위한 프레임워크를 

   제공

3) 국내에서는 많이 사용하지 않지만 해외에서는 hibernate 가 많이 사용되고 있음

4) SQL 을 세부적으로 작성하지 않아도 되는 장점이 있으나 사용방법이 복잡함


라. 하이버네이트 설치
1) 다운로드

http://hibernate.org/orm/downloads/ 에서 5.2.10 버전 다운로드


 

 

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>
        <!-- Database connection settings -->
        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:xe</property>
        <property name="connection.username">java</property>
        <property name="connection.password">1111</property>
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
    <!-- <property name="dialect">org.hibernate.dialect.DerbyDialect</property> -->
        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>
 
        <!-- Enable Hibernate's current session context -->
        <property name="current_session_context_class">thread</property>
 
        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
 
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
 

 
 
 <!--    
 	매핑되야 정상이 인데 매핑이 안된다.
 	따라서 
 	onfiguration cfg = new Configuration().configure(configFile)
	            					.addAnnotatedClass(MemoDTOH.class);
	            					설정 했다
 	
 	 <mapping class="memo.dto.MemoDTOH"/>  
 
 -->
       
    </session-factory>
 
 
 
</hibernate-configuration>

 

 

 

 class HibernateManager 

package config;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

import memo.dto.MemoDTOH;
import sqlmap.MybatisManager;

public class HibernateManager {
	
	
	 private static SessionFactory sessionFactory;
	    private static String configFile = "hibernate.cfg.xml";
	 
	    static { //클래스가 로딩도리 때 자동으로 실행되는 코드
	        try {
	            Configuration cfg = new Configuration().configure(configFile)
	            					.addAnnotatedClass(MemoDTOH.class);
	            				
	            
	            StandardServiceRegistryBuilder sb = new StandardServiceRegistryBuilder();
	            sb.applySettings(cfg.getProperties());
	            StandardServiceRegistry standardServiceRegistry = sb.build();
	            
	            
	            //SessionFactory 객체가 생성됨
	            sessionFactory = cfg.buildSessionFactory(standardServiceRegistry);
	        } catch (Throwable th) {
	            System.out.println("Enitial SessionFactory creation failed" + th);
	            throw new ExceptionInInitializerError(th);
	        }
	    }
	 
	    public static SessionFactory getSessionFactory() {
	        return sessionFactory;
	    }
	 
	    public void shutdown() {
	        sessionFactory.close();
	    }
	    


	    
}





 

 

 

class MemoDTOH 

package memo.dto;

import java.util.Date;

import javax.persistence.*;

import org.hibernate.annotations.CreationTimestamp;


	

//현재 클래스가 테이블과 매핑되는 클래스임을 알려줌
@Entity
@Table(name="memo") //memo 테이블과 매핑됨
public class MemoDTOH {

	@Id //primary key
	//자동생성 컬럼
	//GenerationType.AUTO mysql 의 경우 또는 잘 모를 경우 
	// 오라클경우에도 AUTO 설정시 자동으로 처리
	//strategy=GenerationType.SEQUENCE   오라클의 경우
	@GeneratedValue(strategy=GenerationType.SEQUENCE)
	@Column(name="IDX")//클래스의 변수와 테이블의 필드 매핑
	private int idx;
	
	@Column(name="WRITER")
	private String writer;
	
	@Column(name="MEMO")
	private String memo;
	
	
	@CreationTimestamp//타임스탬프생성
	@Temporal(TemporalType.TIMESTAMP)//시스템의 현재 시간
	@Column(name="POST_DATE")
	private Date post_date;//java.util.Date
	
	public MemoDTOH() {
	
	}
	
	public int getIdx() {
		return idx;
	}
	public void setIdx(int idx) {
		this.idx = idx;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getMemo() {
		return memo;
	}
	public void setMemo(String memo) {
		this.memo = memo;
	}
	public Date getPost_date() {
		return post_date;
	}
	public void setPost_date(Date post_date) {
		this.post_date = post_date;
	}
	
	@Override
	public String toString() {
		return "MemoDTOH [idx=" + idx + ", writer=" + writer + ", memo=" + memo + ", post_date=" + post_date + "]";
	}
	
	
	
}

 

class MemoDAOH

package memo.dao;

import java.util.List;

import org.hibernate.Session;

import config.HibernateManager;
import memo.dto.MemoDTOH;

public class MemoDAOH {
	
	public List<MemoDTOH> listMemo(String searchKey, String search){
		List<MemoDTOH> list=null;
		Session session=null;
		try{
			String sql="select idx, writer, memo, post_date"
					+ " from memo order by idx desc ";
			session=HibernateManager.getSessionFactory().openSession();
			list=session.createNativeQuery(sql, MemoDTOH.class).getResultList();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(session!=null)session.close();
		}
		return list;
	}
	
	
	
}

 

class MemoController

}else if(url.indexOf("list.do")!=-1){
			
			String search=request.getParameter("search");
			String searchKey=request.getParameter("searchKey");
			//메모 목록이 리턴됨
			//List<MemoDTO> list=null;
			List<MemoDTOH> list=null;
			if(search==null){
			   list =daoH.listMemo(searchKey, searchKey);
			}else{
				list=daoH.listMemo(searchKey, searchKey);
			}

			//출력 페이지에서 공유할 변수 저장
			request.setAttribute("list", list);
			//페이지 이동(포워딩)
			String page="/memo/memo_list.jsp";
			RequestDispatcher rd=
					request.getRequestDispatcher(page);
			rd.forward(request, response);
			
		

 

 

=> 출력 결과

한줄 메모장

이름 : 메모 :  

  

번호 이름 메모 날짜
12 dsfdsf sdfsdf  

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

내 밥 먹은 개가 발뒤축 문다 , 은혜를 갚기는 커녕 도리어 배반하는 경우를 이르는 말.

댓글 ( 4)

댓글 남기기

작성