Hibernate基础

一.批量插入,使用for循环可以方便的批量插入
  SessionFactory sf = new Configuration().configure().buildSessionFactory();

    Session s = sf.openSession();
    s.beginTransaction();

    for (int i = 0; i < 10; i++) {
        Product p = new Product();
        p.setName("iphone"+i);
        p.setPrice(i);
        s.save(p);         
    }

    s.getTransaction().commit();
    s.close();
    sf.close();
二.对象状态
  瞬时:指的是没有和hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,这个对象也就消失了 
  持久: 指得是一个对象和hibernate发生联系,有对应的session,并且在数据库中有对应的一条记录
  脱管:指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的session已经关闭了
    Product p = new Product();
    p.setName("p1");
    System.out.println("此时p是瞬时状态");
    s.save(p);
    System.out.println("此时p是持久状态");
    s.getTransaction().commit();
    s.close();
    System.out.println("此时p是脱管状态");
三.通过id获取对象
     Product p =(Product) s.get(Product.class, 6);
    //需要传递一个类对象,毕竟需要知道获取的是哪个对象
    //除了get之外还可以使用load获取对象
     System.out.println("id=6的产品名称是: "+p.getName());
四.根据id把对象删除掉
   注意:hibernate在删除一条数据之前,先要通过id把这条记录取出来
     Product p =(Product) s.get(Product.class, 5);
    s.delete(p);
五.修改一个对象的属性,并更新到数据库
Product p =(Product) s.get(Product.class, 6);//根据id获取该对象
     
    System.out.println(p.getName());
     
    p.setName("iphone-modified");
     //修改该对象的属性
    s.update(p);
    //通过session的update方法把变化更新到数据库中
六.HQL(Hibernate Query Language)
hibernate专门用于查询数据的语句
有别于SQL,HQL更接近面向对象的思维方式
    String name = "iphone";
    Query q =s.createQuery("from Product p where p.name like ?");
   //注意前面没有select *,不需要,用的是类名Product而不是表product_
   //首先根据hql创建一个Query对象
    q.setString(0, "%"+name+"%");
   //设置参数,这里基0,根据name进行模糊查询
    List<Product> ps= q.list();
  //通过Query对象的list()方法即返回查询的结果了
    for (Product p : ps) {
        System.out.println(p.getName());
    }
七.Criteria进行数据查询
 完全是面向对象的方式进行数据查询
 将不再看到有sql语句的痕迹
String name = "iphone";        
    Criteria c= s.createCriteria(Product.class);
//1. 通过session的createCriteria创建一个Criteria 对象
    c.add(Restrictions.like("name", "%"+name+"%"));
 //2. Criteria.add 增加约束。 在本例中增加一个对name的模糊查询(like)
    List<Product> ps = c.list();
 //3. 调用list()方法返回查询结果的集合
    for (Product p : ps) {
        System.out.println(p.getName());
    }
 除此之外,Criteria还可以很方便的进行分页查询和获取总数
八.标准SQL查询
多表联合查询并且有分组统计函数的情况下效率较高
 String name = "iphone";
     
    String sql = "select * from product_ p where p.name like '%"+name+"%'";
     
    Query q= s.createSQLQuery(sql);
   //使用Session的createSQLQuery方法执行标准SQL语句
    List<Object[]> list= q.list();
   //因为标准SQL语句有可能返回各种各样的结果
   //比如多表查询,分组统计结果等等。 
   //不能保证其查询结果能够装进一个Product对象中
   //所以返回的集合里的每一个元素是一个对象数组
  //然后再通过下标把这个对象数组中的数据取出来。
    for (Object[] os : list) {
        for (Object filed: os) {
            System.out.print(filed+"\t");
        }
        System.out.println();
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容

  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 1,963评论 0 27
  • 本文包括:1、Hibernate 的查询方式2、HQL (Hibernate Query Language) 查询...
    廖少少阅读 2,656评论 0 15
  • Hibernate_缓存&事务&批量查询概述 一、 Hibernate的持久化类 持久化类是指一个Java类和数据...
    明天你好向前奔跑阅读 508评论 0 10
  • 状态:修改,修改更新中 目录: 一,逻辑的基本认识与学习方法 1.1 逻辑的概念:思维的规律 1.2 逻辑学重要性...
    lemonTreeTop阅读 5,709评论 1 58
  • 1.你觉得读书的意义是什么? 读书让我了解更多的人、情、物、事,保持积极的心态,能让我感觉到自己是“新鲜”的。 2...
    a41183c0fde2阅读 147评论 0 0