首页 > 代码库 > Maven的学习资料收集--(六) 构建Hibernate项目

Maven的学习资料收集--(六) 构建Hibernate项目

前面我们使用Maven构建了Struts2项目,这里我们来试一下Hibernate项目:

这里的例子,大体框架应该是正确的,但是,对于Maven的很多约定都没有掌握,估计包的命名都不是非常好,等以后,理解深刻了再改吧微笑

1. 构建一个基本的Web项目

这里请参考前面的博客,一样的

 

2. 添加依赖,修改pom.xml

 

[html] view plaincopy
 
 
  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/maven-v4_0_0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.deppon.demo</groupId>  
  5.   <artifactId>test03</artifactId>  
  6.   <packaging>war</packaging>  
  7.   <version>0.0.1-SNAPSHOT</version>  
  8.   <name>test03 Maven Webapp</name>  
  9.   <url>http://maven.apache.org</url>  
  10.     
  11.    <!-- 属性配置 -->  
  12.   <properties>  
  13.       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  14.   </properties>  
  15.     
  16.   <dependencies>  
  17.     <dependency>  
  18.       <groupId>junit</groupId>  
  19.       <artifactId>junit</artifactId>  
  20.       <version>4.10</version>  
  21.       <scope>test</scope>  
  22.     </dependency>  
  23.       
  24.     <!-- 添加Hibernate依赖 -->  
  25.     <dependency>  
  26.         <groupId>org.hibernate</groupId>  
  27.         <artifactId>hibernate-core</artifactId>  
  28.         <version>3.6.5.Final</version>  
  29.     </dependency>  
  30.       
  31.     <!-- 添加Log4J依赖 -->  
  32.     <dependency>  
  33.         <groupId>log4j</groupId>  
  34.         <artifactId>log4j</artifactId>  
  35.         <version>1.2.16</version>  
  36.     </dependency>  
  37.       
  38.     <dependency>  
  39.       <groupId>org.slf4j</groupId>  
  40.       <artifactId>slf4j-api</artifactId>  
  41.       <version>1.6.1</version>  
  42.     </dependency>  
  43.       
  44.     <dependency>  
  45.         <groupId>org.slf4j</groupId>  
  46.         <artifactId>slf4j-nop</artifactId>  
  47.         <version>1.6.4</version>  
  48.     </dependency>  
  49.       
  50.     <!-- 添加javassist -->  
  51.     <dependency>  
  52.         <groupId>javassist</groupId>  
  53.         <artifactId>javassist</artifactId>  
  54.         <version>3.11.0.GA</version>  
  55.     </dependency>  
  56.       
  57.   </dependencies>  
  58.     
  59.   <build>  
  60.     <finalName>test03</finalName>  
  61.   </build>  
  62.     
  63. </project>  


在保存的时候,Maven会自动从库中各种包下载到本地,如果有异常的话,可以尝试手动下载

 

3. 添加hibernate.cfg.xml和log4j.properties资源文件

注意,资源文件的话,根据约定,需要放在src/main/resources文件夹下

hibernate.cfg.xml

 

[html] view plaincopy
 
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  5.   
  6. <hibernate-configuration>  
  7.     <session-factory>  
  8.   
  9.         <!-- Database connection settings -->  
  10.         <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>  
  11.         <property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=Demo</property>  
  12.         <property name="connection.username">ygy</property>  
  13.         <property name="connection.password">shishi</property>  
  14.         <property name="javax.persistence.validation.mode">none</property>   
  15.   
  16.         <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>  
  17.           
  18.         <property name="current_session_context_class">thread</property>  
  19.   
  20.         <property name="show_sql">true</property>  
  21.         <property name="format_sql">true</property>  
  22.   
  23.         <property name="hbm2ddl.auto">update</property>  
  24.   
  25.         <mapping class="com.deppon.test03.entity.PersonEntity"/>  
  26.     </session-factory>  
  27. </hibernate-configuration>  


log4j.properties

 

 

[java] view plaincopy
 
 
  1. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  2. log4j.appender.stdout.Target=System.out  
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  4. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  
  5.   
  6. log4j.rootLogger=debug, stdout  
  7.   
  8. log4j.logger.org.hibernate.tool.hbm2ddl=debug  

 

4. 新建一个实体类,测试一下

PersonEntity.java

 

[java] view plaincopy
 
 
  1. package com.deppon.test03.entity;  
  2.   
  3. import javax.persistence.Column;  
  4. import javax.persistence.Entity;  
  5. import javax.persistence.Id;  
  6. import javax.persistence.Table;  
  7.   
  8. @Entity  
  9. @Table(name = "t_person")  
  10. public class PersonEntity implements java.io.Serializable {  
  11.     private static final long serialVersionUID = -4376187124011546736L;  
  12.   
  13.     private Integer id;  
  14.     private String name;  
  15.   
  16.     @Id  
  17.     public Integer getId() {  
  18.         return id;  
  19.     }  
  20.   
  21.     public void setId(Integer id) {  
  22.         this.id = id;  
  23.     }  
  24.   
  25.     @Column(length = 50 , nullable = false , unique = true)  
  26.     public String getName() {  
  27.         return name;  
  28.     }  
  29.   
  30.     public void setName(String name) {  
  31.         this.name = name;  
  32.     }  
  33.   
  34.     @Override  
  35.     public String toString() {  
  36.         return "PersonEntity [id=" + id + ", name=" + name + "]";  
  37.     }  
  38.       
  39. }  


