1. 程式人生 > >Hibernate對mysql資料庫的操作

Hibernate對mysql資料庫的操作

hibernate相對於mybatis來說,他是一個重量級的框架,可能比mybatis更加讓人不能夠理解一點,但是如果你從開始首先接觸hibernate,那麼由深到淺就容易得多了。

用到hibernate,首先我們需要匯入hibernate所需要的jar包,或者用myeclise可以使用自帶的jar包也能完成基本的功能,

連線資料庫,首先我們需要在資料庫中新建一個表,如下圖的user表所示:

在表中新增一些欄位,對於hibernate來說,我們做的最難的工作就是需要寫一個xml的對映檔案,將資料庫中的資料與實體類的表中的資料對應起來,下面放一下實體的user類的變數等:

package com.user.model;

import java.io.Serializable;

import org.springframework.stereotype.Component;
@Component("user")
public class User  implements Serializable {
private int  id;
private String username;
private String  email;
private  String  password;
private String  number;
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
public String getEmail() {
	return email;
}
public void setEmail(String email) {
	this.email = email;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}
public String getNumber() {
	return number;
}
public void setNumber(String number) {
	this.number = number;
}
@Override
public String toString() {
	return "User [id=" + id + ", username=" + username + ", email=" + email + ", password=" + password + ", number="
			+ number + "]";
}
}

對映檔案:User.cfg.xml:這裡的name是User類中的屬性,colunm是資料庫中的欄位,注意要在對映之前加上類的全路徑名和資料庫中的表名

<?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>
 <!-- 定義User類的對映檔案 -->
 <!-- 將類對映到表  catalog指的是資料庫的名字 -->
 <class   name="com.user.model.User"   table="users"  >
 <!-- id用於對應主鍵的關係 -->
 <id name="id" type="int"  >
 <column   name="user_id"    />
 </id>
  <property  name="username"  type="java.lang.String"    column="user_name" ></property>
 <property  name="email"    type="java.lang.String"  column="user_email" ></property>
 <property  name="password"   type="java.lang.String"   column="user_pass" ></property>
  <property  name="number"  type="java.lang.String"    column="user_number" ></property>
 </class>
 </hibernate-mapping>

其實到這裡我們還以一個很重要的步驟沒有去做,那就是怎麼確定資料庫的連線,配置資料庫的連線資訊,這裡就需要用到一個叫做hiberate.cfg.xml的配置檔案,配置資料庫的連線使用者名稱、密碼等資訊,這裡最重要的就是mapping中的resourse指的就是自己上文提到的User.cfg.xml的路徑,這一點就是將其新增到對映檔案中最為重要的一步,再加一句,hibernate.cfg.xml中的資訊需要按照自己mysql的配置進行更改,你的使用者名稱密碼 ,以及對資料庫表的操作,資料庫名等等,具體仔細研讀下面程式碼,

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">a12345</property>

    
        <!-- SQL dialect -->
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>

      
             <property name="show_sql">true</property>
   <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
//這裡很重要
<!-- 載入對映檔案   多個對映檔案時候用*.hbm.xml標識 -->
        <mapping resource="Model/User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

到了這裡,我們已經完成80%的功能;

我們新建一個java類來測試我們的功能

public class Main{

public stati void main(String[] args){

//讀取配置檔案
Configuration cfg=new Configuration().configure("hibernate.cfg.xml");
//建立session工廠
SessionFactory factory =cfg.buildSessionFactory();
//開啟session
Session session=factory.openSession();
//開始事務
Transaction tr=session.beginTransaction();
//此時我們就可以對資料庫中的資料進行增刪改查了
User user =new User();
user.setName("hejing");
session.save(user);  //儲存
user.setId("111");
session.update(user);  //修改
session。delete(user);   //刪除
tr.commit();   //提交
//在提交之前記得儲存
//然後關閉 session 以及 sessionFactory


}
}

到這裡,就大功告成了,如果大家還有什麼不懂的地方,歡迎討論,共同進步。