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();
|
2:Hibernate的update操作
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();
|
注意这里我们更新数据不想对date进行更新,所以没写 setDate ,但Hibernate会认为我们是想把date设置为null,所以如果要更新表中一些字段,最好用下面的方法。
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();
|
这里其实对数据库进行了两次操作,(1)时从数据库中把相应纪录查找出来,这里news是一个PO,(2)对PO进行date的更新,其他数据没变,然后(3)保存,由于(1)查出的数据就有title,content,所以保存时候title和content都不会是null。
3:Hibernate的delete操作
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();
|
注意,只能通过id来删除数据,不能通过title或content来删除,会报缺少标示符错误。
使用hql来删除(可作批量删除)
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();
|
4:Hibernate的select操作Hibernate的select操作非常丰富,这里写常用的:
1.criteria查询
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();
|
比较符合面向对象的概念,因为库表和JAVA类已经作了映射关系,注意Hibernate的所有操作都是针对JAVA类的,而不是库表,所以要区分大小写。
上面的查询相当于sql是:
select * from news where date < 'date5' and date BETWEEN 'date1' and 'date8' ORDER by date desc;
2.HQL查询
Query query = session.createQuery("from News "); List<News> list = query.list(); //遍历同上
|
HQL是Hibernate主推的查询方式,和普通SQL语句也比较接近,但很重要一点不同就是
HQL中from后面的是JAVA类名,不是库表名,切忌!!!其它就是如果查询全字段 "select *" 可以省略不写。
当不是查询全字段,或者是从两张表中联合查询数据时,返回的是一个数组:
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();
|
查询结果集的大小(和Hibernate2中稍微有点不同)
(Integer)session.createQuery("select count(*) from User").iterate().next();
|
3.SqlQuery查询
List<News> list = session.createSQLQuery("select * from News").addEntity(News.class).list();
|
addEntity 不能忘记,这种查询方式是把查询好的结果放到一个实体中,再遍历操作,不推荐使用。
SqlQuery查询一些字段时候用
addScalar:
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); }
|
javabean的属性可以作为命名的查询参数(HQL)
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()
|
相关推荐
Hibernate+struts 增删改查
spring4+hibernate4实现的增删改查,有完整的配置和jar包,使用的是mysql数据库,需要自己创建表
因项目还在开发,所以本人只拿出一块单独的struts+hibernate增、删、改、查来演示,具体的一些包一看就知道; 项目直接在MyEclipse6.0运行,环境是里面自带的,用过的人都知道。本人测试没有问题。 具体的页面...
hibernate_10增删改查DAO
myeclipse+mysql+hibernate+struts2增删改查,中国人民银行企培源代码,亲测可用。
自己写的Struts2+Hibernate的整自己写的Struts2+Hibernate的整合小项目,里面有对一张表的增删改查合小项目,里面有对一张表的增删改查
spring+struts2+hibernate框架,一个简单的双表增删改查操作 方便初学者入门 ,简单上手
accp7.0项目的测试hibernate增删改查
hibernate 增删改查
这里使用hibernate+strtus做的一个增删改查,特别试用刚开始学习这个技术的新的朋友。数据库使用的是mysql.这个例子是用户和部门之间的一个小的查询。有一个关联。
本人使用hibernate框架写的增删改查。仅供新手学习hibernate框架是参考
hibernate+struts实现jsp增删改查分页! hibernate实现对数据库的操作,struts实现对表单的操作! 实现了分页功能! (注:本本项目中文会出现乱码,我还没有解决!附有数据库文件!)
hibernate5增删改查小例子,使用maven构建,需要用maven进行导入,仅供参考,相关博客http://blog.csdn.net/oppo5630/article/details/52315205
为简单起见,只建了一张数据表,模拟对一张表的 增 删 改 查 等Web开发常用的技术 适合刚接触hibernate+spring的java开发者
实现struts2和hibernate结合对数据库进行增删改查
Spring与Hibernate整合实例(博客用户登录增删改查)
使用struts+Hibernate+MySQL框架在MyEclipse6.5中实现增删改查
使用Hibernate实现增删改查,将我们需要的dialect.class的值复制粘贴到我们自己建的文件中 url,username,password 的值就用之前我们讲过的即可; 配置文件中的 <property name="show_sql">true</property> 是为了在...