首页 > 技术文章 > Hibernate5 Guide

storml 2017-11-16 11:41 原文

(1) 创建Maven工程

可以使用Eclipse或IDEA创建

(2) 修改pom文件

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>com.hibernate5guide</groupId>
 5     <artifactId>hibernate5guide</artifactId>
 6     <version>0.0.1-SNAPSHOT</version>
 7     <dependencies>
 8         <dependency>
 9             <groupId>org.hibernate</groupId>
10             <artifactId>hibernate-core</artifactId>
11             <version>5.2.12.Final</version>
12         </dependency>
13         <dependency>
14             <groupId>mysql</groupId>
15             <artifactId>mysql-connector-java</artifactId>
16             <version>5.1.44</version>
17         </dependency>
18     </dependencies>
19     <build>
20         <pluginManagement>
21             <plugins>
22                 <plugin>
23                     <groupId>org.apache.maven.plugins</groupId>
24                     <artifactId>maven-compiler-plugin</artifactId>
25                     <configuration>
26                         <source>${java-version}</source>
27                         <target>${java-version}</target>
28                     </configuration>
29                 </plugin>
30             </plugins>
31         </pluginManagement>
32     </build>
33     <properties>
34         <java-version>1.8</java-version>
35     </properties>
36 </project>

(3) 添加hibernate.cfg.xml文件

 1 <?xml version='1.0' encoding='UTF-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
 8         <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
 9         <property name="connection.username">xxx</property>
10         <property name="connection.password">xxx</property>
11         <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
12         <property name="show_sql">true</property>
13         <property name="hbm2ddl.auto">update</property>
14         <mapping class="hibernate5guide.entity.TestEvent" />
15     </session-factory>
16 </hibernate-configuration>

(4) 创建SessionFactoryBuilder拿到单例的SessionFactory

 1 package hibernate5guide.util;
 2 
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.boot.MetadataSources;
 5 import org.hibernate.boot.registry.StandardServiceRegistry;
 6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 7 
 8 /**
 9  * An example to obtain the org.hibernate.SessionFactory.<br>
10  * One benefit of this approach is JUnit test.<br>
11  */
12 public class SessionFactoryBuilder {
13 
14     private static SessionFactory instance;
15 
16     private SessionFactoryBuilder() {
17     }
18 
19     public static synchronized SessionFactory getInstance() {
20         return instance == null ? setUpSessionFactory() : instance;
21     }
22 
23     private static SessionFactory setUpSessionFactory() {
24         // A SessionFactory is set up once for an application!
25         // configures settings from hibernate.cfg.xml
26         final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
27         try {
28             instance = new MetadataSources(registry).buildMetadata().buildSessionFactory();
29         } catch (Exception e) {
30             // The registry would be destroyed by the SessionFactory, but we had
31             // trouble building the SessionFactory, so destroy it manually.
32             StandardServiceRegistryBuilder.destroy(registry);
33         }
34 
35         return instance;
36     }
37 }

(5) 创建实体类

 1 package hibernate5guide.entity;
 2 
 3 import java.io.Serializable;
 4 import java.util.Date;
 5 
 6 import javax.persistence.Column;
 7 import javax.persistence.Entity;
 8 import javax.persistence.GeneratedValue;
 9 import javax.persistence.Id;
10 import javax.persistence.Table;
11 import javax.persistence.Temporal;
12 import javax.persistence.TemporalType;
13 
14 import org.hibernate.annotations.GenericGenerator;
15 
16 @Entity
17 @Table(name = "test_event")
18 public class TestEvent implements Serializable {
19 
20     private static final long serialVersionUID = 1L;
21 
22     @Id
23     @Column(name = "event_id")
24     @GeneratedValue(generator = "increment")
25     @GenericGenerator(name = "increment", strategy = "increment")
26     private Long eventId;
27 
28     @Column(name = "event_title")
29     private String eventTitle;
30 
31     @Column(name = "event_date")
32     @Temporal(TemporalType.TIMESTAMP)
33     private Date eventDate;
34 
35     // a default constructor for entity must exist
36     public TestEvent() {
37     }
38 
39     public TestEvent(String eventTitle, Date eventDate) {
40         this.eventTitle = eventTitle;
41         this.eventDate = eventDate;
42     }
43 
44     public TestEvent(Long eventId, String eventTitle, Date eventDate) {
45         this.eventId = eventId;
46         this.eventTitle = eventTitle;
47         this.eventDate = eventDate;
48     }
49 
50     public Long getEventId() {
51         return eventId;
52     }
53 
54     public void setEventId(Long eventId) {
55         this.eventId = eventId;
56     }
57 
58     public String getEventTitle() {
59         return eventTitle;
60     }
61 
62     public void setEventTitle(String eventTitle) {
63         this.eventTitle = eventTitle;
64     }
65 
66     public Date getEventDate() {
67         return eventDate;
68     }
69 
70     public void setEventDate(Date eventDate) {
71         this.eventDate = eventDate;
72     }
73 
74     @Override
75     public String toString() {
76         return "TestEvent [eventId=" + eventId + ", eventTitle=" + eventTitle + ", eventDate=" + eventDate + "]";
77     }
78 }

(6) 添加和查询测试

INSERT

1 Session session = getSessionFactory().openSession();
2 session.beginTransaction();
3 session.save(new TestEvent("first event!", new Date()));
4 session.save(new TestEvent("Second event!", new Date()));
5 session.getTransaction().commit();
6 session.close();

SELECT

1 Session session = getSessionFactory().openSession();
2 session.beginTransaction();
3 List<TestEvent> result = session.createQuery("from TestEvent").list();
4 session.getTransaction().commit();
5 session.close();

 

推荐阅读