Hibernate 教程(二)[Hibernate物件的操作,xml配置,註解配置]
阿新 • • 發佈:2018-12-23
準備
- 資料庫建表(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();
}
}
- 新建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