分享

maven配置hibernate

 Penjoyer 2015-09-19

本文为原创,转载请注明 来至: 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文件。

  1. <span style="font-size:18px;"><project xmlns="http://maven./POM/4.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance"  
  2.   xsi:schemaLocation="http://maven./POM/4.0.0 http://maven./maven-v4_0_0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.wj.hibernate</groupId>  
  5.   <artifactId>maven3</artifactId>  
  6.   <packaging>war</packaging>  
  7.   <version>1.0-SNAPSHOT</version>  
  8.   <name>maven3 Maven Webapp</name>  
  9.   <url>http://maven.</url>  
  10.     
  11.     
  12.   <!-- 属性配置 -->    
  13.   <properties>   
  14.   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  15.   </properties>  
  16.   <dependencies>  
  17.     <dependency>  
  18.       <groupId>junit</groupId>  
  19.       <artifactId>junit</artifactId>  
  20.       <version>3.8.1</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.10.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-nop</artifactId>  
  41.        <version>1.6.4</version>  
  42.     </dependency>  
  43.       
  44.     <!-- 添加javassist -->    
  45.     <dependency>  
  46.        <groupId>javassist</groupId>  
  47.        <artifactId>javassist</artifactId>  
  48.         <version>3.12.0.GA</version>   
  49.     </dependency>  
  50.       
  51.     <!-- mysql数据库的驱动包 -->  
  52.     <dependency>  
  53.         <groupId>mysql</groupId>  
  54.         <artifactId>mysql-connector-java</artifactId>  
  55.         <version>5.1.6</version>  
  56.     </dependency>  
  57.   
  58.       
  59.       
  60.       
  61.   </dependencies>  
  62.   <build>  
  63.     <finalName>maven3</finalName>  
  64.   </build>  
  65. </project>  
  66. </span>  



在这里先看hibernate的配置需要的包,数据库的包配置,你先忽略,我接下来会讲解。


3.接下来我们创建一个类,用来代表那些我们希望储存在数据库里的 event,这是一个具有一些属性的简单 JavaBean 类:

  1. <span style="font-size:18px;">package org.hibernate.tutorial.domain;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class Event {  
  6.   
  7.     private Long id;//id  
  8.     private String title;//标题  
  9.     private Date date;//日期  
  10.     public Long getId() {  
  11.         return id;  
  12.     }  
  13.     public void setId(Long id) {  
  14.         this.id = id;  
  15.     }  
  16.     public String getTitle() {  
  17.         return title;  
  18.     }  
  19.     public void setTitle(String title) {  
  20.         this.title = title;  
  21.     }  
  22.     public Date getDate() {  
  23.         return date;  
  24.     }  
  25.     public void setDate(Date date) {  
  26.         this.date = date;  
  27.     }  
  28.       
  29. }  
  30. </span>  

把这个文件保存到 src/main/java/org/hibernate/tutorial/domain 目录下。


4.配置hibernate的映射文件,Hibernate 需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是 Hibernate 映射文件发挥作用的地方。映射文件告诉 Hibernate 它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。 

  1. <span style="font-size:18px;"><?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://www./dtd/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping package="org.hibernate.tutorial.domain">  
  6.   
  7.   
  8.   
  9.     <class name="Event" table="EVENTS">  
  10.   
  11.         <id name="id" column="EVENT_ID">  
  12.   
  13.             <generator class="native"/>  
  14.   
  15.         </id>  
  16.   
  17.         <property name="date" type="timestamp" column="EVENT_DATE"/>  
  18.   
  19.         <property name="title"/>  
  20.   
  21.     </class>  
  22.   
  23.   
  24.   
  25. </hibernate-mapping  
  26.   
  27. >  
  28. </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里面的代码:

  1. <span style="font-size:18px;"><?xml version='1.0' encoding='utf-8'?>  
  2.   
  3. <!DOCTYPE hibernate-configuration PUBLIC  
  4.   
  5.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  6.   
  7.         "http://www./dtd/hibernate-configuration-3.0.dtd">  
  8. <hibernate-configuration>  
  9.     <session-factory>  
  10.         <!-- Database connection settings -->  
  11.         <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>  
  12.         <property name="connection.url">jdbc:mysql://localhost:3306/test</property>  
  13.         <property name="connection.username">root</property>  
  14.         <property name="connection.password">root</property>  
  15.         <!-- JDBC connection pool (use the built-in) -->  
  16.         <property name="connection.pool_size">1</property>  
  17.         <!-- SQL dialect -->  
  18.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  19.         <!-- Enable Hibernate's automatic session context management -->  
  20.         <property name="current_session_context_class">thread</property>  
  21.         <!-- Disable the second-level cache  -->  
  22.         <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>  
  23.   
  24.         <!-- Echo all executed SQL to stdout -->  
  25.         <property name="show_sql">true</property>  
  26.         <property name="format_sql">true</property>  
  27.         <!-- Drop and re-create the database schema on startup -->  
  28.         <property name="hbm2ddl.auto">update</property>  
  29.         <mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>  
  30.     </session-factory>  
  31. </hibernate-configuration>  
  32. </span>  



