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();

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();
 
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()

转载于:https://www.cnblogs.com/qinqinmeiren/archive/2010/09/06/2151709.html

Hibernate中对增删改查的小结相关推荐

  1. Hibernate简单实现增删改查

    Hibernate简单实现增删改查 2020.08.10 用了一下午时间入门了Hibernate给和我一样想学的小白分享一下 hibernate是一个对象关系映射框架 它对jdbc进行了封装只需要调用 ...

  2. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  3. SqlServer 中的增删改查语句的语法

    一.增删改查SQL语法: 1.查询语句 第一种法方: select 列名 from table(数据库表名) where(条件) 第二种法方: select *(表示所有的列) from table( ...

  4. 巨杉数据库SequoiaDB在Java开发中的增删改查CURD

    文章目录 JSON应用开发 增删改查操作 1 快速入门 1.1 环境部署 部署SequoiaDB集群环境 部署Windows开发环境 1.2 正式开始 2 CURD教程 2.1 Java开发环境搭建 ...

  5. AngularJS 实现管理系统中的增删改查

      前 言 AngularJS 在一个管理系统中,不外乎都是增删改查. 现在有如下图书管理系统,实现简单的增删改查. 需要用到bootstrap.css .angular.js和angular-rou ...

  6. mysql查看修改记录_(转)MySql中监视增删改查和查看日志记录

    转载地址为:http://blog.51cto.com/hades02/1641652 首先在命令行输入 show global variables like '%general%' ,然后出现下面的 ...

  7. mysql中的增删改查

    显示数据库中有的表格 SHOW TABLES 增 新建表格 CREATE TABLE urls( id int, url varchar(100), description varchar(100) ...

  8. ci php做记录删除,CI(CodeIgniter)框架中的增删改查操作_PHP教程

    CodeIgniter的数据函数类在 \system\database\DB_active_rec.php 代码如下: class ModelName extends CI_Model { funct ...

  9. 中去掉外键_【Java笔记】035天,MySQL中的增删改查

    学习Java的第35天. 今天天除了学习MySQL中的各种约束,MySQL中DML的操作,还有MySQL查询语句ds-- MySQLdz中d的约束有: • 非空约束(not null) • 唯一性约束 ...

最新文章

  1. 018对象——对象 get_class get_declared_classes get_declared_interfaces
  2. 如何使用VIM的Help
  3. python123九宫格输入法_《啊哈C语言-2016最新修正版》.pdf
  4. 简历避免采坑总结——为什么你的简历杳无音信?程序员的简历该怎么写?看这一篇就够了!毕业生快进 (待更新)
  5. 百度云域名解析如何添加? - [未完待续]
  6. JAVA中的GUI---swing 和awt
  7. php中引用的真正理解-变量引用、函数引用、对象引用
  8. Windows动态桌面原理
  9. 服务器虚拟机迁移的6个步骤,vmware 虚拟机迁移
  10. 鼠标移上提示框 提示框不消失
  11. 【无标题】互联网广告投放优势和前景
  12. win7浏览器IE9升级到IE10后无法启动的问题
  13. 用 python 绘制玫瑰花
  14. iOS静态库SDK制作(包含第三方静态库)
  15. el表达式找不到属性的错误修改方法(`javax.el.PropertyNotFoundException: 类型[java.lang.String]上找不到属性[book])
  16. Integer关于equals与==的比较(自动拆装箱技术和常量池技术)
  17. 互联网晚报 | 11月8日 星期一 | 美团外卖公开“订单分配”算法规则;英雄联盟首部动画剧集上线;神舟十三号航天员首次出舱...
  18. MySQL 中 You can‘t specify target table ‘表名‘ for update in FROM clause解决办法
  19. 网络知识入门,什么是以太网包,TCP/IP包,MAC头部,IP头部以及TCP头部(六)
  20. 第二周 Day 3—— Python容器

热门文章

  1. Fedora telnet配置
  2. UltraEdit中高亮显示verilog HDL关键词
  3. waf可以检测哪个端口的流量_锐速云:CC防御过程中,WAF的主要特点有哪些?
  4. java和python混合编程_浅谈C++与Java混合编程
  5. python 函数递归_Python零基础之三元表达式、函数递归、匿名函数教程!超级详细!...
  6. 非法的表达式开始_轮回、开始还是结束?
  7. DDG全家桶之3022
  8. axios发送自定义请求头的跨域解决
  9. Python3 matplotlib的绘图函数subplot()简介
  10. 乐尚网络:小程序商城零售行业10大新赋能