Hibernate入门学习【二】

Hibernate的主要对象

Configuration

作用:每个HIbernate配置文件对应一个Configuration对象,用于定位映射文件与核心配置位置。

  • 使用hibernate.properties作为配置文件,需要添加映射文件。
	Configuration cfg = new Configuration();
	//调用addResource()方法,添加映射文件 
	cfg.addResource("Item.hbm.xml") 

  • 使用hibernate.cfg.xml作为配置文件,由于在配置文件中已经配置过映射文件,所以不需要再次添加映射文件
	Configuration cfg = new Configuration().configure();
			

SessionFactory:session工厂

初始化Hibernate,作为提取hibernate的工具类,负责创建Session对象。由于SessionFactory是线程安全的,所以可以定义为全局,初始化一次就足够了。当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

	//加载核心配置文件
	Configuration configuration=new Configuration().configure();
	//创建sessionfactory类似于JDBC的连接池
	SessionFactory sessionFactory=configuration.buildSessionFactory();

Session

Session是与数据库交互的桥梁,类似于我们之前接触过的connection作为连接对象的作用,但是它是非线程安全的,即一个Session实例同时只可由一个线程使用,同一个Session实例的多线程并发调用将导致难以预知的错误,所以只能作为局部变量。
它提供了众多持久化方法,如save、update、delete等,相应的完成对象的增加、删除、修改、查找等操作。

	//加载核心配置文件
	Configuration configuration=new Configuration().configure();
	//创建sessionfactory类似于JDBC的连接池
	SessionFactory sessionFactory=configuration.buildSessionFactory();
	//获取session对象 相当于Connection
	Session session=sessionFactory.openSession();

主要API

  • save 保存

  • load/get 查询
    特别注意get与load的区别
    get: 立即加载,马上发送SQL语句;不存在对象时返回null
    load: 延迟加载,使用对象时才发送SQL语句;不存在对象时,抛异常返回 ObjectNotFooundException

  • update 修改
    a. 创建对象后修改
    b. 查询后修改

  • delete 删除
    a. 创建对象后删除
    b. 查询后删除

  • saveOrUpdate 保存或者更新(不常用)

  • 查询所有
    a. 接受HQL

    	Query query=session.createQuery("from Customer");
    	List<Customer> list=query.list();
    

    b. 接受SQL

    	SQLQuery query=session.createSQLQuery("selsct * from cst_customer");
    	List<Object[]> list=query.list();
    

简单实例

@Test
	//保存
	public void demo1(){
		Session session=HibernateUtils.openSession();
		Transaction tx=session.beginTransaction();
		Customer customer=new Customer();
		customer.setCust_name("小西");
		Serializable id = session.save(customer);
		System.out.println(id);
		
		tx.commit();
		session.close();
	}
	
	@Test
	//查询
	public void demo2(){
		Session session=HibernateUtils.openSession();
		Transaction tx=session.beginTransaction();
		//get查询
		//Customer customer= session.get(Customer.class, 1l);
		//System.out.print(customer);
		//load查询
		Customer customer= session.load(Customer.class, 1l);
		System.out.print(customer);
		tx.commit();
		session.close();
	}
	
	@Test
	//修改
	public void demo3(){
		Session session=HibernateUtils.openSession();
		Transaction tx=session.beginTransaction();
		//创建对象后修改
		/*
		Customer customer=new Customer();
		customer.setCust_id(1l);
		customer.setCust_name("小明");
		session.update(customer);
		*/
		//直接查询后修改
		Customer customer=session.get(Customer.class, 1l);
		customer.setCust_name("小花");
		session.update(customer);
		tx.commit();
		session.close();
	}
	
	@Test
	//删除
	public void demo4(){
		Session session=HibernateUtils.openSession();
		Transaction tx=session.beginTransaction();
		//创建对象后修改
		/*
		Customer customer=new Customer();
		customer.setCust_id(2l);
		session.delete(customer);
		*/
		//先查询后删除
		Customer customer=session.get(Customer.class, 2l);
		session.delete(customer);
		tx.commit();
		session.close();
	}
	
	
	@Test
	//保存或跟新
	public void demo5(){
		Session session=HibernateUtils.openSession();
		Transaction tx=session.beginTransaction();
		Customer customer=new Customer();
		customer.setCust_id(2l);
		customer.setCust_name("lisa");
		session.saveOrUpdate(customer);
		tx.commit();
		session.close();
	}
	
	@Test
	//查询所有
	public void demo6(){
		Session session=HibernateUtils.openSession();
		Transaction tx=session.beginTransaction();
		//接受HQL
		/*
		Query query=session.createQuery("from Customer");
		List<Customer> list=query.list();
		for(Customer customer:list){
			System.out.println(customer);
		}*/
		//接受SQL
		SQLQuery query=session.createSQLQuery("selsct * from cst_customer");
		List<Object[]> list=query.list();
		for(Object[] objects:list){
			System.out.println(Arrays.toString(objects));
		}
		
		tx.commit();
		session.close();
	}

Transaction 事务

常用方法:
commit():提交
rollback():回滚

		//加载核心配置文件
		Configuration configuration=new Configuration().configure();
		//创建sessionfactory类似于JDBC的连接池
		SessionFactory sessionFactory=configuration.buildSessionFactory();
		//获取session对象 相当于Connection
		Session session=sessionFactory.openSession();
		//手动开启事务
		Transaction transaction=(Transaction) session.beginTransaction();
		//编写代码
		Customer customer=new Customer();
		customer.setCust_name("王有二");
		session.save(customer);
		//提交事务
		transaction.commit();
		//资源释放
		session.close();
		sessionFactory.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值