Hibernate学习笔记(三):数据库操作

19 篇文章 0 订阅
10 篇文章 0 订阅

1.通过Hibernate批量插入数据
s.save()

修改测试用例TestHibernate.java

package com.how2java.test;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; 
import com.how2java.pojo.Product;
 
public class TestHibernate {
    public static void main(String[] args) {
 
        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();
    } 
}

为了简化,之后的修改部分只贴出s.beginTranscation();和s.getTransaction().comit();之间的内容

2.通过id获取对象
s.get()

调用Session的get()方法,根据id获取对象。

 Product p =(Product) s.get(Product.class, 6);
          
        System.out.println("id=6的产品名称是: "+p.getName());

第一个参数为获取的对象的类,第二个参数为对象的id

3.删除一条数据
s.delete()
根据id把对象从表里删除掉 

Product p =(Product) s.get(Product.class, 5);
        s.delete(p);

注意:hibernate在删除一条数据之前,先要通过id把这条记录取出来

4.修改(更新)一个对象
s.update()

把id=6的产品名称修改为 iphone-modifed

        Product p =(Product) s.get(Product.class, 6);
        p.setName("iphone-modified");
        s.update(p);
  • 根据id获取该对象
  • 修改该对象的属性
  • 通过Session的update()方法把变化更新到数据库中

5. 使用HQL进行查询
HQL(Hibernate Query Language)是hibernate专门用于查询数据的语句,有别于SQL,HQL 更接近于面向对象的思维方式。

import org.hibernate.Query;
 
        String name = "iphone";
        Query q =s.createQuery("from Product p where p.name like ?");
        q.setString(0, "%"+name+"%");
        List<Product> ps= q.list();
        for (Product p : ps) {
            System.out.println(p.getName());
        }
  • 首先根据hql创建一个Query对象q
  • 设置参数(和基1的PreparedStatement不一样,Query是基0的)
  • 通过Query对象q的list()方法即返回查询的结果

6.使用CRITERIA进行查询
与HQL和SQL的区别是Criteria 完全是 面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹

import java.util.List;
 
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
 
        String name = "iphone";
          
        Criteria c= s.createCriteria(Product.class);
        c.add(Restrictions.like("name", "%"+name+"%"));
        List<Product> ps = c.list();
        for (Product p : ps) {
            System.out.println(p.getName());
        }

使用Criteria 查询数据

  • 通过Session对象s的createCriteria()方法创建一个Criteria对象
  • Criteria.add()增加约束。 在本例中增加一个对name的模糊查询(like)
  • 调用list()方法返回查询结果的集合

6.使用标准SQL语句进行查询
Hibernate依然保留了对标准SQL语句的支持,在一些场合,比如多表联合查询,并且有分组统计函数的情况下,标准SQL语句依然是效率较高的一种选择

        String sql = "select * from product_ p where p.name like '%"+name+"%'";
         
        Query q= s.createSQLQuery(sql);
        List<Object[]> list= q.list();
        for (Object[] os : list) {
            for (Object filed: os) {
                System.out.print(filed+"\t");
            }
            System.out.println();
        }

因为标准SQL语句有可能返回各种各样的结果,比如多表查询,分组统计结果等等。 不能保证其查询结果能够装进一个Product对象中,所以返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值