zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    选择率,基数计算公式
    10.2.0.1.1 grid control的启动和关闭
    重建控制文件
    批量构建添加数据文件SQL
    Flex内存泄露解决方法和内存释放优化原则
    [INS-32052] Oracle基目录和Oracle主目录位置相同
    [INS-20802] Oracle Database Configuration Assistant 失败
    Caused by:java.sql.SQLException:ORA-01008:并非所有变量都已绑定
    JSP中的include有哪些?有什么区别?
    解析XML的方法
  • 原文地址:https://www.cnblogs.com/gxbk629/p/3891366.html
Copyright © 2011-2022 走看看