关键代码:

saveOrUpdate()

    1.有id就执行update,如果id在数据库中不存在会抛出异常

    2.无id就执行insert。

delete()

    删除记录,如果数据库中记录不存在会抛出异常。

doWork()

    获取hibernate底层的connection对象进行框架做不到的操作,例如调用存储过程


详细代码:

package com.shuoeasy.test;

import java.sql.Connection;
import java.sql.SQLException;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


/**
 * Unit test for simple App.
 */
public class AppTest {
	Session session;
	SessionFactory sf;

	@Before
	public void init() {

		Configuration conf = new Configuration().configure();

		ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();

		sf = conf.buildSessionFactory((org.hibernate.service.ServiceRegistry) sr);

		session = sf.openSession();

		session.beginTransaction();
		System.out.println("init");
	}

	@After
	public void destory() {
		session.getTransaction().commit();

		session.close();

		sf.close();
		System.out.println("dectory");
	}

	/**
	 * 1.有id就执行update,如果id在数据库中不存在会抛出异常。
	 * 2.无id就执行insert。
	 */
	@Test
	public void testSaveOrUpdate() {
		News news1 = new News("标题","内容");
		
		news1.setId(123);
		session.saveOrUpdate(news1);
	}
	
	/**
	 * 删除记录
	 * 如果数据库中记录不存在会抛出异常
	 */
	@Test
	public void testDelete(){
		// 删除持久化对象
		News news1 = (News) session.get(News.class, 52);
		session.delete(news1);
		
		// 也可以删除游离对象
		News news2 = new News("标题","内容");
		news2.setId(53);
		session.delete(news2);	
	}
	
	/**
	 * hibernate没有直接调用存储过程的api,只能先通过获取connection方式,
	 * 用自己的代码实现
	 */
	@Test
	public void testDoWork(){
		// 使用doWork 里面写上内部类
		session.doWork(new Work() {
			
			@Override
			public void execute(Connection connection) throws SQLException {
				System.out.println(connection);
				// 这里实现调用存储过程代码
			}
		});
	}
	
}


你可能感兴趣的文章