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对象中,所以返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来。