4 配置Hibernate

Hibernate MySql连接配置

在Hibernate中,可以配置很多种数据库,例如MySql、Sql Server和Oracle,Hibernate MySql连接配置举例如下

出错“The processing instruction must begin with the name of the target”,看了几遍xml文件的内容也没发现什么特别,在网上搜了搜发现还是个通病,很多人都遇到过这种问题。其原因是

<? xml version = "1.0" encoding = "UTF-8" ?> 的问号和"xml"之间多了个空格,去掉空格后<?xml version = "1.0" encoding = "UTF-8" ?>就ok了。

hibernate.cfg.xml出错:The content of element type "property" must match "(meta*,(column|formula)*   恩,根据我的经验,可能是你的映射文件没有写好的原因,还有就是property标签的相对应属性值的value写的不对!!!!!

这样说吧,假如你在建立一个类,叫Student,包名字叫做com.bjsxt.hibernate.model

你就得建立一个映射文件,名字叫做Student.hbm.xml里面的内容的package属性就是com.bjsxt.hibernate.model



解决;

项目名上右键--〉myeclipse-->add hibernate capabilites -->next-->hibernate config file --> existing -->选择现有工程存在的hibernate配置文件--> next --> 不生成factory class --> end



  • 添加库文件
    • 从www.hibernate.org网站下载Hibernate发布包(如hibernate.jar),从www.mysql.com下载MySQL的JDBC驱动程序jar包,将这两个jar包放在lib目录
    • 将以下jar包拷到lib目录中:asm.jar、cglib-2.1.3.jar、commons-collections-2.1.1.jar、commons-logging-1.0.4.jar、dom4j-1.6.1.jar、ehcache-1.1.jar、jta.jar
    • 在工程的classpath中包含上述库文件

建立持久化类

例如Product.java:

package test;

//持久化类

public class Product 

{





    private int id ;

    private String name ;

    public Product()

   {





   }

    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;





    }     

}

编写反映持久化类与数据库表映射关系的Hibernate映射文件

例如Product.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

      "-// Hibernate /Hibernate Mapping DTD 3.0//EN"

      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="test">

      <class name="Product" table="product" catalog="factory">

           <id name="id" column="id" type=" int ">

                  <generator class="native"/>

           </id>

           <property name="name" column="name" type="java.lang.String" length="255" unique="false"/>

      </class>

</hibernate-mapping>

编写Hibernate配置文件

并在配置文件中通过mapping元素加入持久化类与数据库表映射的信息,即通过resource指定上一步建立的映射文件的位置。例如
Hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

<!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 = "connection.driver_class">com.mysql.jdbc.Driver</property>





            <property name = "connection.url">jdbc:mysql://127.0.0.1:3306/factory</property>





            <property name = "connection.username"></property>





            <property name = "connection.password"></property>





            <property name = "dialect">org.hibernate.dialect.MySQLDialect</property>





            <property name = "hbm2ddl.auto">create</property>





            <property name = "show_sql">true</property>





            <property name = "format_sql">true</property>





            <mapping resource = "Product.hbm.xml"/>





      </session-factory>

</hibernate-configuration>

使用ThreadLocal控制Session

例如:

package
test;





import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.cfg.Configuration;





public class HibernateSessionFactory {

     private static Log log = LogFactory.getLog(HibernateSessionFactory.class);

     

     // Path of configuration file

     private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

     private static String configFile = CONFIG_FILE_LOCATION;





     // Use ThreadLocal to control Session object

     private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

     private static Configuration configuration = new Configuration();

     private static org.hibernate.SessionFactory sessionFactory;





     /**

     * Abstraction: Obtain Session

     */

     public static Session getSession() throws HibernateException {

          Session session = threadLocal.get();





          // Rebulid Session object if there is no session in ThreadLocal

          if (session == null || !session.isOpen()) {

               if (sessionFactory == null) {

                    rebuildSessionFactory();

               }

               // Obtain Session object

               session = (sessionFactory != null) ? sessionFactory.openSession()

                         : null;

               threadLocal.set(session);

          }          

          return session;

     }





     /**

     * Abstract: Build SessionFactory object

     */

     public static void rebuildSessionFactory() {

          try {

               // Initial application using configuration file

               configuration.configure(configFile);

               // Create SessionFactory object according to the configuration

               // Data model can be created in MySQL automatically after execute this method

               sessionFactory = configuration.buildSessionFactory();

          } catch (Exception e) {

               e.printStackTrace();

          }

     }





     /**

     * Abstraction: Close Session object

     */

     public static void closeSession() throws HibernateException

     {

          Session session = (Session) threadLocal.get();

          threadLocal.set(null);

          if (session != null)

          {

               session.close();

          }          

     }

}

在src目录下建立 ehcache.xml文件,内容如下:

<ehcache>

<diskStore path="java.io.tmpdir"/>

<defaultCache

    maxElementsInMemory="10000"

    eternal="false"

    timeToIdleSeconds="10000"

    timeToLiveSeconds="10000"

    overflowToDisk="true"

/>

  <cache  name="com.hour41.hibernate.vo.common.City"

    maxElementsInMemory="10000"

    eternal="false"

    timeToIdleSeconds="10000"

    timeToLiveSeconds="10000"

    overflowToDisk="true"

/>

