1. 程式人生 > >Hibernate 教程(二)[Hibernate物件的操作,xml配置,註解配置]

Hibernate 教程(二)[Hibernate物件的操作,xml配置,註解配置]

準備

  1. 資料庫建表(Hibernate可以自動生成表,和對應欄位,但是不能給欄位添加註釋,所以選擇手動建表)
-- 建立表
CREATE TABLE `Event`(
`id` INT AUTO_INCREMENT COMMENT '唯一標識',
`title` VARCHAR(100) COMMENT '標題',
`date` DATETIME COMMENT '時間',
PRIMARY KEY (id)
)COMMENT '事件';

-- 插入資料
INSERT INTO `Event`(title, date) VALUES ('標題一', CURRENT_TIME
), ('標題二', CURRENT_TIME), ('標題三', CURRENT_TIME);

XML配置

  • 1.新建orm.entity.Event
package orm.entity;

import java.util.Date;

public class Event {
	
	private Long id;
	
	private String title;
	
	private Date date;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this
.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } /** * 重寫toString 方便列印物件 */ @Override public String toString() { StringBuilder stringBuilder =
new StringBuilder(); stringBuilder.append("Event {" + "id: "+id+", "+"title: "+title+", "+"date: "+date+ "}"); return stringBuilder.toString(); } }
  1. 新建HibernateStuConfiguration/src/orm/xml/Event.hbm.xml
<?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 package="orm.entity">

	<class name="Event" table="Event">
		<id name="id" column="id">
			<generator class="increment" />
		</id>
		<property name="date" type="timestamp" column="date" />
		<property name="title" />
	</class>

</hibernate-mapping>
  • 3.新增的hibernate.cfg.xml配置中
<?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>
	<!-- 1. 配置資料庫資訊 -->
	<!-- 2. 配置Hibernate資訊 -->
	<!-- 3. 把對映檔案放到核心位置 -->
	<session-factory>
		<!-- 1 -->
		<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
		<property name="hibernate.connection.url"><![CDATA[jdbc:mysql://192.168.1.200:3306/Hibernate?useSSL=false]]></property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123456</property>



		<!-- <property name="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> 
			禁用二級快取 -->

		<!-- 2 -->
		<property name="hibernate.show_sql">true</property><!-- 顯示SQL語句 -->
		<property name="hibernate.format_sql">true</property><!-- 格式化SQL語句 -->
		<property name="hibernate.hbm2ddl.auto">update</property><!-- 自動更新表,沒有就建立 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property><!-- 
			配置資料庫方言 -->

		<!-- 3 -->
		<mapping resource="orm/xml/Event.hbm.xml" />
	</session-factory>
</hibernate-configuration>
  • 4.測試是否成功
    新建測試類 dao.EventDaoTest
package dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.jupiter.api.Test;

import orm.entity.Event;

public class EventDaoTest {
	
	SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
	Session session = sessionFactory.openSession();
	
	@Test
	public void test01() {
		// 使用hql進行查詢,後面我會講到
		String hql = "from Event";
		Query<Event> query = session.createQuery(hql, Event.class);
		System.out.println(query.list());
	}
}
// 控制檯列印
Hibernate: 
    select
        event0_.id as id1_0_,
        event0_.date as date2_0_,
        event0_.title as title3_0_ 
    from
        Event event0_
[Event {id: 1, title: 標題一, date: 2018-12-23 13:55:49.0}, Event {id: 2, title: 標題二, date: 2018-12-23 13:55:49.0}, Event {id: 3, title: 標題三, date: 2018-12-23 13:55:49.0}]

配置成功

註解配置

  • 1.修改orm.entity.Event
package orm.entity;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "Event")
public class Event {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	private String title;

	@Temporal(TemporalType.TIMESTAMP)
	private Date date;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	/**
	 * 重寫toString 方便列印物件
	 */
	@Override
	public String toString() {
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.append("Event {" + "id: " + id + ", " + "title: " + title + ", " + "date: " + date + "}");
		return stringBuilder.toString();
	}

}
  • 2.修改hibernate.cfg.xml
<?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>
	<!-- 1. 配置資料庫資訊 -->
	<!-- 2. 配置Hibernate資訊 -->
	<!-- 3. 把對映檔案放到核心位置 -->
	<session-factory>
		<!-- 1 -->
		<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
		<property name="hibernate.connection.url"><![CDATA[jdbc:mysql://192.168.1.200:3306/Hibernate?useSSL=false]]></property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123456</property>

		<!-- 2 -->
		<property name="hibernate.show_sql">true</property><!-- 顯示SQL語句 -->
		<property name="hibernate.format_sql">true</property><!-- 格式化SQL語句 -->
		<property name="hibernate.hbm2ddl.auto">update</property><!-- 自動更新表,沒有就建立 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property><!-- 
			配置資料庫方言 -->

		<!-- 3 -->
		<mapping class="orm.entity.Event" />
	</session-factory>
</hibernate-configuration>
  • 3.測試連線
    執行EventDaoTest
// 控制檯輸出
Hibernate: 
    select
        event0_.id as id1_0_,
        event0_.date as date2_0_,
        event0_.title as title3_0_ 
    from
        Event event0_
[Event {id: 1, title: 標題一, date: 2018-12-23 13:55:49.0}, Event {id: 2, title: 標題二, date: 2018-12-23 13:55:49.0}, Event {id: 3, title: 標題三, date: 2018-12-23 13:55:49.0}]

專案地址

連結:https://pan.baidu.com/s/196kn4MhSr-qQjWmyNLXOkg
提取碼:56om