Hibernate5.4的環境搭建


(1)項目中添加Hibernate依賴

 

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.4.2.Final</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>

 

(2)項目中添加Hibernate配置文件

 1 <?xml version='1.0' encoding='utf-8'?>
 2 
 3 <!DOCTYPE hibernate-configuration PUBLIC
 4         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 5         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 6 
 7 <hibernate-configuration>
 8 
 9     <session-factory>
10 
11         <!-- 數據庫連接設置 -->
12 
13         <!--數據庫連接驅動-->
14         <!--<property name="connection.driver_class">com.mysql.jdbc.Driver</property>-->
15         <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
16         
17         <!--數據庫連接地址-->
18         <!--<property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo</property>-->
19         <property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo?serverTimezone=UTC</property>
20         
21         <!--數據庫連接用戶名-->
22         <property name="connection.username">root</property>
23         
24         <!--數據庫連接密碼-->
25         <property name="connection.password">123456</property>
26 
27         <!-- 配置內置連接池中的連接數 -->
28         <property name="connection.pool_size">5</property>
29 
30         <!-- 數據庫方言配置 -->
31         <!--<property name="dialect">org.hibernate.dialect.MySQLDialect</property>-->
32         <property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
33 
34         <!--&lt;!&ndash; Disable the second-level cache  &ndash;&gt;-->
35         <!--<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>-->
36 
37         <!-- 操作數據庫時,是否向控制台打印Sql語句 -->
38         <property name="show_sql">true</property>
39 
40         <!-- 事務自動提交  -->
41         <!--<property name="connection.autocommit">true</property>-->
42 
43         <!-- 將Session與線程綁定=> 只有配置了該配置,才能使用getCurrentSession -->
44         <!--<property name="current_session_context_class">thread</property>-->
45 
46         <!-- 打印Sql語句前,是否將Sql語句格式化 -->
47         <property name="format_sql">true</property>
48 
49         <!-- 生成表結構的策略配置       
50             update(最常用的取值): 如果當前數據庫中不存在表結構,那么自動創建表結構. 
51                                  如果存在表結構,並且表結構與實體一致,那么不做修改
52                                  如果存在表結構,並且表結構與實體不一致,那么會修改表結構.會保留原有列.
53             create(很少):無論是否存在表結構.每次啟動Hibernate都會重新創建表結構.(數據會丟失)
54             create-drop(極少): 無論是否存在表結構.每次啟動Hibernate都會重新創建表結構.每次Hibernate運行結束時,刪除表結構.
55             validate(很少):不會自動創建表結構.也不會自動維護表結構.Hibernate只校驗表結構. 如果表結構不一致將會拋出異常.    
56          -->
57         <property name="hbm2ddl.auto">update</property>
58 
59         <!-- 引入ORM映射文件 填寫src之后的路徑-->
60         <mapping resource="User.hbm.xml"/>
61 
62         <!-- Names the annotated entity class -->
63          <!--<mapping class="cn.coreqi.entities.Users"/>-->
64 
65     </session-factory>
66 
67 </hibernate-configuration>

(3)添加表對象關系映射文件 || 在實體類上添加注解(推介)

表對象關系映射文件

 1 <?xml version="1.0"?>
 2 
 3 <!DOCTYPE hibernate-mapping PUBLIC
 4         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 5         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 6 
 7 <!--    
 8         ORM元數據  表對象關系映射文件 
 9         package : 配置該配置文件中類所在的包.  
