Hibernate(3.0)_Hibernate單表的增刪改查

在項目中搭建好了Hibernate框架之后,就可以直接用Hibernate進行數據庫的一些操作了

搭建數據庫

首先先在數據庫中搭建一個簡單的測試數據庫
  新建一個新的數據庫Hibernate_Project,字符集選UTF-8,排序默認


  然后新建一張表


  并保存為Student


  然后在表中填入測試用的數據


  新建好數據庫之后在hibernate.cfg.xml中修改相應的數據庫URL

<property name="connection.url">
    jdbc:mysql://127.0.0.1:3306/Hibernate_Project
</property>

編寫代碼

搭建好數據庫之后就可以回到項目中開始寫相應的代碼
  首先先寫一個對應數據庫數據結構的JavaBean文件,并添加getter和setter

Student.java

package com.pojo;

public class Student {

    private int stuid;
    private String stuname;

    public int getStuid() {
        return stuid;
    }

    public void setStuid(int stuid) {
        this.stuid = stuid;
    }

    public String getStuname() {
        return stuname;
    }

    public void setStuname(String stuname) {
        this.stuname = stuname;
    }

}

然后再pojo包下建立一個JavaBean文件的Hibernate映射文件

Student.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>
    <!-- 指定數據庫對應的JavaBean的class文件 -->
    <!-- name是類名(類名要加上包名) table是數據庫對應的表 -->
    <class name="com.pojo.Student" table="student">
        <!-- id是指定主鍵 column是數據庫對應的列名 name是類中對應主鍵的屬性名 -->
        <id column="stuid" name="stuid">
            <!-- 指定主鍵的生成方式是由用戶生成主鍵值 -->
            <generator class="assigned"/>
        </id>
        <!-- 下面是各個對應的非主鍵屬性與Bean類中的屬性一一對應 -->
        <property column="stuname" name="stuname"/>
    </class>
</hibernate-mapping>

注:

事實上關于配置文件還是有很多別的寫法,以上的寫法是比較標準和全面的寫法,但是Hibernate提供了一些約定俗成的簡略寫法,在一定程度上可以使寫配置文件更有效率

<?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 package="com.pojo">
    <!-- 包名的部分可以省略掉,然后如果類名和數據庫的表名相同,那么table屬性也可以省略 -->
    <class name="Student" >
        <!-- 省略情況同上 -->
        <id name="stuid">
            <!-- 指定主鍵的生成方式是由用戶生成主鍵值 -->
            <generator class="assigned"/>
        </id>
        <!-- 省略情況同上 -->
        <property name="stuname"/>
    </class>
</hibernate-mapping>

測試基本操作

至此,項目中的基本配置已經配置好了,接下來可以開始寫Test測試方法了。


Test.java

package com.pojo;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Test {

    public static void main(String[] args) {
        // 1.讀取總配置文件
        Configuration configuration = new Configuration().configure();
        // 2.創建Session工廠
        SessionFactory factory = configuration.buildSessionFactory();
        // 3.得到Session session其實就是對connection對象的封裝
        Session session = factory.openSession();
        // 4.開啟事務 ACID 原子性 一致性 隔離性 持久性
        Transaction transaction = session.beginTransaction();
        // 5.持久化操作
        Student student = new Student();
        student.setStuid(3);
        student.setStuname("damao");
        session.save(student);
        // 6.提交事務
        transaction.commit();
        // 7.關閉session
        session.close();
    }

}

其中的持久化操作就是對數據庫的實際操作,可以替換成項目需要的操作

//新建一個Student類
Student student = new Student();
//指定其中的各個屬性的值
student.setStuid(3);
student.setStuname("xiaohei");
//用save方法保存在內存中,然后用transaction.commit()提交事務,數據庫便把數據存下來了
session.save(student);

  可以看到在控制臺已經把sql語句打印出來了,表示已經執行成功了,然后再看數據庫中是否把新的數據增加到表里


  可以看到數據已經被添加到表中了

中文亂碼

然而很多時候我們需要往數據庫里面添加中文,比如用戶名之類的屬性,這個時候我們直接插入中文數據的時候,我們把上面的姓名一項改成中文

student.setStuname("小黑");

再次執行就會發現數據庫中出現了不能顯示的亂碼


  這是因為Hibernate和MySQL默認的操作字符集不是我們常用的UTF-8所以就會出現亂碼,這個時候我們需要去修改Hibernte的全局配置文件中的數據庫URL,在原來的URL尾巴上加上字符指定代碼

<property name="connection.url">
        jdbc:mysql://127.0.0.1:3306/Hibernate_Project?useUnicode=true&characterEncoding=UTF-8
    </property>

這樣再添加中文就不會出現亂碼了

只需要基于增加的方法改為

Student student = (Student) session.load(Student.class, 1);
session.delete(student);

  我們可以看到數據庫中stuid為1的記錄已經被刪掉了

同上簡單修改代碼為

Student student = (Student) session.load(Student.class, 2);
student.setStuname("趙六");
session.update(student);

  可以看到數據庫中stuid的stuname屬性已經被修改

同上簡單修改代碼為

Student student = (Student) session.load(Student.class, 2);
System.out.println(student.getStuid());
System.out.println(student.getStuname());

可以看到控制臺打印出了stuid為2的記錄的信息(這個順序有點凌亂我也不知道為毛,不過總算是打印出來了)


以上便是簡單的單表單記錄的增刪改查,復雜的以后慢慢再補充

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容