</ehcache>

  • 使用Session操作数据库
    • 经过上述过程,就可完成Hibernate的配置了,接下来可以编写程序操作数据库。
    • 具体实例:
  • package test;





    import org.hibernate.Session;

    import org.hibernate.Transaction;





    import test.Product;

    import test.HibernateSessionFactory;





    public class Main {

         public static void main(String [] args)

         {

              // Get session

              Session session = HibernateSessionFactory.getSession();

              Transaction tx = null;

              try

              {

                   // Begin transaction

                   tx = session.beginTransaction();

                   

                   // Create a Product object and set its property

                   Product product = new Product();

                   product.setName("Apple");

                  

                   // Save the object

                   session.save(product);

                   // Commin

                   tx.commit();

              }

              catch (Exception e)

              {

                   if (tx != null)

                   {

                        tx.rollback();

                   }

                   try

                   {

                        // Spread the exception

                        throw e;

                   }

                   catch (Exception e2)

                   {

                        e2.printStackTrace();

                   }

              }

              finally

              {

                   // Close the session

                   session.close();

              }

         }

    }

SSH三大框架整合配置详细步骤(2)的更多相关文章

  1. SSH三大框架整合配置详细步骤(3)

    5 配置Spring2.5 5.1 基础配置 1)        导入spring包.下载spring-framework-2.5.6并解压后,在spring-framework-2.5.6" ...

  2. SSH三大框架整合配置详细步骤(1)

    配置Struts2.0 3.1 基础配置 1)引入Struts必需的五个jar包.下载struts-2.1.6-all.zip解压后,struts-2.1.6\lib目录下是struts所有的相关ja ...

  3. SSH三大框架整合配置详解

    首先,三大框架整合,肯定是要导入相当多的jar包,这是不容置疑的!     这里就不一一列举了,直接截图吧:             (1) 基于配置文件的整合:        第一步:我们需要在we ...

  4. Maven SSH三大框架整合的加载流程

    <Maven精品教程视频\day02视频\03ssh配置文件加载过程.avi;> 此课程中讲 SSH三大框架整合的加载流程,还可以,初步接触的朋友可以听一听. < \day02视频\ ...

  5. SSH三大框架整合案例

    SSH三大框架的整合   SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 ...

  6. JavaWeb_(SSH)三大框架整合struts+hibernate+spring_Demo

    三大框架整合 一.SSH导包 二.书写Spring 三.书写Struts 四.整合Spring与Struts 五.书写(与整合)Hibernate.引入c3p0连接池并使用hibernate模板 六. ...

  7. 关于ssh三大框架整合的碎碎念

    三大框架整合,无非就是一个导jar包,修改配置文件的过程.完了就没事了. 还是有很多细节性的问题 比如在spring中写applicationContext.xml文件时不提示: 解决方法如下: 如果 ...

  8. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSM(Spring+Spring MVC+MyBatis)框架整合搭建详细步骤

    因为 Spring MVC 是 Spring 框架中的一个子模块,所以 Spring 与 SpringMVC 之间不存在整合的问题.实际上,SSM 框架的整合只涉及 Spring 与 MyBatis ...

  9. SSH三大框架整合步骤

    Struts2:需要整合的第一个框架: 1.创建一个动态web项目 2.导入struts2必须的jar 放到 lib目录下 ,再 build path 添加web工程中 3.配置struts2的核心配 ...

随机推荐

  1. JavaScript基础对象---Map

    一.创建Map对象 Map 对象保存键值对.任何值(对象或者原始值) 都可以作为一个键或一个值 1.构造函数 语法:new Map([iterable])参数:         iterable  可 ...

  2. Vue微信自定义分享时安卓系统config:ok,ios系统config:invalid signature签名错误,或者安卓和ios二次分享时均config:ok但是分享无效的解决办法

    简述需求:要求指定页面可以进行微信自定义分享(自定义标题,描述,图片,链接),剩下的页面隐藏所有基础接口.二次分享依然可以正常使用,切换至其他页面也可以正常进行自定义分享. 这两天在做微信自定义分享的 ...

  3. 如何设置目标并发(或者目标RPS)?

    基本概念 首先您需要了解什么是并发用户.TPS 和它们之间的关系. 并发用户:指的是现实系统中同时操作业务的用户,在性能测试工具中一般称为虚拟用户(Virutal User).一般是站在客户侧评估的角 ...

  4. Python和Mongodb

    定义好链接DB类 # -*- coding: UTF-8 -*- from pymongo import MongoClient # 数据库连接 class MongoDB(object): def ...

  5. 【HTML/XML 5】使用XSL给XML文档添加样式

    导读:上篇博客中以具体实例分析了HTML和XML在语义上的不同,但是,大家也都发现,XML表现出来的,并没有HTML那样直观或者说美观.其原因是因为XML的表现内容和表现形式被分离.它的表现形式有两种 ...

  6. HDU1280前m大的数creat at 9:51,3.13,2016

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. [Vijos1067]Warcraft III 守望者的烦恼(DP + 矩阵优化)

    传送门 可知 f[i] = f[i - 1] + f[i - 2] + ... + f[i - k] 直接矩阵优化就好了 #include <cstdio> #include <cs ...

  8. 【概率dp】D. Card Collector

    https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/D [题意] 为了集齐n张卡片,必须要买多少袋零食?题目给定每种卡片出现在零食中的 ...

  9. Python基础教程笔记——第4章:字典

    字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...

  10. msp430项目编程11

    msp430中项目---步进电机控制系统 1.步进电机工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习