hibernate笔记(2)——增删查改

通过id获取对象
SessionFactory sf = new Configuration().configure().buildSessionFactory() ;
Session s = sf.openSession() ;
//s.beginTransaction();
Product product = (Product)s.get(Product.class, 1);
System.out.println(product.getName());
//s.getTransaction().commit();
s.close() ;
sf.close() ;

根据id把对象从表里删除掉 
注意: hibernate在删除一条数据之前,先要通过id把这条记录取出来
SessionFactory sf = new Configuration().configure().buildSessionFactory() ;
Session s = sf.openSession() ;
s.beginTransaction() ;
Product product = (Product)s.get(Product.class, 10);
s.delete(product);
s.getTransaction().commit() ;
s.close() ;
sf.close() ;

修改一个对象的属性,并更新到数据库
SessionFactory sf = new Configuration().configure().buildSessionFactory() ;
Session s = sf.openSession() ;
s.beginTransaction() ;
Product product = (Product)s.get(Product.class, 1);
product.setName("ipad0");
s.update(product);
s.getTransaction().commit() ;
s.close() ;
sf.close() ;

HQL(Hibernate Query Language)是hibernate专门用于查询数据的语句,有别于SQL,HQL跟接近于面向对象的思维方式。 
比如使用的是类的名字Product,而非表格的名字product_
1. 首先根据hql创建一个Query对象
2. 设置参数(和基1的 PreparedStatement 不一样,Query是基0的)
3. 通过Query对象的list()方法即返回查询的结果了。

注:   使用hql的时候,用的是类名Product,而不是表名product_
注:   使用hql的时候, 不需要 在前面加   select *

SessionFactory sf = new Configuration().configure().buildSessionFactory() ;
Session s = sf.openSession() ;
//s.beginTransaction();
String name = "pa" ;
Query q = s.createQuery("from Product p where p.name like ?");
q.setString(0, "%"+name+"%");
List<Product> products = q.list();
for (Product p : products) {
System. out .println(p.getName()) ;
}
//s.getTransaction().commit();
s.close() ;
sf.close() ;

使用Criteria进行数据查询。 
与HQL和SQL的区别是Criteria 完全是   面向对象的方式 在进行数据查询,将不再看到有sql语句的痕迹
使用Criteria 查询数据
1. 通过session的createCriteria创建一个Criteria 对象
2. Criteria.add 增加约束。 在本例中增加一个对name的模糊查询(like)
3. 调用list()方法返回查询结果的集合
除此之外,Criteria 还可以很方便的进行进行 分页查询

Hibernate使用Criteria 来进行分页查询
c.setFirstResult(2);   表示从第2条数据开始
c.setMaxResults(5);   表示一共查询5条数据

SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session s = sf.openSession();
String name = "ip";
Criteria c = s.createCriteria(Product.class);
c.add(Restrictions.like("name", name+"%"));
c.setFirstResult( 0 ) ; //从第0条数据开始
c.setMaxResults( 5 ) ; //一共查询5条数据
List<Product> products = c.list();
for (Product p : products) {
System. out.println(p.getName());
}
s.close();
sf.close();

通过标准SQL语句进行查询  
Hibernate依然保留了对标准SQL语句的支持,在一些场合,比如多表联合查询,并且有分组统计函数的情况下,标准SQL语句依然是效率较高的一种选择
使用Session的createSQLQuery方法执行标准SQL语句
因为标准SQL语句有可能返回各种各样的结果,比如多表查询,分组统计结果等等。   不能保证 其查询结果能够 装进一个Product对象中 ,所以返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来
SessionFactory sf = new Configuration().configure().buildSessionFactory() ;
Session s = sf.openSession() ;
String name = "ad" ;
Query q = s.createSQLQuery("select * from product_ where name like '%"+name+"%'");
List<Object[]> list = q.list();
for (Object[] os : list) {
for (Object o : os) {
System.out.print(o+"\t");
}
System.out.println();
}
s.close() ;
sf.close() ;

结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值