hibernate入門一之如何使用hibernate創建數據表


引言:使用連接數據庫來創建實體類,很快就學會了,但是對於怎么用hibernate創建數據表確實用了兩天的時間,記錄下這次學習的過程。

1、在一開始怎么都搜不到資料,后來才明白,在搜的時候要加正向的,用數據庫創建實體類是反向,用實體類創建數據表是正向的,這樣搜就可以了

2、在一開始的時候,總是執着於IDE和插件的問題,對於所遇到的問題沒有進行深入的研究,導致浪費掉了大量的時間(最后還是沒搞定)

3、總是執着於教程上的操作方式,到最后才發現,在新版本里的寫法是不一樣的,坑之又坑

4、浪費時間最長的是如何使用hibernate用實體類生成hbm.xml文件,在教程里看老師用的挺溜的,因為電腦的原因,ide、插件安裝失敗,所以最后是只能是手寫了

1、創建hibernate項目:參考資料:https://blog.csdn.net/fighting_sxw/article/details/80566295(友情提示:注意測試時新版本與舊版本的書寫方式)

2、在使用hibernate創建數據表需要四個主要文件:實體類,實體類對應的映射文件(后綴名為hbm.xml結尾),hibernate的配置文件(以cfg.xml結尾),以及測試類

3、對應的主要內容如下:

實體類:

package com.hibernate.entity;


import java.util.Date;

public class Students {

    private int sid;
    private String sname;
    private String gender;
    private Date birthday;
    private String address;

    public Students(){

    }

    public Students(int sid, String sname, String gender, Date birthday, String address) {
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.birthday = birthday;
        this.address = address;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Students{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", gender='" + gender + '\'' +
                ", birthday=" + birthday +
                ", address='" + address + '\'' +
                '}';
    }
}

 實體類對應的hbm.xml文件

<?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.hibernate.entity.Students" table="Students">
        <id name="sid" type="int">
            <column name="SID"/>
            <generator class="assigned"/>
        </id>
        <property name="sname" type="java.lang.String">
            <column name="SNAME"/>
        </property>
        <property name="gender" type="java.lang.String">
            <column name="GENDER"/>
        </property>
        <property name="birthday" type="java.util.Date">
            <column name="BIRTHDAY"/>
        </property>
        <property name="address" type="java.lang.String">
            <column name="ADDRESS"/>
        </property>

    </class>


</hibernate-mapping>

 hibernate的cfg文件

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="connection.url">jdbc:mysql://localhost:3306/rushi</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.username">root</property>
    <property name="connection.password">Sys935269</property>

    <!-- DB schema will be updated if needed -->
    <!-- <property name="hbm2ddl.auto">update</property> -->
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <!--自動生成-->
    <property name="hbm2ddl.auto">create</property>
    <!--數據庫方言-->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>

    <!--加載資源-->
    <mapping resource="com/hibernate/entity/Students.hbm.xml"/>

  </session-factory>
</hibernate-configuration>

 4、這里對測試類重點介紹下,測試的時候新版本與舊版本可能會有所不同,按照教程可能永遠都找不出問題所在(參考資料:https://blog.csdn.net/bingjianit/article/details/68954250

package com.hibernate.entity;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;

import java.util.Date;

public class Test {

    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;

    @Before
    public void init() {

        //創建配置對象
        //Configuration configure = new Configuration().configure();

        //創建服務注冊對象
        //ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();

        ////以上為舊版本的寫法,若是不注意,就會報org.hibernate.MappingException: Unknown entity: com.hibernate.entity.Student這個錯誤

        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
        //創建會話工廠對象
        SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
        //會話對象
        session = sessionFactory.openSession();
        //開啟事務
        transaction = session.beginTransaction();
    }

    @After
    public void destory() {
        //提交事務
        transaction.commit();
        //關閉會話
        session.close();
        //關閉會話工廠
        sessionFactory.close();
    }

    @org.junit.Test
    public void TestSaveStudents() {
        //生成學生對象
        Students s = new Students(2, "張三豐", "南", new Date(), "武當山");
        session.save(s);
    }
}

 程序運行結束,可能提示運行失敗,但是數據已經存在表格里了,不確定的可以去數據里查看下

 

 

 

 

 

 

 

 

格言:從不熟悉到熟悉是一個過程,無需恐懼,

 


免責聲明!

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



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