前面我們使用Maven構建了Struts2項目,這里我們來試一下Hibernate項目:
ps: 昨天晚上沒有整明白,例子也一直有問題,就沒有完成博客,早上起來才明白錯在哪
這里的例子,大體框架應該是正確的,但是,對于Maven的很多約定都沒有掌握,估計包的命名都不是非常好,等以后,理解深刻了再改吧
### 1. 構建一個基本的Web項目
這里請參考前面的博客,一樣的
### 2. 添加依賴,修改pom.xml
~~~
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.deppon.demo</groupId>
<artifactId>test03</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>test03 Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- 屬性配置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- 添加Hibernate依賴 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.5.Final</version>
</dependency>
<!-- 添加Log4J依賴 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.6.4</version>
</dependency>
<!-- 添加javassist -->
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.11.0.GA</version>
</dependency>
</dependencies>
<build>
<finalName>test03</finalName>
</build>
</project>
~~~
在保存的時候,Maven會自動從庫中各種包下載到本地,如果有異常的話,可以嘗試手動下載
### 3. 添加hibernate.cfg.xml和log4j.properties資源文件
注意,資源文件的話,根據約定,需要放在src/main/resources文件夾下
hibernate.cfg.xml
~~~
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=Demo</property>
<property name="connection.username">ygy</property>
<property name="connection.password">shishi</property>
<property name="javax.persistence.validation.mode">none</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="com.deppon.test03.entity.PersonEntity"/>
</session-factory>
</hibernate-configuration>
~~~
log4j.properties
~~~
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug, stdout
log4j.logger.org.hibernate.tool.hbm2ddl=debug
~~~
### 4. 新建一個實體類,測試一下
PersonEntity.java
~~~
package com.deppon.test03.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "t_person")
public class PersonEntity implements java.io.Serializable {
private static final long serialVersionUID = -4376187124011546736L;
private Integer id;
private String name;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length = 50 , nullable = false , unique = true)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "PersonEntity [id=" + id + ", name=" + name + "]";
}
}
~~~
HibernateUtil.java
~~~
package com.deppon.test03.util;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
/**ThreadLocal Session Map */
public static final ThreadLocal<Session> SESSIONMAP = new ThreadLocal<Session>();
private static final SessionFactory sessionFactory;
private static final Logger LOGGER = Logger.getLogger(HibernateUtil.class);
static {
try {
LOGGER.debug("HibernateUti.static - loading cofig");
sessionFactory = new Configuration().configure("hibernate.cfg.xml")
.buildSessionFactory();
LOGGER.debug("HibernateUtil.static - end");
} catch (Throwable ex) {
ex.printStackTrace();
LOGGER.error("HibernateUti error : ExceptionInInitializerError");
throw new ExceptionInInitializerError(ex);
}
}
private HibernateUtil() {
}
public static Session getSession() throws HibernateException {
Session session = SESSIONMAP.get();
if(session == null) {
session = sessionFactory.openSession();
SESSIONMAP.set(session);
}
return session;
}
public static void closeSession() throws HibernateException {
Session session = SESSIONMAP.get();
SESSIONMAP.set(null);
if(session != null) {
session.close();
}
}
}
~~~
測試類 ModelTest.java
~~~
package com.deppon.test03.model;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Assert;
import org.junit.Test;
import com.deppon.test03.entity.PersonEntity;
import com.deppon.test03.util.HibernateUtil;
public class ModelTest {
@Test
public void testGetSession() {
Session session = HibernateUtil.getSession();
Assert.assertNotNull(session);
HibernateUtil.closeSession();
}
@Test
public void testExport() {
new SchemaExport(new Configuration().configure()).create(true , true);
}
@Test
public void testSave() {
PersonEntity person = new PersonEntity();
person.setId(100);
person.setName("路飛");
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.save(person);
tx.commit();
HibernateUtil.closeSession();
}
@Test
public void testQuery() {
Session session = HibernateUtil.getSession();
session.beginTransaction();
@SuppressWarnings("unchecked")
List<PersonEntity> personList = session.createQuery("select p from PersonEntity p").list();
for(PersonEntity eachPerson : personList) {
System.out.println(eachPerson);
}
session.getTransaction().commit();
HibernateUtil.closeSession();
}
}
~~~
項目結構如下圖所示:

對了,注意一下,在上面的pom.xml中,沒有看到數據庫驅動包,我用的是SQL Server,直接將jar包放到了項目的lib文件夾下,而從網上查的說,使用scope引入本地的包,試了一下,好像不行,等我再試一試。

### 5. 測試
如果你現在運行JUnit測試的話,是不會成功的,昨天晚上就是這個原因,提示說找不到hibernate.cfg.xml,
后來發現,在target文件夾下,并沒有生成class文件,配置文件也沒有,這樣當然運行不成功
這里需要執行兩個命令
使用CMD窗口,進入當前項目的根目錄:

第一條命令:輸入mvn compile


注意:這里一定要成功啊,即?? BUILD SUCCESS
第二條命令:輸入mvn test-compile

同樣的,這里一定要 BUILD SUCCESS
這樣的話,再一次運行測試程序,就可以成功了!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- [Maven學習(一)- 環境搭建](http://blog.csdn.net/jolingogo/article/details/8775046)
- [Maven學習(二)- 安裝m2eclipse插件?](http://blog.csdn.net/jolingogo/article/details/8796410)
- [Maven學習(三)- 使用Maven構建Web項目](http://blog.csdn.net/jolingogo/article/details/8796726)
- [Maven學習(四)- 使用Maven構建Web項目-測試](http://blog.csdn.net/jolingogo/article/details/8797153)
- [Maven學習(五)- 使用Maven構建Struts2項目](http://blog.csdn.net/jolingogo/article/details/8798052)
- [Maven學習(六)- 構建Hibernate項目](http://blog.csdn.net/jolingogo/article/details/8798684)
- [Maven學習(七)- 構建Spring項目](http://blog.csdn.net/jolingogo/article/details/8799307)
- [Maven學習(八)- 構建MyBatis項目](http://blog.csdn.net/jolingogo/article/details/8801158)
- [Maven學習(九)- 構建SSH項目](http://blog.csdn.net/jolingogo/article/details/8811817)
- [Maven學習(十) - 階段小結
](http://blog.csdn.net/jolingogo/article/details/8821375)
- [專欄:Maven學習之旅](http://blog.csdn.net/column/details/yuguiyang-maven.html)
- 前言
- (一)- 環境搭建
- (二)- 安裝m2eclipse插件
- (三)- 使用Maven構建Web項目
- (四)- 使用Maven構建Web項目-測試
- (五)- 使用Maven構建Struts2項目
- (六)- 構建Hibernate項目
- (七)- 構建Spring項目
- (八)- 構建MyBatis項目
- (九)- 構建SSH項目
- (十) - 階段小結
- Maven深入學習(一)- 坐標
- Maven深入學習(二)- 依賴
- Maven深入學習(三)- 聚合與繼承
- Maven深入學習(四)- 知識總結
- Maven創建的Web項目無法使用EL表達式
- Maven知識點記錄 - profile
- Maven知識點記錄 - repositories
- Maven最佳實踐:版本管理
- Ubuntu上安裝Maven3
- Maven常用命令-創建Java項目
- Maven常用命令-創建Web項目
- Maven中引入本地jar包
- Maven私服(一) - The nexus service was launched, but failed to start.
- Maven私服(二) - Nexus的安裝