10 -->
11 <hibernate-mapping package="cn.coreqi.entities">
12 
13      <!-- 
14         class標簽: 配置實體與表的關系
15          name屬性: 實體類類名
16          table屬性: 與實體類對應的數據表名稱
17          dynamic-insert屬性: 動態插入 默認值false
18                             true=>如果字段值為null,不參與insert語句
19          dynamic-update屬性: 動態更新  默認值false
20                             true=>沒改動過的屬性,將不會生成到update語句中
21       -->
22     <class name="Users" table="users">
23         <!-- id標簽: 配置實體類與數據表的主鍵映射
24              name: 實體類中主鍵的屬性名稱
25              column: 數據表中主鍵的列名
26              length: 列的數據長度
27              unsaved-value(不常用): 指定主鍵為什么值時,當做null來處理.
28              access(強烈推薦不要用):field 那么在操作屬性時,會直接操作對應的字段而不是get/set方法
29           -->
30         <id name="Id" column="Id">
31             <!-- generator  主鍵生成策略
32                     1.increment  數據庫自己生成主鍵. 先從數據庫中查詢最大的ID值,將ID值加1作為新的主鍵
33                     2.identity  依賴於數據的主鍵自增功能
34                     3.sequence  序列,依賴於數據中的序列功能(Oracle).
35                     4.hilo(純了解,永遠用不到) : Hibernate自己實現序列的算法,自己生成主鍵. (hilo算法 )
36                     5.native 自動根據數據庫判斷,三選一. identity|sequence|hilo
37                     6.uuid  生成32位的不重復隨機字符串當做主鍵
38                     7.assigned 自己指定主鍵值. 表的主鍵是自然主鍵時使用.
39              -->
40             <generator class="identity"/>
41         </id>
42         <!-- property  實體類屬性與數據表中列的映射
43                 name : 實體類中屬性名稱
44                 column : 數據表中列的名稱
45                 length : 數據長度
46                 precision: 小數點后的精度
47                 scale:    有效位數
48                 insert(一般不用): 該屬性是否加入insert語句.
49                 update(一般不用): 該屬性是否加入update語句.
50                 not-null : 指定屬性的約束是否使用 非空
51                 unique : 指定屬性的約束是否使用 唯一
52                 type: 表達該屬性的類型,可以用三種方式指定屬性
53                     Ⅰ: java類型 java.lang.String
54                     Ⅱ: 數據庫類型指定 varchar
55                     Ⅲ: Hibernate類型指定 string                 
56         -->
57         <property name="userName" column="UserName" type="string"/>
58         <property name="passWord" column="PassWord" type="string"/>
59         <property name="enabled" column="Enabled" type="int"/>
60     </class>
61 
62 </hibernate-mapping>

添加了注解的實體類(推薦)啟動此種方式需要在Hibernate配置文件中啟動

62         <!-- Names the annotated entity class -->
63         <!--<mapping class="cn.coreqi.entities.Users"/>-->
 1 package cn.coreqi.entities;
 2 
 3 import org.hibernate.annotations.GenericGenerator;
 4 import javax.persistence.*;
 5 import java.io.Serializable;
 6 
 7 @Entity
 8 @Table(name = "users")
 9 public class Users implements Serializable {
10 
11     @Id
12     @GeneratedValue(generator="diy")
13     @GenericGenerator(name="diy", strategy = "identity")
14     private Integer Id;
15     @Column
16     private String UserName;
17     @Column
18     private String PassWord;
19     @Column
20     private Integer Enabled;
21 
22     public Integer getId() {
23         return Id;
24     }
25 
26     public Users() {
27     }
28 
29     public void setId(Integer id) {
30         Id = id;
31     }
32 
33     public String getUserName() {
34         return UserName;
35     }
36 
37     public void setUserName(String userName) {
38         UserName = userName;
39     }
40 
41     public String getPassWord() {
42         return PassWord;
43     }
44 
45     public void setPassWord(String passWord) {
46         PassWord = passWord;
47     }
48 
49     public Integer getEnabled() {
50         return Enabled;
51     }
52 
53     public void setEnabled(Integer enabled) {
54         Enabled = enabled;
55     }
56 
57     @Override
58     public String toString() {
59         return "Users{" +
60                 "Id=" + Id +
61                 ", UserName='" + UserName + '\'' +
62                 ", PassWord='" + PassWord + '\'' +
63                 ", Enabled=" + Enabled +
64                 '}';
65     }
66 }

(4)編寫dao文件

 1 package cn.coreqi.dao.hibernate;
 2 
 3 import cn.coreqi.entities.Users;
 4 import org.hibernate.Session;
 5 import org.hibernate.SessionFactory;
 6 import org.hibernate.Transaction;
 7 import org.hibernate.boot.MetadataSources;
 8 import org.hibernate.boot.cfgxml.spi.LoadedConfig;
 9 import org.hibernate.boot.registry.StandardServiceRegistry;
10 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
11 import org.hibernate.cfg.Configuration;
12 import org.springframework.stereotype.Repository;
13 
14 import java.io.File;
15 
16 @Repository
17 public class UsersHibernate {
18     //private SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
19     private final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
20     private SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
21     public void addUsers(){
22         Session session = sessionFactory.openSession();
23         Transaction ts = session.beginTransaction();
24         Users users = new Users();
25         users.setUserName("gaoxing");
26         users.setPassWord("mmmmm");
27         users.setEnabled(1);
28         session.save(users);
29         ts.commit();
30         session.close();
31     }
32 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM