Hibernate-基本操作

1.数据插入

Hibernate可以使用for循环插入多个数据到数据库

示例:

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.flush();
             s.clear();      
        }
 
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
 
}

当更新或者保存大批量数据的时候,可以每固定数量的时候,进行清理缓存,同时清除缓存:

2.数据删除

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

示例:

public class TestHibernate {
    public static void main(String[] args) {
 
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
 
        Session s = sf.openSession();
        s.beginTransaction();
 
        Product p =(Product) s.get(Product.class, 5);
        s.delete(p);
         
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
 
}

3.数据查询

3.1 hql查询

1). 首先根据hql创建一个Query对象
2). 设置参数(和基1的PreparedStatement不一样,Query是基0的)
3). 通过Query对象的list()方法即返回查询的结果了。
注: 使用hql的时候,用的是类名Product,而不是表名product

public class TestHibernate {
    public static void main(String[] args) {
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
 
        Session s = sf.openSession();
        s.beginTransaction();
 
        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());
        }
         
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
 
}

3.2 Criteria查询

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

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

public class TestHibernate {
    public static void main(String[] args) {
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
  
        Session s = sf.openSession();
        s.beginTransaction();
 
        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());
        }
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
}

 3.3 标准SQL查询

返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来。

public class TestHibernate {
    public static void main(String[] args) {
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
 
        Session s = sf.openSession();
        s.beginTransaction();
 
        String name = "iphone";
         
        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();
        }
         
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
}

4.数据修改

其步骤:

1). 根据id获取该对象
2). 修改该对象的属性
3). 通过Session的update方法把变化更新到数据库中

public class TestHibernate {
    public static void main(String[] args) {
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
 
        Session s = sf.openSession();
        s.beginTransaction();
 
        Product p =(Product) s.get(Product.class, 6);
         
        System.out.println(p.getName());
         
        p.setName("iphone-modified");
         
        s.update(p);
         
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
 
}

5. 三态

实体类对象在Hibernate中有3种状态
分别是瞬时,持久和脱管。
瞬时:指的是没有和hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,这个对象也就消失了
持久:指得是一个对象和hibernate发生联系,有对应的session,并且在数据库中有对应的一条记录
脱管:指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的session已经关闭了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值