首页 > 代码库 > maven配置hibernate
maven配置hibernate
本文为原创,转载请注明 来至: http://blog.csdn.net/j903829182/article/details/38147659
1.进入cmd创建一个web项目并导入myeclipse中修改好目录结构和配置好项目的属性,详细的我这里就不说了,具体请参照我的博客:http://blog.csdn.net/j903829182/article/details/38128777里面有具体的创建配置的方法和步骤,这这里我主要讲解下怎么使用maven来配置管理hibernate
我这里主要参考的是hibernate3.6.10里面的官方,文档,我也是主要按照官方文档写得这个小例子。看文档可以提高自己的学习能力,和阅读理解能力,可以多看看官方的文档,因为他是最权威的。
2.要使用maven管理hibernate首先就应该导入hibernate的配置依赖包,所以我们先写pom.xml文件。
<span style="font-size:18px;"><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.wj.hibernate</groupId> <artifactId>maven3</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>maven3 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>3.8.1</version> <scope>test</scope> </dependency> <!-- 添加Hibernate依赖 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.10.Final</version> </dependency> <!-- 添加Log4J依赖 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</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.12.0.GA</version> </dependency> <!-- mysql数据库的驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> </dependencies> <build> <finalName>maven3</finalName> </build> </project> </span>
在这里先看hibernate的配置需要的包,数据库的包配置,你先忽略,我接下来会讲解。
3.接下来我们创建一个类,用来代表那些我们希望储存在数据库里的 event,这是一个具有一些属性的简单 JavaBean 类:
<span style="font-size:18px;">package org.hibernate.tutorial.domain; import java.util.Date; public class Event { private Long id;//id private String title;//标题 private Date date;//日期 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } </span>
把这个文件保存到
src/main/java/org/hibernate/tutorial/domain
目录下。4.配置hibernate的映射文件,Hibernate 需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是 Hibernate 映射文件发挥作用的地方。映射文件告诉 Hibernate 它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。
<span style="font-size:18px;"><?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.hibernate.tutorial.domain"> <class name="Event" table="EVENTS"> <id name="id" column="EVENT_ID"> <generator class="native"/> </id> <property name="date" type="timestamp" column="EVENT_DATE"/> <property name="title"/> </class> </hibernate-mapping > </span>把这个映射文件保存为
src/main/resources/org/hibernate/tutorial/domain/Event.hbm.xml
。 5.Hibernate 配置.你应该有了持久化类和它的映射文件。现在是配置 Hibernate 的时候了
创建文件hibernate.cfg.xml并把这个文件保存为
src/main/resources
目录下。注意maven的资源文件根据预定都放在src/main/resources
目录下。
hibernate.cfg.xml里面的代码:
<span style="font-size:18px;"><?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">org.gjt.mm.mysql.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/> </session-factory> </hibernate-configuration> </span>
6.添加mysql数据库的驱动包。由于mysql数据驱动包,不是maven的是我本地的所以我要是引用的话,需要依据的一定的规则,把数据库的驱动包放到指定的目录下面,最后在pom.xml文件里面配置如下
<span style="font-size:18px;"><!-- mysql数据库的驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency></span>
对于maven管理本地的包和maven管理各种数据库,详细的可以参考
http://blog.163.com/luowei505050@126/blog/static/119907206201210223827126/
7.编译测试一下,我们的项目是否有问题
我们将用 Maven 构建这个教程。你将需要安装 Maven;你可以从Maven 下载页面获得 Maven。Maen 将读取我们先前创建的/pom.xml
并知道执行基本的项目任务。首先,让我们运行 compile
目标来确保我们可以编译到目前为止的所有程序:
使用CMD窗口,进入当前项目的根目录:
第一条命令:输入mvn compile
注意:这里一定要成功啊,即 BUILD SUCCESS
第二条命令:输入mvn test-compile
同样的,这里一定要 BUILD SUCCESS
8启动和辅助类
是时候来加载和储存一些Event
对象了,但首先我们得编写一些基础的代码以完成设置。我们必须启动 Hibernate,此过程包括创建一个全局的SessoinFactory
,并把它储存在应用程序代码容易访问的地方。SessionFactory
可以创建并打开新的Session
。一个 Session
代表一个单线程的单元操作,org.hibernate.SessionFactory
则是个线程安全的全局对象,只需要被实例化一次。
我们将创建一个HibernateUtil
辅助类(helper class)来负责启动 Hibernate 和更方便地操作org.hibernate.SessionFactory
。让我们来看一下它的实现:
package org.hibernate.tutorial.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { //定义静态的SessionFactory,产生单例,只生成一个SessionFactory private static final SessionFactory sessionFactory = buildSessionFactory(); //用来初始化SessionFactory private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml return new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } //得到SessionFactory public static SessionFactory getSessionFactory() { return sessionFactory;//返回SessionFactory的对象 } }
把这段代码保存为src/main/java/org/hibernate/tutorial/util/HibernateUtil.java
。
这个类不但在它的静态初始化过程(仅当加载这个类的时候被 JVM 执行一次)中产生全局的org.hibernate.SessionFactory
,而且隐藏了它使用了静态 singleton 的事实。它也可能在应用程序服务器中的 JNDI 查找org.hibernate.SessionFactory
。
再次编译这个应用程序应该不会有问题。最后我们需要配置一个日志(logging)系统 — Hibernate 使用通用日志接口,允许你在 Log4j 和 JDK 1.4 日志之间进行选择。多数开发者更喜欢 Log4j:从 Hibernate 的发布包中(它在etc/
目录下)拷贝log4j.properties
到你的src
目录,与hibernate.cfg.xml
放在一起。看一下配置示例,如果你希望看到更加详细的输出信息,你可以修改配置。默认情况下,只有 Hibernate 的启动信息才会显示在标准输出上。
示例的基本框架完成了 — 现在我们可以用 Hibernate 来做些真正的工作。
9加载并存储对象
package org.hibernate.tutorial; import java.util.Date; import org.hibernate.Session; import org.hibernate.tutorial.domain.Event; import org.hibernate.tutorial.util.HibernateUtil; public class EventManager { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub EventManager mgr = new EventManager(); //if (args[0].equals("store")) { mgr.createAndStoreEvent("My Event4", new Date());//调用函数插入数据 //} HibernateUtil.getSessionFactory().close(); } private void createAndStoreEvent(String title, Date theDate) { //得到目前运行的session Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction();//开始事务 Event theEvent = new Event();//创建bean对象 theEvent.setTitle(title);//设置标题 theEvent.setDate(theDate);//设置日期 session.save(theEvent);//保存对象 session.getTransaction().commit();//提交事务 } }
10.项目结构
11.由于我在hibernate.cfg.xml中
采用了<property name="hbm2ddl.auto">update</property>这句话,所以,可以不用手动创建表,自动会给我创建。
12.直接右击EventManager这个类,选择run as ---〉java Application运行,看console有sql语言打印出来,你在到数据库里面看看表,里面已经插入了数据了。
13.总结,至此maven配置hibernate已经全部,讲解完了,至于日志我导入了,但是没用,把log4j.properties的代码页贴出来:
### direct log messages to stdout ### 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 ### direct messages to file hibernate.log ### #log4j.appender.file=org.apache.log4j.FileAppender #log4j.appender.file.File=hibernate.log #log4j.appender.file.layout=org.apache.log4j.PatternLayout #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=warn, stdout #log4j.logger.org.hibernate=info log4j.logger.org.hibernate=debug ### log HQL query parser activity #log4j.logger.org.hibernate.hql.ast.AST=debug ### log just the SQL #log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters ### log4j.logger.org.hibernate.type=info #log4j.logger.org.hibernate.type=debug ### log schema export/update ### log4j.logger.org.hibernate.tool.hbm2ddl=debug ### log HQL parse trees #log4j.logger.org.hibernate.hql=debug ### log cache activity ### #log4j.logger.org.hibernate.cache=debug ### log transaction activity #log4j.logger.org.hibernate.transaction=debug ### log JDBC resource acquisition #log4j.logger.org.hibernate.jdbc=debug ### enable the following line if you want to track down connection ### ### leakages when using DriverManagerConnectionProvider ### #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
log4j.properties是放在src/main/resources/目录下面的
后台插入数据是打印的数据信息:
Hibernate:
insert
into
EVENTS
(EVENT_DATE, title)
values
(?, ?)
maven配置hibernate