1. 程式人生 > >Hibernate Helloworld實現

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