除之前的Spring相關包,還有structs2包外,還需要Hibernate的相關包 首先,Spring整合其他持久化層框架的JAR包 spring-orm-4.2.4.RELEASE.jar (整合Hibernate的) 這個JAR包在Spring框架中包含 Hibernate 需要的JAR包 ...
除之前的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區的方言,就搞定了,這個誰設計的絕對的敗筆,坑倒一片的節奏。