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

强颜欢笑 提交于 2020-03-08 04:29:59

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


Hibernate 报错:this project is not a myeclipse hibernate project . assuming hibernate 3 cap

解决;

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

 



  • 添加库文件
    • www.hibernate.org网站下载Hibernate发布包(如hibernate.jar),从www.mysql.com下载MySQLJDBC驱动程序jar包,将这两个jar包放在lib目录
    • 将以下jar包拷到lib目录中:asm.jarcglib-2.1.3.jarcommons-collections-2.1.1.jarcommons-logging-1.0.4.jardom4j-1.6.1.jarehcache-1.1.jarjta.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();
              }
         }
    }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!