ORM:Object Relational Mapping 實體關係映射,Hibernate將關係型數據庫轉換爲對象操做java
利用Java Project項目演示試用Hibernate技術添加數據到數據庫mysql
一、引用相關jar包sql
在項目下新建Mylib文件夾,加jar包粘貼就去,試用Build Path添加在項目中(如果Jave Web項目則放在WebRoot-->WEB-INF-->lib中直接使用)數據庫
二、建立Hibernate配置文件, hibernate.cfg.xml或是hibernate.properties 。添加在src下安全
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- thread:一個線程中使用一個,獲取session會話時使用 --> <property name="current_session_content_class">thread</property> <!-- 是否顯示SQL語句,值爲布爾型,默認false --> <property name="hibernate.show_sql">true</property> <!-- 是否格式化顯示sql語句,讓顯示更美觀,值爲布爾型,默認false --> <property name="hibernate.format_sql">false </property> <!-- 自動建表 update:每次執行時,無表則建表,無列則建列,只增不減 create:每次啓動的時候,刪除原表,再次建立 create-drop:每次啓動時建立新表,當顯式關閉sessionFactory時,刪除表 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 鏈接數據庫 --> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/zxd_db</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.username">zxd</property> <property name="hibernate.connection.password">123456</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 讀取映射文件 --> <mapping resource="demo/orm/entity/Hero.hbm.xml" /> </session-factory> </hibernate-configuration>
hibernate.properties配置文件只能配置屬性信息,不能配置映射等session
hibernate.connection.username=zxd
hibernate.connection.password=123456
三、建立實體app
package demo.orm.entity; import java.util.Date; public class Hero { private int heroId; private String heroName; private int heroAge; private Date birthday; public int getHeroId() { return heroId; } public void setHeroId(int heroId) { this.heroId = heroId; } public String getHeroName() { return heroName; } public void setHeroName(String heroName) { this.heroName = heroName; } public int getHeroAge() { return heroAge; } public void setHeroAge(int heroAge) { this.heroAge = heroAge; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
四、建立實體映射關係 ide
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- name:實體, table:表名 --> <class name="demo.orm.entity.Hero" table="yingxiong"> <!-- name:主鍵的名字,column:主鍵數據庫表列,identity自增 --> <id name="heroId" column="ID"> <!-- Hibernate使用generator類來生成主鍵 --> <generator class="identity" /> </id> <!-- name:實體中的屬性名,length:長度 ,column:表中的字段(實體屬性和字段一致可省略),type:類型(可不寫由hiberbate自動匹配) --> <property name="heroName" length="100" column="NAME" type="string" /> <property name="heroAge" column="AGE" type="int" /> <property name="birthday" column="BIR" type="timestamp" /> </class> </hibernate-mapping>
五、保存數據工具
package demo.orm.test; import java.util.Date; import java.util.List; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; import demo.orm.entity.Hero; public class SaveTest { public static void main(String[] args) { /* * 兩種配置文件的加載方式,hibernate.properties只配置數據庫的鏈接方式 * 屬性文件(hibernate.properties)調用代碼:Configuration cfg = new Configuration(); * Xml文件(hibernate.cfg.xml) 調用代碼:Configuration cfg = new Configuration().configure(); * */ //加載Hibernate配置信息,默認讀取src下的hibernate.cfg.xml Configuration cfg = new Configuration().configure(); //也能夠指定hibernate.cfg.xml 的路徑加載 //Configuration cfg1 = new Configuration().configure(Path); /* * 應用程序從SessionFactory(會話工廠)裏得到Session(會話)實例。它在多個應用線程間進行共享。 * 一般狀況下,整個應用只有惟一的一個會話工廠,SessionFactory由Configuration對象建立, * 每一個Hibernate配置文件,其實是對SessionFactory的配置 * */ //試用配置信息構建sessionFactory SessionFactory factory = cfg.buildSessionFactory(); /* * Session不是線程安全的,它表明與數據庫之間的一次操做,它的概念介於Connection和Transaction之間。 * Session也稱爲持久化管理器,由於它是與持久化有關的操做接口。 * 持久化對象的狀態:瞬時對象(Transient Objects)、持久化對象(Persist Objects)、離線對象(Detached Objects) * Session經過SessionFactory打開,在全部的工做完成後,須要關閉。 * 它與Web層的HttpSession沒有任何關係。 * */ //方式一:經過會話工廠構建session會話,進行增刪改查,是Hibernate與數據庫的會話(須要關閉) Session session = factory.openSession(); //經過Id值查詢(查詢的時候不須要使用事物) session.get(Hero.class, 1); //經過hql查詢 Query query =session.createQuery("from Hero where hreoAge=30"); List<Hero> list = query.list(); for(Hero model:list){ System.out.println(model.getHeroName()); } //方式二:獲取當前線程中最近試用的session,沒有再open。節省資源 Session session1 =factory.getCurrentSession(); //CurrentSession必須使用事物(增刪改查) session1.beginTransaction(); session1.get(Hero.class, 1); session1.getTransaction().commit(); //啓動會話事物 session.beginTransaction(); /*******執行增刪改查會話操做********/ Hero model= new Hero(); model.setHeroName("Don"); model.setHeroAge(28); model.setBirthday(new Date()); session.save(model); //提交事物 session.getTransaction().commit(); //判斷會話是否開啓 if(session.isOpen()){ session.close(); } } }
注意:數據庫使用MySql,鏈接工具使用navicat鏈接,須要在數據庫中創建相關表,並查看相關數據信息ui