准备
- 数据库建表(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