Hibernate Helloworld實現
Hibernate簡介
Hibernate是一個流行的ORM框架。通過Hibernate可以通過Java中的物件來間接操縱資料庫中的表。
使用xml來體驗Hibernate
使用Maven來建立一個Hibernate基本專案,通過Student物件,對mysql資料庫中tb_student表來進行CRUD操作。
1. 引入Maven依賴
引入hibernate核心包,mysql連線以及用於測試的junit包。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.java1234.hibernate</groupId> <artifactId>HelloWorld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>HelloWorld</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.0.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.3</version> </dependency> </dependencies> </project>
2. hibernate.hbm.xml檔案
hibernate.hbm.xml是專案級的Hibernate預設配置檔案,包含資料庫連線配置,方言配置等等。
詳細內容:https://blog.csdn.net/R812656252/article/details/83956633
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 資料庫連線 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db_hibernate</property> <!-- 是否在控制檯輸出hibernate所執行的SQL語句 --> <property name="show_sql">true</property> <!-- 選擇與開發環境適配的方言包 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置是否如何更新資料庫表結構 --> <property name="hbm2ddl.auto">create</property> <!-- 需要交由hibernate解析的mapping檔案 --> <mapping resource="com.java1234.hibernate.model.student.hbm.xml"/> </session-factory> </hibernate-configuration>
3. Student.java
package com.java1234.hibernate.model;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.student.hbm.xml
Java中pojo與資料庫表的對映檔案,通過本檔案來提示Hibernate在資料庫中如何建立對應的表。
詳細內容:https://blog.csdn.net/R812656252/article/details/83956659
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.java1234.hibernate.model.Student" table="tb_student">
<id name="id" column="stuId">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
5. 使用Hibernate API
通過呼叫Hibernate提供的API,來對資料庫進行相應操作。
- HibernateUtil.java / 獲得SessionFactory物件
package com.java1234.hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static SessionFactory sessionFactory = HibernateUtil.buildSessionFactory();
private static SessionFactory buildSessionFactory(){
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
return configuration.buildSessionFactory(serviceRegistry);
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
- HibernateTest.java / 使用Session物件體驗CRUD操作
package com.java1234.hibernate.HelloWorld;
import static org.junit.Assert.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.java1234.hibernate.HibernateUtil;
import com.java1234.hibernate.model.Student;
public class HibernateTest {
private SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
private Session session = null;
//在每次執行之前通過sessionFactory得到session物件
@Before
public void setUp() throws Exception {
session = sessionFactory.openSession();
}
//在執行完操作之後關閉session以及sessionFactory
@After
public void tearDown() throws Exception {
session.close();
sessionFactory.close();
}
//建立一張新的表:儲存一個空的student物件
@Test
public void testCreate() {
session.beginTransaction();
Student student = new Student();
session.save(student);
session.getTransaction().commit();
}
//插入一條資料:儲存一個有值的物件
@Test
public void testInsert(){
session.beginTransaction();
Student student = new Student();
student.setName("Robin");
session.save(student);
session.getTransaction().commit();
}
//更新某條記錄,先通過主鍵查詢 返回一個物件,然後修改這個物件後儲存
@Test
public void testUpdate(){
session.beginTransaction();
Student s = (Student) session.get(Student.class, 1);
s.setName("Mary");
session.save(s);
session.getTransaction().commit();
}
//刪除某條記錄,先通過主鍵查詢 返回一個物件,然後呼叫delete方法
@Test
public void testDelete(){
session.beginTransaction();
Student s = (Student) session.get(Student.class, 1);
session.delete(s);
session.getTransaction().commit();
}
}
使用annotation來體驗Hibernate
通過使用HIbernate提供的註解標籤,可以將**.hbm.xml中的配置,在定義pojo時一併定義。
1. 引入Maven依賴
2. hibernate.hbm.xml檔案
在使用註解時引入。
<mapping class="com.java1234.hibernate.model.Teacher"/>
3. Teacher.java
使用Hibernate中提供的註解,生成一個我們想要的資料庫表
註解詳細內容:
package com.java1234.hibernate.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="tb_teacher")
public class Teacher {
private int id;
private String name;
@Id
@GeneratedValue(generator="_native")
@GenericGenerator(name="_native",strategy="native")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4. 測試CRUD