首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate 容易CRUD操作

2012-11-15 
hibernate 简单CRUD操作首先我们要搭建好hibernate的开发环境我是在Eclipse下搭建的建立javaProject下载hi

hibernate 简单CRUD操作
首先我们要搭建好hibernate的开发环境  我是在Eclipse下搭建的
    建立javaProject
   下载hibernate3.2
   加入jar包
   从下载过来的hibernate3.2文件中COPY一份hibernate.cfg.xml 写上你的数据库配置
   搭建日志环境.


hibernate中对实体的CRUD操作 建立了两个实体类 其关系在数据库中是ManyToMany的两张表
pojo:Person

package com.test.testBean;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Set;import javax.transaction.HeuristicMixedException;import javax.transaction.HeuristicRollbackException;import javax.transaction.RollbackException;import javax.transaction.SystemException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.tool.hbm2ddl.SchemaExport;import com.test.bean.Friend;import com.test.bean.Person;public class TestPerson {private static SessionFactory sessionFactory;private static Transaction ts;private Date date = new Date();/** * 构造方法 里面 创建sessionFactory */public  TestPerson(){@SuppressWarnings("unused")Session session = null;try{/** SchemaExport 每次都会将表的数据清空*///new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);//sessionFactorysessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();System.out.println("创建sessionFactory成功");}catch(Exception e){e.printStackTrace();System.out.println("创建sessionFactory出错");}finally{}}/** * @param args * @throws Exception  */public static void main(String[] args) throws Exception {TestPerson tp = new TestPerson();//tp.addPF();//tp.query();//tp.update();tp.testRemove();}/** * 填充数据 * @throws Exception  */public void addPF() throws Exception{Person p = new Person();Friend f = new Friend();p.setBirthday(date);p.setPassword("fffff");p.setUserName("fff");//---------=============-------------------f.setfName("FFFFFF");f.setfPass("FFFFFFF");this.save(p, f);}/** * 建立关系 并且保存到数据库 * @param p person对象 * @param f friend 对象 * @return boolean */public void save(Person p,Friend f)throws Exception{p.getFriend().add(f);/** * 这里需要注意下 如果你的f是被控方  那么在save的时候 能save两张表的数据 但是不能建立关系 * 即中间表中没有数据 */Session session = sessionFactory.getCurrentSession();org.hibernate.Transaction ts = session.beginTransaction();// session.save(f);//session.persist(arg0)try{session.save(p);System.out.println("保存成功");ts.commit();}catch (Exception e) {e.printStackTrace();System.out.println("保存失败");ts.rollback();}}/** * 查询数据 * @throws SecurityException * @throws IllegalStateException * @throws RollbackException * @throws HeuristicMixedException * @throws HeuristicRollbackException * @throws SystemException */@SuppressWarnings({ "unchecked", "static-access"})public void query() throws SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException, SystemException{/**定义hql*/String hql="from Person";/**获得session*/Session session = this.sessionFactory.getCurrentSession();/**开始事务*/ts = (Transaction) session.beginTransaction();/**执行hql语句*/Query query = session.createQuery(hql);/**定义一个list来存放数据*/List<Person>list = new ArrayList<Person>();list = query.list(); /**遍历LIST*/for(Person p: list){System.out.println(p.getPassword());System.out.println(p.getUserName());}/**事务提交*/ts.commit();/**关闭session ts*/this.closeSession(session, ts);}/** * 根据ID查询出对象--person * @param personId * @return */@SuppressWarnings("static-access")public Person queryPersonById(int queryId,String queryHql){Session session = this.sessionFactory.getCurrentSession();ts = (Transaction) session.beginTransaction();Query query = session.createQuery(queryHql);query.setInteger(0, queryId);Person person =(Person) query.list().get(0);return person;}/** * 根据ID查询出对象--friend * @param personId * @return */@SuppressWarnings("static-access")public Friend queryFriendById(int queryId,String queryHql){Session session = this.sessionFactory.getCurrentSession();ts = (Transaction) session.beginTransaction();Query query = session.createQuery(queryHql);query.setInteger(0, queryId);Friend friend =(Friend) query.list().get(0);return friend;}/** * 更新对象 * @throws Exception */@SuppressWarnings("static-access")public void update()throws Exception{/**首先查询出对象*///定义查询语句String queryHql="from Person p where p.personId=?";Person person = queryPersonById(5,queryHql);person.setPassword("update--paw123");person.setUserName("update--pserson--Lyvee");Session session = this.sessionFactory.getCurrentSession();ts=session.beginTransaction();try{session.update(person);ts.commit();System.out.println("更新成功!!!");}catch(Exception e){e.printStackTrace();//事务回滚ts.rollback();System.out.println("更新出错啦!!!");}finally{this.closeSession(session, ts);}}/** * 删除方法---通过person删除 * @param person * @throws Exception */@SuppressWarnings("static-access")public void del(Person person)throws Exception{Session session = this.sessionFactory.getCurrentSession();ts=session.beginTransaction();try{/**在此 由于我把person配置成了主控制方 故此删除person 由于没有配置联级删除故此被控方Friend仍然会存在 但是中间表记录会删除----关系不存在*/session.delete(person);ts.commit();System.out.println("删除成功!");}catch(Exception e){e.printStackTrace();//回滚事务ts.rollback();System.out.println("删除失败");}finally{this.closeSession(session, ts);}}public void del(Friend friend){Session session = this.sessionFactory.getCurrentSession();ts=session.beginTransaction();try{/**这里由于friend是被控方 直接删除friend 会报错  我们应该首先断关系 然后delete*/Set<Person> persons = friend.getPerson();for(Person person :persons){person.getFriend().remove(friend);}session.delete(friend);ts.commit();System.out.println("删除成功");}catch (Exception e) {e.printStackTrace();System.out.println("删除失败");ts.rollback();}finally{this.closeSession(session, ts);}}/** * 测试删除的方法 * @throws Exception */public void testRemove() throws Exception{Session session = this.sessionFactory.getCurrentSession();ts=session.beginTransaction();/**根据ID查询出person对象*///Person person = (Person) session.get(Person.class,1);Friend friend = (Friend) session.get(Friend.class, 4);//del(person);del(friend);}/** * session transacation 关闭 * @param session * @param ts * @return boolean */public boolean closeSession(Session session,Transaction ts){if(ts!=null){ts=null;}return false;}}

热点排行