在項目中搭建好了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的記錄的信息(這個順序有點凌亂我也不知道為毛,不過總算是打印出來了)
以上便是簡單的單表單記錄的增刪改查,復雜的以后慢慢再補充