(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 <!--<!– Disable the second-level cache –>--> 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 }
