初識Hibernate——添加數據

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;
    }
    
}
View Code

四、建立實體映射關係 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

相關文章
相關標籤/搜索