Hibernate API和.hbm.xml映射教程

来源:互联网 发布:淘宝敲诈 编辑:程序博客网 时间:2024/05/02 14:19

hibernate官网入门指南

1.hibernate配置文件

配置文件示例

<hibernate-configuration><session-factory><!-- Database connection settings --><property name="connection.driver_class">org.h2.Driver</property><property name="connection.url">jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE</property><property name="connection.username">sa</property><property name="connection.password"/><!-- JDBC connection pool (use the built-in) --><property name="connection.pool_size">1</property><!-- SQL dialect --><property name="dialect">org.hibernate.dialect.H2Dialect</property><!-- Disable the second-level cache  --><property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property><!-- Echo all executed SQL to stdout --><property name="show_sql">true</property><!-- Drop and re-create the database schema on startup --><property name="hbm2ddl.auto">create</property><!-- Names the annotated entity class --><mapping class="org.hibernate.tutorial.annotations.Event"/></session-factory></hibernate-configuration>

映射文件示例

<hibernate-mapping package="org.hibernate.tutorial.hbm">    <class name="Event" table="EVENTS">    <id name="id" column="EVENT_ID"><generator class="increment"/></id>    <property name="date" type="timestamp" column="EVENT_DATE"/>    <property name="title"/></hibernate-mapping>

1.1 类映射

<class name="Event" table="EVENTS">    ...</class>

1.2 id映射

<id name="id" column="EVENT_ID">    ...</id>

1.3 属性映射

<property name="date" type="timestamp" column="EVENT_DATE"/><property name="title"/>

2. SessionFactory工作原理

org.hibernate.SessionFactory源码

package org.hibernate.tutorial.annotations;import java.util.Date;import java.util.List;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import junit.framework.TestCase;/** * Illustrates the use of Hibernate native APIs.  The code here is unchanged from the {@code basic} example, the * only difference being the use of annotations to supply the metadata instead of Hibernate mapping files. * * @author Steve Ebersole */public class AnnotationsIllustrationTest extends TestCase {    private SessionFactory sessionFactory;    @Override    protected void setUp() throws Exception {        // A SessionFactory is set up once for an application!        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()                .configure() // configures settings from hibernate.cfg.xml                .build();        try {            sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();        }        catch (Exception e) {            // The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory            // so destroy it manually.            StandardServiceRegistryBuilder.destroy( registry );        }    }    @Override    protected void tearDown() throws Exception {        if ( sessionFactory != null ) {            sessionFactory.close();        }    }    @SuppressWarnings({ "unchecked" })    public void testBasicUsage() {        // create a couple of events...        Session session = sessionFactory.openSession();        session.beginTransaction();        session.save( new Event( "Our very first event!", new Date() ) );        session.save( new Event( "A follow up event", new Date() ) );        session.getTransaction().commit();        session.close();        // now lets pull events from the database and list them        session = sessionFactory.openSession();        session.beginTransaction();        List result = session.createQuery( "from Event" ).list();        for ( Event event : (List<Event>) result ) {            System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() );        }        session.getTransaction().commit();        session.close();    }}

3. session获取实体对象

Session session = sessionFactory.openSession();session.beginTransaction();session.save( new Event( "Our very first event!", new Date() ) );session.save( new Event( "A follow up event", new Date() ) );session.getTransaction().commit();session.close();

4.session获取实体对象列表

session = sessionFactory.openSession();session.beginTransaction();List result = session.createQuery( "from Event" ).list();for ( Event event : (List<Event>) result ) {    System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() );}session.getTransaction().commit();session.close();

5. hibernate APIs和注解映射

5.1 Java类实体注解

实体类示例

package org.hibernate.tutorial.annotations;import java.util.Date;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;import org.hibernate.annotations.GenericGenerator;@Entity@Table( name = "EVENTS" )public class Event {    private Long id;    private String title;    private Date date;    public Event() {        // this form used by Hibernate    }    public Event(String title, Date date) {        // for application use, to create new events        this.title = title;        this.date = date;    }    @Id    @GeneratedValue(generator="increment")    @GenericGenerator(name="increment", strategy = "increment")    public Long getId() {        return id;    }    private void setId(Long id) {        this.id = id;    }    @Temporal(TemporalType.TIMESTAMP)    @Column(name = "EVENT_DATE")    public Date getDate() {        return date;    }    public void setDate(Date date) {        this.date = date;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }}

识别类作为一个实体

@Entity@Table( name = "EVENTS" )public class Event {    ...}

识别标识符的属性

@Id@GeneratedValue(generator="increment")@GenericGenerator(name="increment", strategy = "increment") //一种主键生成策略public Long getId() {    return id;}

识别基本属性

public String getTitle() {    return title;}@Temporal(TemporalType.TIMESTAMP)@Column(name = "EVENT_DATE")public Date getDate() {    return date;}

6. JPA

暂时用不到,此处先略过

教程源码下载

阅读全文
0 0
原创粉丝点击