Hibernate 教程(三)[Hibernate对象的操作,对象CURD操作(增删改查)]

本文详细介绍了一个利用Hibernate框架进行数据库操作的实例,包括如何通过封装Session工具类简化Session获取过程,以及如何实现数据的增删改查操作。通过具体代码示例,展示了如何使用HQL查询语言,以及Hibernate在插入、更新、删除和查询数据时的具体行为。

准备

因为测试学习的时候我们每次建一个类都需要获取Session,很麻烦。所以要把获取Session的方法封装成一个工具类

package uitl;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * Session工具类
 * @author LiHan
 *
 */
public class SessionUtil {
	
	/**
	 * 获取Session
	 */
	public static Session getSession() {
		SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
		Session session = sessionFactory.openSession();
		return session;
	}
}

增删改查

package dao;

import java.util.Date;


import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.junit.jupiter.api.Test;

import orm.entity.Event;
import uitl.SessionUtil;

public class EventDaoTest {
	
	Session session = SessionUtil.getSession();
	
	Transaction transaction = session.beginTransaction();
	
	/**
	 * 查询所有
	 */
	@Test
	public void test01() {
		// 使用hql进行查询,后面我会讲到
		String hql = "from Event";
		Query<Event> query = session.createQuery(hql, Event.class);
		System.out.println(query.list());
	}
	
	/**
	 * 添加一条数据
	 */
	@Test
	public void addTest() {
		Event event = new Event();
		event.setTitle("标题四");
		event.setDate(new Date());
		session.save(event);
		test01();
		transaction.commit();
	}
	
	/*
		Hibernate: 
		    insert 
		    into
		        Event
		        (date, title) 
		    values
		        (?, ?)
		十二月 23, 2018 10:47:02 上午 org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
		INFO: HHH000397: Using ASTQueryTranslatorFactory
		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}, Event {id: 4, title: 标题四, date: Sun Dec 23 10:47:02 CST 2018}]

	 */
	
	/**
	 * 删除数据
	 */
	@Test
	public void deleteTest() {
		Event event = session.get(Event.class, Long.valueOf("4"));
		session.delete(event);
		test01();
		transaction.commit();
	}
	
	/*
		Hibernate: 
		    select
		        event0_.id as id1_0_0_,
		        event0_.date as date2_0_0_,
		        event0_.title as title3_0_0_ 
		    from
		        Event event0_ 
		    where
		        event0_.id=?
		十二月 23, 2018 11:05:23 上午 org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
		INFO: HHH000397: Using ASTQueryTranslatorFactory
		Hibernate: 
		    delete 
		    from
		        Event 
		    where
		        id=?
		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}]

	 */
	
	/**
	 * 修改数据
	 */
	@Test
	public void updateTest() {
		Event event = session.get(Event.class, Long.valueOf("3"));
		event.setTitle("修改的标题");
		session.update(event);
		test01();
		transaction.commit();
	}
	
	/*
	Hibernate: 
	    select
	        event0_.id as id1_0_0_,
	        event0_.date as date2_0_0_,
	        event0_.title as title3_0_0_ 
	    from
	        Event event0_ 
	    where
	        event0_.id=?
	十二月 23, 2018 11:07:58 上午 org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
	INFO: HHH000397: Using ASTQueryTranslatorFactory
	Hibernate: 
	    update
	        Event 
	    set
	        date=?,
	        title=? 
	    where
	        id=?
	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}]
	*/
	
	/**
	 * 查找数据
	 */
	@Test
	public void selectTest() {
		Event event = session.get(Event.class, Long.valueOf("3"));
		System.out.println(event);
	}
	
	/*
	Hibernate: 
	    select
	        event0_.id as id1_0_0_,
	        event0_.date as date2_0_0_,
	        event0_.title as title3_0_0_ 
	    from
	        Event event0_ 
	    where
	        event0_.id=?
	Event {id: 3, title: 修改的标题, date: 2018-12-23 13:55:49.0}
	*/
}

进一步深入了解

基本的增删改查就是这些,写完这些代码需要去查看一下的session对像管理的几种状态,并且了解到一级缓存
https://www.cnblogs.com/xiaoluo501395377/p/3380270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值