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

猜你喜欢

转载自blog.csdn.net/God_Father_kao/article/details/85219669
今日推荐