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


    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();
                }
           }
      }

  • 相关阅读:
    在Docker中安装JDK
    在Docker中安装Zookeeper以及集群环境搭建
    Druid连接池加密
    在Docker中安装Nginx
    Docker镜像、容器、仓库的介绍
    记一次 oracle 流复制 传播进程故障
    今天遭遇 cannot restore segment prot after reloc:Permission denied
    记一次由raid换盘引起的message记录
    今晚测试了下微信的摇一摇传图
    遭遇linux 异常掉电后 文件系统只读
  • 原文地址:https://www.cnblogs.com/baoendemao/p/3804816.html
Copyright © 2020-2023  润新知