您的位置:首页 > 其它

Maven学习(六)- 构建Hibernate项目

2017-09-01 17:28 302 查看
原地址:http://blog.csdn.net/yuguiyang1990/article/details/8798684

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

ps: 昨天晚上没有整明白,例子也一直有问题,就没有完成博客,早上起来才明白错在哪


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



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

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


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

[html] view
plain copy

<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

[html] view
plain copy

<?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

[java] view
plain copy

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

[java] view
plain copy

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

[java] view
plain copy

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

[java] view
plain copy

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