Hibernate中对增删改查的小结
Hibernate中对增删改查的小结
mysql中库表News,字段如下
id????? |? int???? |? auto_increment? |? primary key
title?? |? varchar
content |? varchar
date??? |? varchar
1:Hibernate的insert操作
????????Session session = HibernateSessionFactory.getSession();
????????
????????News news = new News();
????????news.setContent("my content");
????????news.setTitle("my title");
????????news.setDate("my date"); //news是VO
????????
????????Transaction trans = session.beginTransaction();
????????session.save(news); //news是PO
????????trans.commit();???? //任何有关数据库更新的操作都是commit后进数据库的
??? ??? HibernateSessionFactory.closeSession();
????????Session session = HibernateSessionFactory.getSession();
????????News news = new News();
????????news.setId(103);? //id不可少,Hibernate只通过id来查找数据库
????????news.setContent("update content");
????????news.setTitle("update title");
????????
????????Transaction trans = session.beginTransaction();
????????session.update(news);
????????trans.commit();
??? ??? HibernateSessionFactory.closeSession();
????????Session session = HibernateSessionFactory.getSession();
????????Transaction trans = session.beginTransaction();
????????News news = (News)session.get(News.class, 103);? //*****(1)
????????news.setDate("update date");? //*****(2)
????????session.save(news);? //*****(3)
????????trans.commit();
??? ??? HibernateSessionFactory.closeSession();
????????Session session = HibernateSessionFactory.getSession();
????????Transaction trans = session.beginTransaction();
????????News news = new News();
????????news.setId(8);? //用下面那句效果一样,只是多了句select
//????? News news = (News)session.get(News.class, 8);
????????session.delete(news);
????????trans.commit();
??? ??? HibernateSessionFactory.closeSession();
??? ??? Session session = HibernateSessionFactory.getSession();
????????String hql = "delete Billdetail where name>'detailName1'";
????????Query query = session.createQuery(hql);
????????int ref = query.executeUpdate();
????????session.beginTransaction().commit();
????????System.out.println("delete dates=>"+ref); //操作条数
????????session.close();
????????Session session = HibernateSessionFactory.getSession();
????????Criteria c = session.createCriteria(News.class);//News是类,所以N大写
????????c.add(Expression.lt("date", "date5"));
????????c.add(Expression.between("date", "date1", "date8"));
????????c.addOrder(Order.desc("date"));
????????List<News> list = c.list();
????????for(int i=0;i<list.size();i++)
????????{
????????????System.out.println(list.get(i).getId()+":"+list.get(i).getDate());
????????}
??? ??? HibernateSessionFactory.closeSession();
????????Query query = session.createQuery("from News ");
????????List<News> list = query.list();? //遍历同上
????????Session session = HibernateSessionFactory.getSession();
????????Query query = session.createQuery("select n.id,n.title,u.username from News as n,User u");
????????List list = query.list();//这里每一行都是一个1维数组
????????for(int i=0;i<list.size();i++)
????????{
????????????Object []o = (Object[])list.get(i);? //转型为数组
????????????int id = (Integer)o[0];? //和select中顺序的类型相对应,可以是类
????????????String title = (String)o[1];
????????????String username = (String)o[2];
????????????System.out.println("id:"+id+" , "+"title"+title+" , "+username);
????????}
??? ??? HibernateSessionFactory.closeSession();
(Integer)session.createQuery("select count(*) from User").iterate().next();
????????List<News> list = session.createSQLQuery("select * from News").addEntity(News.class).list();?
SQLQuery query = session.createSQLQuery("select id,title from News");
????????query.addScalar("id", Hibernate.INTEGER); ?//注册字段类型,同下
????????query.addScalar("title",new org.hibernate.type.StringType());
????????List list = query.list();
????????for(int i=0;i<list.size();i++)
????????{
????????????Object[] o = (Object[])list.get(i);
????????????int id = (Integer)o[0];
????????????String title = (String)o[1];
????????????System.out.println("id:"+id+" , title:"+title);
????????}
????????Session session = HibernateSessionFactory.getSession();
????????Transaction trans = session.beginTransaction()
????????Query query = session.createQuery("from room in class Room where room.name=:a")
????????query.setParameter("a", "room1");? //和prepareStatement相似
??? ??
//???? Room room1 = new Room();?
//???? room1.setName("room1");? ??
//???? Query query = session.createQuery("from room in class Room where room.name=:name");? //如果用javabean设置参数来查询,=:name的name一定和Room中对应
//???? query.setProperties(room1);
???????
????????List<Room> list = query.list();
????????for(int i=0;i<list.size();i++)
????????{
????????????System.out.println(list.get(i).getName()+":"+list.get(i).getDescription());
????????}
????????
????????trans.commit();
????????HibernateSessionFactory.closeSession()