(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();