6.添加mysql数据库的驱动包。由于mysql数据驱动包,不是maven的是我本地的所以我要是引用的话,需要依据的一定的规则,把数据库的驱动包放到指定的目录下面,最后在pom.xml文件里面配置如下

  1. <span style="font-size:18px;"><!-- mysql数据库的驱动包 -->  
  2.     <dependency>  
  3.         <groupId>mysql</groupId>  
  4.         <artifactId>mysql-connector-java</artifactId>  
  5.         <version>5.1.6</version>  
  6.     </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。让我们来看一下它的实现: 

  1. package org.hibernate.tutorial.util;  
  2.   
  3. import org.hibernate.SessionFactory;  
  4. import org.hibernate.cfg.Configuration;  
  5.   
  6. public class HibernateUtil {  
  7.   
  8.     //定义静态的SessionFactory,产生单例,只生成一个SessionFactory  
  9.     private static final SessionFactory sessionFactory = buildSessionFactory();  
  10.   
  11. //用来初始化SessionFactory  
  12.     private static SessionFactory buildSessionFactory() {  
  13.   
  14.         try {  
  15.   
  16.             // Create the SessionFactory from hibernate.cfg.xml  
  17.   
  18.             return new Configuration().configure().buildSessionFactory();  
  19.   
  20.         }  
  21.   
  22.         catch (Throwable ex) {  
  23.   
  24.             // Make sure you log the exception, as it might be swallowed  
  25.   
  26.             System.err.println("Initial SessionFactory creation failed." + ex);  
  27.   
  28.             throw new ExceptionInInitializerError(ex);  
  29.   
  30.         }  
  31.   
  32.     }  
  33.     //得到SessionFactory  
  34.     public static SessionFactory getSessionFactory() {  
  35.   
  36.         return sessionFactory;//返回SessionFactory的对象  
  37.   
  38.     }  
  39.   
  40. }  


把这段代码保存为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加载并存储对象

  1. package org.hibernate.tutorial;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.hibernate.Session;  
  6. import org.hibernate.tutorial.domain.Event;  
  7. import org.hibernate.tutorial.util.HibernateUtil;  
  8.   
  9. public class EventManager {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         // TODO Auto-generated method stub  
  16.         EventManager mgr = new EventManager();  
  17.         //if (args[0].equals("store")) {  
  18.           mgr.createAndStoreEvent("My Event4", new Date());//调用函数插入数据  
  19.         //}  
  20.         HibernateUtil.getSessionFactory().close();  
  21.     }  
  22.     private void createAndStoreEvent(String title, Date theDate) {  
  23.   
  24.         //得到目前运行的session  
  25.         Session session = HibernateUtil.getSessionFactory().getCurrentSession();  
  26.   
  27.         session.beginTransaction();//开始事务  
  28.         Event theEvent = new Event();//创建bean对象  
  29.         theEvent.setTitle(title);//设置标题  
  30.         theEvent.setDate(theDate);//设置日期  
  31.         session.save(theEvent);//保存对象  
  32.         session.getTransaction().commit();//提交事务  
  33.   
  34.     }  
  35.   
  36. }  

10.项目结构








11.由于我在hibernate.cfg.xml中采用了<property name="hbm2ddl.auto">update</property>这句话,所以,可以不用手动创建表,自动会给我创建。

12.直接右击EventManager这个类,选择run as ---〉java Application运行,看console有sql语言打印出来,你在到数据库里面看看表,里面已经插入了数据了。

13.总结,至此maven配置hibernate已经全部,讲解完了,至于日志我导入了,但是没用,把log4j.properties的代码页贴出来:

  1. ### direct log messages to stdout ###  
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  3. log4j.appender.stdout.Target=System.out  
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  5. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  
  6.   
  7. ### direct messages to file hibernate.log ###  
  8. #log4j.appender.file=org.apache.log4j.FileAppender  
  9. #log4j.appender.file.File=hibernate.log  
  10. #log4j.appender.file.layout=org.apache.log4j.PatternLayout  
  11. #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  
  12.   
  13. ### set log levels - for more verbose logging change 'info' to 'debug' ###  
  14.   
  15. log4j.rootLogger=warn, stdout  
  16.   
  17. #log4j.logger.org.hibernate=info  
  18. log4j.logger.org.hibernate=debug  
  19.   
  20. ### log HQL query parser activity  
  21. #log4j.logger.org.hibernate.hql.ast.AST=debug  
  22.   
  23. ### log just the SQL  
  24. #log4j.logger.org.hibernate.SQL=debug  
  25.   
  26. ### log JDBC bind parameters ###  
  27. log4j.logger.org.hibernate.type=info  
  28. #log4j.logger.org.hibernate.type=debug  
  29.   
  30. ### log schema export/update ###  
  31. log4j.logger.org.hibernate.tool.hbm2ddl=debug  
  32.   
  33. ### log HQL parse trees  
  34. #log4j.logger.org.hibernate.hql=debug  
  35.   
  36. ### log cache activity ###  
  37. #log4j.logger.org.hibernate.cache=debug  
  38.   
  39. ### log transaction activity  
  40. #log4j.logger.org.hibernate.transaction=debug  
  41.   
  42. ### log JDBC resource acquisition  
  43. #log4j.logger.org.hibernate.jdbc=debug  
  44.   
  45. ### enable the following line if you want to track down connection ###  
  46. ### leakages when using DriverManagerConnectionProvider ###  
  47. #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace  

log4j.properties是放在src/main/resources/目录下面的


后台插入数据是打印的数据信息:

Hibernate: 
    insert 
    into
        EVENTS
        (EVENT_DATE, title) 
    values
        (?, ?)













































    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约