`
schy_hqh
  • 浏览: 556005 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Maven&Hibernate

 
阅读更多

有一段时间没用Hibernate了,今天练习Maven的时候用到Hibernate操作数据库,结果很无语。

好多东西都忘了。。。

 

首先,编写POM.xml,引入Hibernate所需的jar包

只需要制定hibernate-core,Maven就会自动下载hibernate-core.jar,以及hibernate需要的其它jar包

如果没有自动下载其它依赖包,在进行对象保存时,会报错,根据提示再引入对应的jar包即可!

POM.xml

此处引入了junit, hibernate-core, mysql-connector, log4j

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.gc.user</groupId>
  <artifactId>user-core</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>user-core</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>
    
    <dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>4.2.6.Final</version>
	</dependency>
	
   <dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.26</version>
	</dependency>
    
    <dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.16</version>
	</dependency>
                           
  </dependencies>
</project>

 

 

 

使用注解配置了一个实体类User

package com.gc.user.core;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name="t_user")
public class User {
	@Id
	@GeneratedValue
	private int id;
	private String name;
	private int age;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {

		this.age = age;
	}
	
	
}

 

Hibernate的配置文件时直接从以前的项目中拷贝过来的,由于以前是通过写hbm.xml来配置的

现在是通过注解来配置的,结果就犯迷糊了

出现的问题是:

org.hibernate.MappingException: Unknown entity: com.gc.user.core.User

找不到实体类!

由于SSH项目中,都通过Spring自动对Annotation进行扫描,现在离开了Spring,就犯傻了。

忘了没有Spring时,使用Hibernate需要手动指定实体类的位置!哎。。。

 

在配置文件中加入User的类路径就OK了

【注意:还有一种可能也会找出Unknown entity,那就是引入Entity包的时候弄错了】

【如果没有使用Spring的包自动扫描,记得要在hibernate的配置文件加入映射<mapping>!】

 

 

以下是Hibernate的配置文件,hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/maven</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<property name="show_sql">true</property>
		
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!--如果使用的是本地事务(jdbc事务)  ,此配置将不需要再close session了;
			getCurrentSession创建的session会和绑定到当前线程,而openSession不会;
			getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭;
		-->
		<property name="current_session_context_class">thread</property>  
		
		<!-- 如果使用的是全局事务(jta事务) -->
		<!-- 
		<property name="hibernate.current_session_context_class">jta</property>  
		 -->
	        <!-- 指定实体的具体路径,否则hibernate找不到 -->	 
      		<mapping class="com.gc.user.core.User"/>
	</session-factory>
</hibernate-configuration>

 

Log4j配置文件

日志信息将保存在项目根目录下的logs目录下,一个记录所有的控制台输出,一个只记录error级别的错误信息

log4j.rootLogger = debug ,  stdout ,  A ,  B

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 :%L - %m%n

log4j.appender.A = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File = logs/log.log
log4j.appender.A.Append = true
log4j.appender.A.Threshold = DEBUG
log4j.appender.A.layout = org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

log4j.appender.B = org.apache.log4j.DailyRollingFileAppender
log4j.appender.B.File = logs/error.log
log4j.appender.B.Append = true
log4j.appender.B.Threshold = ERROR
log4j.appender.B.layout = org.apache.log4j.PatternLayout
log4j.appender.B.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n 

 

 

 

以下是测试类

package com.gc.user.core;


import junit.framework.TestCase;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.junit.Test;

import com.gc.util.HibernateUtil;

/**
 * Unit test for simple App.
 */
public class AppTest extends TestCase {
	
	@Test
	public void testHibernate() {
		System.out.println("begin...");
		User user = new User();
		user.setName("lisi");
		user.setAge(10);
		Session session = HibernateUtil.getSession();
		try {
			session.beginTransaction();
			
			session.save(user);
			
			assertNotNull(user.getId());
			
			System.out.println("userId="+user.getId());
			
			session.getTransaction().commit();
		} catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		//这里不需要手动关闭session了!
		//因为hibernate配置文件中有这样一个配置:<property name="current_session_context_class">thread</property>  
	}
	
	@Test
	public void testLog4j() {
		try {
			System.out.println(1/0);
		}catch(Exception e) {
			Logger logger = Logger.getLogger(this.getClass());
			logger.error("testLog4j error", e);
		}
	}
}

 

 

 

 

 简单的Hibernate工具类,没有怎么封装,就返回一个与当前线程绑定的Session

package com.gc.util;

import java.util.Map;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
	
	private static SessionFactory factory;
	
	private static ServiceRegistry serviceRegistry;
	
	static{

		Configuration cfg = new Configuration().configure();
		Map map = cfg.getProperties();
		for(Object key : map.keySet()) {
			//可以打印出很多系统属性!
			//System.out.println(key);
			//System.out.println(map.get(key));
		}
		serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
		factory = cfg.buildSessionFactory(serviceRegistry);
	}
	
	public static Session getSession() {
		return factory.getCurrentSession();
	}
}

 

 

 

分享到:
评论

相关推荐

    使用Maven配置Hibernate5

    在现代Java开发中,Maven和Hibernate5是两个不可或缺的工具。Maven是一个项目管理和集成工具,它简化了构建、依赖管理和项目的标准化过程。而Hibernate5则是一个强大的对象关系映射(ORM)框架,它允许开发者用Java...

    maven项目hibernate demo

    在本项目"maven项目hibernate demo"中,我们将探讨如何使用Maven构建Java应用程序,结合Hibernate ORM框架实现数据库操作。开发环境基于Java 1.7、Eclipse 4.5集成开发环境(IDE)以及Tomcat 6作为应用服务器,而...

    maven+hibernate项目简单示例

    在IT行业中,构建Java应用程序时,常常会使用Maven作为项目管理和构建工具,而Hibernate则是一种流行的ORM(对象关系映射)框架,用于简化数据库操作。这个“maven+hibernate项目简单示例”旨在展示如何在Eclipse...

    Ziroom - Strut 2+Maven+Hibernate 项目源码

    Strut 2、Maven 和 Hibernate 是 Java Web 开发中的三个关键框架,它们共同构建了一个高效、可维护的Web应用程序。下面将详细解释这三个技术及其在项目中的应用。 **Strut 2** 是一个用于构建Java Web应用程序的...

    springMVC+maven+hibernate框架

    springMVC+maven+hibernate框架,搭建的过程 可以参考 java进阶(五)------springMVC---springMVC+Hibernate+maven完整搭建运行步骤 http://blog.csdn.net/zzq900503/article/details/49892783

    maven-hibernate3-jdk14-2.0.jar

    maven-hibernate3-jdk14-2.0.jar

    【基于Maven的Hibernate整合Mycat示例】

    【基于Maven的Hibernate整合Mycat示例】是一个典型的Java Web开发中关于数据库分库分表的实践案例。在大型互联网应用中,随着数据量的急剧增长,单表存储可能会遇到性能瓶颈,这时就需要引入分布式数据库解决方案,...

    Maven+Hibernate+mysql增删改查

    本示例项目“Maven+Hibernate+mysql增删改查”旨在帮助初学者掌握这三者相结合的基础应用。下面将详细介绍这三个核心组件以及它们如何协同工作。 **Maven** 是一个项目管理和综合工具,主要负责构建、依赖管理和...

    maven+hibernate

    标题 "maven+hibernate" 暗示我们讨论的是使用 Maven 作为构建工具,与 Hibernate 这一流行的对象关系映射(ORM)框架整合的项目。在Java开发中,Maven 和 Hibernate 是两个非常重要的组件。Maven 用于自动化项目的...

    使用Mysql+Maven+Hibernate的一对一,一对多的CURD小案例

    在这个“使用Mysql+Maven+Hibernate的一对一,一对多的CURD小案例”中,我们将探讨如何在Java Web开发中结合这三个关键技术实现数据的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作。...

    Spring+SpringMvc+Maven+Hibernate整合

    Spring、SpringMVC、Maven和Hibernate是Java开发中非常重要的四大框架,它们共同构建了一个高效、可维护的Web应用程序。下面将详细讲解这四个框架的整合及其在实际项目中的应用。 Spring框架是核心,它提供了依赖...

    Maven hibernate project

    ** Maven Hibernate 项目详解 ** 在Java开发领域,Maven和Hibernate是两个不可或缺的工具。Maven是一款项目管理和综合工具,它帮助开发者管理构建过程、依赖关系和项目信息,而Hibernate则是一个流行的对象关系映射...

    使用springmvc、hibernate、maven开发的web实例项目。

    Spring MVC、Hibernate 和 Maven 是Java Web开发中的三个关键框架,它们各自在应用程序的不同层面发挥着重要作用。本项目是一个综合性的实例,将这三个框架整合在一起,为开发者提供了一个完整的Web应用程序开发环境...

    hibernate+maven demo项目工程

    【hibernate+maven demo项目工程】是一个基于Hibernate ORM框架和Maven构建工具的示例项目,旨在帮助开发者理解和实践如何在实际开发中整合这两项技术。该项目的主要目的是展示如何利用Maven管理依赖,以及如何配置...

    Maven+springMVC+Hibernate简单注册和登陆

    这个示例项目可能演示了如何使用Maven、SpringMVC和Hibernate来创建一个基础的用户注册和登录功能。首先,开发者会定义User实体类,该类包含用户名、密码等属性,并使用Hibernate注解进行ORM配置。接着,创建一个...

    maven搭建的springmvc+hibernate框架

    ** Maven 搭建 SpringMVC + Hibernate 框架详解 ** 在现代软件开发中,Maven 是一个强大的项目管理工具,它帮助开发者管理构建过程、依赖关系和项目信息。SpringMVC 和 Hibernate 则是两个流行的技术,分别用于构建...

    Maven+Spring MVC +Hibernate Validate

    本项目" Maven+Spring MVC +Hibernate Validate" 提供了一种强大的技术栈,用于实现这一目标。它将Maven作为项目构建工具,Spring MVC作为后端控制器框架,而Hibernate Validate则负责服务端的数据验证。下面我们将...

    springmvc+maven+hibernate+sqlsever

    【标题】"springmvc+maven+hibernate+sqlsever" 涵盖的是一个基于Java的后台管理系统,该系统利用了四个关键的技术栈:Spring MVC、Maven、Hibernate和SQL Server。这些技术组合在一起,可以构建出高效、稳定且易于...

    使用Maven Hibernate5 之反向工程

    在Java Web开发中,Maven、Hibernate5以及反向工程是三个重要的概念,它们共同协助开发者高效地构建和管理项目。下面将详细解释这些知识点。 **Maven** 是一个项目管理和综合工具,它帮助Java开发者管理项目的构建...

    基于Bootstrap的Java企业通用开发平台框架_maven_hibernate

    基于Bootstrap的Java企业通用开发平台框架_maven_hibernate,基于Bootstrap的Java企业通用开发平台框架_maven_hibernate,基于Bootstrap的Java企业通用开发平台框架_maven_hibernate

Global site tag (gtag.js) - Google Analytics