hibernate对数据库进行CRUD操作

package com.hibernate.test;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;

import com.hibernate.domain1.Person;

public class PersonTest {
	private static SessionFactory sessionFactory;
	// 静态代码块
	static {
		Configuration configuration = new Configuration();
		// 加载配置文件
		configuration.configure("hibernate.cfg.xml");
		// 创建服务器注册对象
		// 创建服务注册对象
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
				.applySettings(configuration.getProperties())
				.buildServiceRegistry();
		// 采用了工厂模式创建sessionFactory
		sessionFactory = configuration.buildSessionFactory(serviceRegistry);
	}

	@Test
	public void testSavePerson() {

		// 打开session
		Session session = sessionFactory.openSession();
		// 事务开始
		Transaction transaction = session.beginTransaction();
		Person person = new Person();
		// 由于在映射文件中已经说明主键的产生方式是hibernate内部产生,所以在程序中不用设置主键
		person.setPname("王大炮");
		person.setPsex("男");
		// 保存person对象到数据库中
		session.save(person);
		// 提交事务
		transaction.commit();
		// 关闭session
		session.close();
	}

	// 修改
	@Test
	public void testUpdatePerson() {
		// 打开session
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();

		/*
		 * 1.先把修改的那行提取出来 说明, Serializable是String和包装类共同的父类session.get(clazz,
		 * id);// clazz是字节码,id是Serializable,id=1L,则这个id的类型一定要和Person类中对应的类型匹配
		 * 那么把第二个参数定义为Serializable则好处是既能接受基本类型的包装类又可以接受string类
		 */
		// java的反射机制调用Java类的默认的构造函数,必须存在
		Person person = (Person) session.get(Person.class, 1L);// 1L代表是Long类型,这里的id类型要和Person类中对应的类型匹配
		person.setPsex("不详");
		session.update(person);
		transaction.commit();// 提交事务
		session.close();
	}

	// 查询 无需事务
	@Test
	public void testQuery() {
		Session session = sessionFactory.openSession();
		List<Person> personList = session.createQuery("from Person").list();

		System.out.println(personList.size());
	}

	// 删除,两种方式
	@Test
	public void testDelete() {
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// 方式一,先从中获取指定的id对象.推荐
		Person person = (Person) session.get(Person.class, 1L);
		session.delete(person);

		// 方式二,创建一个新的person对象
		// Person person2 = new Person();
		// person2.setPid(1L);
		// session.delete(person2);
		transaction.commit();
		session.close();
	}
}

注意:

只有查询操作无需事务干预,其他的三个(添加,修改,删除)需要事务干预

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝地反击T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值