Hibernate学习-04:CRUD(增删改查)操作之根据主键查询

上一讲的入门案例,我们使用了Hibernate框架的添加功能,此处不再赘述。这一讲我们继续介绍Hibernate的查询、更新、删除操作。

准备工作:实体类、数据库准备同上一讲入门案例

1、查询

1.1:按照主键进行查询

对于这种情况,Hibernate提供了两个方法:get()、load()

修改实体类,添加toString()方法:

package com.js.demo2;

public class Customer {
	private int id; 
 	private String name;
 	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", age=" + age + "]";
	}	
}
修改测试类:添加一个测试方法(get()方法)

@Test
	//按照id来进行查询
	public void demo2(){
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction tx = session.beginTransaction();
		Customer customer=(Customer)session.get(Customer.class, 1);
		System.out.println(customer);
		tx.commit();
		session.close();
		sessionFactory.close();
	}
运行测试:


修改测试类:添加一个测试方法(load()方法)

public void demo3(){
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction tx = session.beginTransaction();
		Customer customer=(Customer)session.load(Customer.class, 1);
		System.out.println(customer);
		tx.commit();
		session.close();
		sessionFactory.close();
	}
运行测试:

看查询结果,好像看不出get()、load()二者有什么区别。

*****get load的区别:(面试题)

* 1.发送SQL的时机:

* load这个方法采用了一个技术.lazy延迟加载(懒加载).真正使用这个对象的数据的时候.(对象的数据不包括主键).

* get这个方法是立即检索.当执行session.get()方法的时候,马上发送SQL语句查询.

 

* 2.返回的对象:

* load方法返回的是代理对象.

* get方法返回的是真实的对象.

 

* 3.查询一个不存在的数据:

* load方法抛异常:ObjectNotFoundException.

* get方法抛异常:NullPointException.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值