ssh整合思想 Spring与Hibernate的整合ssh整合相关JAR包下载 .MySQLDialect方言解决无法服务器启动自动update创建表问题

除之前的Spring相关包,还有structs2包外,还需要Hibernate的相关包

首先,Spring整合其他持久化层框架的JAR包 spring-orm-4.2.4.RELEASE.jar  (整合Hibernate的)

这个JAR包在Spring框架中包含

Hibernate 需要的JAR包

slf4j-api-1.7.7.jar

slf4j-log4j12-1.7.1.jar

jboss-logging-3.3.0.Final.jar

jandex-2.0.3.Final.jar

hibernate-entitymanager-4.2.3.final.jar

hibernate-jpa-2.1-api-1.0.0.Final.jar

hibernate-core-5.2.12.Final.jar

hibernate-commons-annotations-5.0.1.Final.jar

geronimo-jta_1.0.1b_spec-1.1.1.jar

antlr-2.7.7.jar


 

上面Hibernate11个包

以及前边的JAR包共计43个

下载地址如下:

链接: https://pan.baidu.com/s/1mizikiO 密码: cigf


 

java.lang.ClassNotFoundException: org.dom4j.io.STAXEventReader 异常

缺少了dom4j-1.6.1.jar 包

在Hibernate官方包中

包含dom4j-1.6.1.jar 的官方Hibernate整包下载地址

链接: https://pan.baidu.com/s/1c2Jbmnu 密码: 3sef


 

需要JAR包 classmate-1.3.0.jar

在Hibernate官方包中


 

注意:Hibernate的核心配置文件hibernate.cfg.xml 要在src文件夹下,不能在其下的某个包中,否则会出现

最后,Hibernate测试成功效果

不用数据库创建表,通过实体类映射文件User.hbm.xml,它的位置随意。把User类映射到数据库中

映射文件代码:

<?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>

    <class name="com.swift.entity.User" table="hibernate_user">
        <!-- 主键 -->
        <id name="uid" column="uid">
            <generator class="native"/>
        </id>
        <!-- 其他属性 -->
        <property name="username" column="username"/>
        <property name="address" column="address"/>
    </class>
    
</hibernate-mapping>

实体类代码如下:

package com.swift.entity;

public class User {
    
    private Integer uid;
    private String username;
    private String address;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public Integer getUid() {
        return uid;
    }
    public void setUid(Integer uid) {
        this.uid = uid;
    }
    
}

这里要注意uid所使用的整型类型不是int,而是Integer

Hibernate核心配置文件,要在src目录下,一定注意位置,在其中指定上边的映射文件,同时连接数据库,并自动生成表。

核心配置文件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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/lastday</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        
        
        <property name="hibernate.show_sql">true</property>

        <!-- create: 先删表,再建表。 create-drop: 启动时建表,退出前删表。 update: 如果表结构不一致,就创建或更新。 
            validate: 启动时验证表结构,如果不致就抛异常。 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!--指定映射文件,可映射多个映射文件 -->
        <mapping resource="com/swift/entity/User.hbm.xml"></mapping>
    </session-factory>
</hibernate-configuration>  

加载核心配置文件的测试类HibernateUtil 代码如下:

package com.swift.entity;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    static SessionFactory sessionFactory=null;
    static Configuration cfg=null;
    
    static{
        //加载核心配置文件
        cfg = new Configuration();
        cfg.configure();
        sessionFactory = cfg.buildSessionFactory();
    }
    
    public static SessionFactory getSessionFactory(){
        return sessionFactory;
    }
    public static Session getSession(){
        return sessionFactory.getCurrentSession();
    }
    public static void main(String[] args) {
        
    }
}

数据库中查看效果

是空的,数据库中什么都没有,没有自动建成的表。

仔细检查都没有错了,排除了映射混乱问题,就是不出表,SQL语句都成功打出了,也没有任何异常。

最后参考了这个兄弟的解释

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

.MySQLDialect添加了第57区的方言,就搞定了。

 

posted @ 2017-12-31 20:46  Advancing-Swift  阅读(793)  评论(0编辑  收藏  举报