JBoss Hibernate 2006 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice
2 20 5 2
3 20 5 2
Hibernate Hibernate O/R Mapping Tool Hibernate 4 20 5 2
Hibernate
Hibernate 2002 O/R Mapping Hibernate Core Hibernate Hibernate Annotation Hibernate EntityManager EJB3.0/JPA Hibernate Shards Horizontal Data Partitioning Hibernate Validator API Hibernate Search Apache Lucene Hibernate Tools Eclipse/Ant 6 20 5 2
Hibernate 3 JDK.3. JDK.4.2 JavaSE 5.0 Oracle, DB2, Sybase, MS SQL Server, PostgreSQL, MySQL, HypersonicSQL, Mckoi SQL, SAP DB, Interbase, Pointbase, Progress, FrontBase, Ingres, Informix, Firebird Java JMX.2 JTA.0.B JDBC 3.0 JNDI.2. 7 20 5 2
www.hibernate.org : Hibernate Core 3.2.6.ga 2008 2 : LGPL Red Hat Hibernate Core 3.2 JBoss EAP (Enterprise Application Platform) JBoss EAP EJB3 8 20 5 2
Hibernate
RDB 0 20 5 2
SQL JDBC RDB SQL DAO Hibernate O/R Mapping Tool 20 5 2
SQL (Struts,JSF) Web :insert.; :select ; :update ; :delete ; Application Server (JBoss/Tomcat) Java SQL JDBC 2 3 2 20 5 2
DAO Web Data Access Object DAO JDBC Application Server (JBoss/Tomcat) Java 2 3 3 20 5 2
DAO Web RDB SQL DAO Application Server (JBoss/Tomcat) Java public Category findby(long id) { result = null; String sqlquery = SELECT,, + FROM WHERE = + id.tostring(); String sqlquery2 = SELECT FROM + WHERE = + id.tostring(); Connection conn = null; try { conn = getconnection(); ResultSet rs = conn.createstatement(). executequery(sqlquery); if (rs.next()) { result = new (); result.setid(rs.getlong()); result.set(rs.getstring(2)); result.set (rs.getlong(3)); // rs = conn.createstatement().executequery(sqlquery2); //... } catch (Execption e) { // } finally { if (conn!= null) conn.close(); } return result; } JDBC 2 3 4 20 5 2
DAO 5 20 5 2
Hibernate 6 20 5 2 Web Hibernate DAO Hibernate O/R O/R Mapping Mapping Application Server (JBoss/Tomcat) Java public Category findbyid(long id) { Category result = null; // Hibernate Session session = HibernateUtil.getSession(); // result = (Category)session.load(.class, id); // session.close(); return result; } SQL RDB JDBC 2 3
7 20 5 2 Hibernate Hibernate 2 xxx-xxxx 26 2 xxx-xxxx 32 26 2 32 2 USER_ 2 xxx-xxxx xxx-xxxx 0..*..* 0..* ISBN JBoss 2 Hibernate 2 0 Hibernate 2 xxxx-xxxxx ISBN 2007/2/3 2
Hibernate
9 20 5 2 Hibernate Hibernate 3 2 (null) Application Server Category.hbm.xml hibernate.cfg.xml Session Factory JTA Category Category DAO JDBC Session Session Session Hibernate O/R Mapping Hibernate
2 3 (null) Hibernate SessionFactory.openSession() Session / Session.close() Session Session Hibernate Hibernate RDB Category Application Server Hibernate Category DAO hibern ate.cf g.xml Session Factory Session Session JTA Catego O/R O/R ry.hb Mapping Mapping m.xml JDBC 20 20 5 2
22 20 5 2 get() load() createquery() save() saveorupdate() persist() evict() close() clear() update() saveorupdate() lock() delete() RDBHibarnate 3 Hibernate RDB Session
23 20 5 2 Hibernate 3 2 (null) Application ServerO/R Mapping O/R Mapping Categor y.hbm. xml hibern ate.cfg.xml Session Factory JTA Category Category DAO JDBC Session Session Session Category
24 20 5 2 Hibernate Order... JDBC Order... Order... Order... HTTP HTTP
RDB setter HibernateRDB getter RDB Hibernate lazy= true 25 20 5 2
. setter/getter 2. Session 3. Criteria API 4. Hibernate Query Language (HQL) 5. SQL 27 20 5 2
Session Session.save() Session.saveOrUpdate() Session.update() Session.delete() Session.get() Session.load() RDB RDB null RDB 28 20 5 2
Session public void updatecategory(category cat) { try { session = HibernateUtil.getSession(); trx = session.begingtransaction(); session.update(cat); trx.commit(); } catch (Exception e ) { if (trx!= null ) trx.rollback(); throw e; } finally { if (session!= null) session.close(); } 29 20 5 2
Criteria Java Session List<Category> result = SQL session.createcriteria(category.class).add( Restrictions.like( name, % ) ).addorder( Order.asc( name ) ).list(); name select, NAME, PARENT_ from CATEGORY where NAME like '%' order by NAME asc Categroy Criteria name 30 20 5 2
Hibernate Query Language (HQL) Hibernate SQL JOIN, WHERE, ORDER BY, GROUP BY, List<Category> result = session.createquery( FROM Category c WHERE c.name LIKE % ORDER BY c.id ).list(); SQL select, NAME, PARENT_ from CATEGORY where NAME like '%' order by NAME name 3 20 5 2
SQL RDBSQL List<Category> results = session.createsqlquery( SELECT source.id as {target.id}, source.name as {target.name}, source.parent_id as {target.parent_id} SQL FROM CATEGORY source WEHRE source.name LIKE % ORDER BY source.id ).addentity( target, SQL Category.class ).list(); 32 20 5 2
Hibernate 2 JDBC JTA API JDBC JTA JDBC JTAHibernate 34 20 5 2
35 20 5 2 Hibernate Web Hibernate 3 2 (null) Application Server Java CategoryDAO O/R Mapping O/R Mapping O/R Mapping Hibernate Hibernate SessionFactory JTA JDBC/SQL JDBC Session Category Session Session Session Hibernate Hibernate JDBC JTA JDBC JTA
36 20 5 2 Hibernate Web 3 2 (null) Application Server Java CategoryDAO O/R Mapping O/R Mapping O/R Mapping Hibernate Hibernate SessionFactory JTA JDBC/SQL JDBC Session Category Session Session Session JTA Hibernate Hibernate Hibernate JTA JTA JTA JTA -
Hibernate Apache Commons logging Hibernate org.hibernate.sql org.hibernate.type org.hibernate.tool.hbm2ddl org.hibernate.pretty org.hibernate.cache org.hibernate.transaction org.hibernate.jdbc org.hibernate.hql.ast.ast org.hibernate.secure org.hibernate SQL JDBC DDL session JDBC HQL SQL JAAS 38 20 5 2
Hibernate Hibernate O/R Mapping Tool Hibernate 40 20 5 2
CATEGORY NAME PARENT_ 2 3 (null) 42 20 5 2
43 20 5 2 3 2 (null) Category.hbm.xml hibernate.cfg.xml Session Factory Category Category.java Main.java CategoryDAO.java JDBC Session Session Session Hibernate HibernateUtil.java
JDBC RDB JDBC msql-connector-java-5..5-bi.jar Hibernate3 Hibernate3lib hibernate3.jar antlr-2.6.7.jar asm.jar asm-attrs.jar cglib-2..3.jar commons-collections-2...jar commons-loggin-.0.4.jar dom4j-.6..jar jta.jar log4j-.2..jar 44 20 5 2
Hibernate <hibernate-configuration> <session-factory> <property name="connection.driver_class"> com.mysql.jdbc.driver</property> <property name="connection.url"> jdbc:mysql://localhost:3306/hibernate</property> <property name="connection.username"> hibernate</property> <property name="connection.password"> hibernate</property> JDBC <property name="dialect"> org.hibernate.dialect.mysqlinnodbdialect</property> DataSource RDB SQL 45 20 5 2
Hibernate JDBC <property name="transaction.factory_class"> org.hibernate.transaction.jdbctransactionfactory</property> <property name="show_sql">false</property> SQL <property name="hbm2ddl.auto">create-drop</property> <mapping resource= dao/category.hbm.xml /> </session-factory> </hibernate-configuration> O/R Mapping SessionFactory 46 20 5 2
Category public class Category { private Long id; // private String name; // private Category parent; // private Set<Category> children; // } // setter/getter... 47 20 5 2
Category O/R Mapping public class Category { Long id; String name; Category parent; Set<Category> children; } CATEGORY NAME PARENT_ (null) 2 3 <hibernate-mapping> <class name= Category table= CATEGORY > <id name="id" type="java.lang.long"> <column name="" /> <generator class="native" /> </id> <property name="name" type="string"> <column name="name" /> </property> name Category CATEGORY 48 20 5 2
Category O/R Mapping <many-to-one name="parent" class="category"> <column name="parent_" /> </many-to-one> <set name= children" lazy= true table= CATEGORY > <key column name="parent_"/> <one-to-many class= Category /> </set> </class> </hibernate-mapping> 49 20 5 2 PARENT_ public class Category { Long id; String name; Category parent; Set<Category> children; } CATEGORY NAME PARENT_ 2 3 PARENT_ (null)
HibernateUtil Hiberante public class HibernateUtil { private static final SessionFactory sessionfactory; static { try { sessionfactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable e) { throw new ExceptionInitializerError(e); } Hibernate } } public static Session getsession() { return sessionfactory.opensession(); } Hibernate 50 20 5 2
CategoryDAO public Category changename(long id, String newname) { Session session = null; Transaction trx = null; try { session = HibernateUtil.getSession(); trx = session.begingtransaction(); 2 3 CATEGORY NAME PARENT_ (null) JDBC ResultSetPOJO Category category = (Category)session.get(Category.class, new Long(Id)); category.setname(newname); trx.commit(); } catch (Exception e) { // trx.rollback(); } finally { session.close(); } 5 20 5 2
CategoryDAO Session session = HibernateUtil.getSession(); CATEGORY NAME PARENT_ (null) 2 3 Catgegory parent = (Category)session.get(Category.class, new Long(parent)); System.out.println( Category: + parent.getname()); Set<Category> children = parent.getchildren(); if (children!= null && children.size() > 0) for (Category child : children) System.out.println( - + child.getname()); 52 20 5 2
53 20 5 2