HibernateUtil.java

 

 

[java] view plaincopy
 
 
  1. package com.deppon.test03.util;  
  2.   
  3. import org.apache.log4j.Logger;  
  4. import org.hibernate.HibernateException;  
  5. import org.hibernate.Session;  
  6. import org.hibernate.SessionFactory;  
  7. import org.hibernate.cfg.Configuration;  
  8.   
  9. public class HibernateUtil {  
  10.     /** ThreadLocal Session Map */  
  11.     public static final ThreadLocal<Session> SESSIONMAP = new ThreadLocal<Session>();  
  12.     private static final SessionFactory sessionFactory;  
  13.     private static final Logger LOGGER = Logger.getLogger(HibernateUtil.class);  
  14.   
  15.     static {  
  16.         try {  
  17.             LOGGER.debug("HibernateUti.static - loading cofig");  
  18.             sessionFactory = new Configuration().configure("hibernate.cfg.xml")  
  19.                     .buildSessionFactory();  
  20.             LOGGER.debug("HibernateUtil.static - end");  
  21.         } catch (Throwable ex) {  
  22.             ex.printStackTrace();  
  23.             LOGGER.error("HibernateUti error : ExceptionInInitializerError");  
  24.             throw new ExceptionInInitializerError(ex);  
  25.         }  
  26.     }  
  27.       
  28.     private HibernateUtil() {  
  29.           
  30.     }  
  31.   
  32.     public static Session getSession() throws HibernateException {  
  33.         Session session = SESSIONMAP.get();  
  34.           
  35.         if(session == null) {  
  36.             session = sessionFactory.openSession();  
  37.             SESSIONMAP.set(session);  
  38.         }  
  39.           
  40.         return session;  
  41.     }  
  42.       
  43.     public static void closeSession() throws HibernateException {  
  44.         Session session = SESSIONMAP.get();  
  45.         SESSIONMAP.set(null);  
  46.           
  47.         if(session != null) {  
  48.             session.close();  
  49.         }  
  50.     }  
  51.   
  52. }  

测试类 ModelTest.java

 

 

[java] view plaincopy
 
 
  1. package com.deppon.test03.model;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.hibernate.Session;  
  6. import org.hibernate.Transaction;  
  7. import org.hibernate.cfg.Configuration;  
  8. import org.hibernate.tool.hbm2ddl.SchemaExport;  
  9. import org.junit.Assert;  
  10. import org.junit.Test;  
  11.   
  12. import com.deppon.test03.entity.PersonEntity;  
  13. import com.deppon.test03.util.HibernateUtil;  
  14.   
  15. public class ModelTest {  
  16.       
  17.     @Test  
  18.     public void testGetSession() {  
  19.         Session session = HibernateUtil.getSession();  
  20.           
  21.         Assert.assertNotNull(session);  
  22.           
  23.         HibernateUtil.closeSession();  
  24.     }  
  25.       
  26.     @Test  
  27.     public void testExport() {  
  28.         new SchemaExport(new Configuration().configure()).create(true , true);  
  29.     }  
  30.       
  31.     @Test  
  32.     public void testSave() {  
  33.         PersonEntity person = new PersonEntity();  
  34.         person.setId(100);  
  35.         person.setName("路飞");  
  36.           
  37.         Session session = HibernateUtil.getSession();  
  38.         Transaction tx = session.beginTransaction();  
  39.           
  40.         session.save(person);  
  41.           
  42.         tx.commit();  
  43.         HibernateUtil.closeSession();  
  44.     }  
  45.       
  46.     @Test  
  47.     public void testQuery() {  
  48.         Session session = HibernateUtil.getSession();  
  49.         session.beginTransaction();  
  50.           
  51.         @SuppressWarnings("unchecked")  
  52.         List<PersonEntity> personList = session.createQuery("select p from PersonEntity p").list();  
  53.           
  54.         for(PersonEntity eachPerson : personList) {  
  55.             System.out.println(eachPerson);  
  56.         }  
  57.           
  58.         session.getTransaction().commit();  
  59.         HibernateUtil.closeSession();  
  60.     }  
  61.       
  62. }  

 

 

项目结构如下图所示:

 

对了,注意一下,在上面的pom.xml中,没有看到数据库驱动包,我用的是SQL Server,直接将jar包放到了项目的lib文件夹下,而从网上查的说,使用scope引入本地的包,试了一下,好像不行,等我再试一试。

 

5. 测试

如果你现在运行JUnit测试的话,是不会成功的,昨天晚上就是这个原因,提示说找不到hibernate.cfg.xml,

后来发现,在target文件夹下,并没有生成class文件,配置文件也没有,这样当然运行不成功

这里需要执行两个命令

使用CMD窗口,进入当前项目的根目录:

 

第一条命令:输入mvn compile

注意:这里一定要成功啊,即   BUILD SUCCESS

 

第二条命令:输入mvn test-compile

同样的,这里一定要 BUILD SUCCESS

这样的话,再一次运行测试程序,就可以成功了!