关键代码:
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); // 这里实现调用存储过程代码 } }); } }