学习Hibernate(HQL、Criteria、SQL三种查询)
学习感想:
目前为止,没弄明白Critreia多表查询,思路混乱了。感觉还是用HQL更顺手一些。
学习过程中的一些代码:
1.TestHibernate.java(试用三种查询方式)
// TestHibernate.java
package com.how2java.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import com.how2java.pojo.Category;
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();
/* //新增产品
Product p=new Product();
p.setName("iPhone1");
p.setPrice(50);
s.save(p);
*/
/* //删除产品
Product p=(Product)s.get(Product.class, 9);
System.out.println("id=6的产品名称是:" + p.getName() + "价格是:"+p.getPrice());
s.delete(p);
System.out.println("已删除产品6");
s.flush();
s.clear();*/
/* //更新产品
Product p=(Product)s.get(Product.class, 10);
p.setName("iphone2");
p.setPrice(50);
s.save(p);*/
/* //HQL单表查询
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()+p.getPrice());
}*/
/* //Critreia单表查询
Criteria c=s.createCriteria(Product.class);
c.add(Restrictions.like("name", "%"+"iphone"+"%"));
List<Product> ps= c.list();
for (Product p : ps){
System.out.println(p.getName());
}*/
//以下代码片段是刚建立Category类,多对一关系,为了循环给每个Product一个cid
Category c=new Category();
for(int i=4;i<24;i++)
{
if((Product)s.get(Product.class,i)!=null)
{Product p=(Product)s.get(Product.class,i);
c=(Category)s.get(Category.class, i%4+1);
p.setCategory(c);
s.update(p);
s.update(c);
System.out.println(p.getName()+"的类型是"+p.getCategory().getName());
}
else i=i+0;
}
/*
//sql单表查询
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();
}
//不能保证其查询结果能够装进一个Product对象中,所以返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来。
*/
/* //Hql多表查询
Query q=s.createQuery("select p.id,p.name,p.price,c.name from Product p,Category c where p.category.id=c.id");
List<Object[]> pro=q.list();
System.out.println("p.id ||p.name ||p.price ||c.name");
for (Object[] os : pro) {
for (Object filed: os) {
System.out.print(filed+"\t");
}
System.out.println();
}
*/
/*
// Criteria多表联合查询方式
Criteria cri=s.createCriteria(Product.class);
cri=cri.createAlias("category", "c");
cri=cri.add(Property.forName("c.name").eq("c1"));
List<Product> pro = cri.list();
System.out.println("p.id ||p.name ||p.price ||c.name");
for (Product p : pro){
System.out.println(p.getId()+" "+p.getName()+" "+p.getPrice()+" "
+p.getCategory().getName()+'\n');
}
*/
s.getTransaction().commit();
s.close();
sf.close();
}
}
2.Product.java
// Product.java
package com.how2java.pojo;
public class Product {
int id;
String name;
float price;
Category category;
public Category getCategory(){
return category;
}
public void setCategory(Category category){
this.category=category;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
3.Category.java
// Category.java
package com.how2java.pojo;
public class Category {
public int getId(){
return id;
}
public void setId(int id){
this.id= id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name= name;
}
int id;
String name;
}
4.Product.hbm.xml
//Product.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.how2java.pojo">
<class name="Product" table="product_">
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<property name="price" />
<many-to-one name="category" class="Category" column="cid" />
</class>
</hibernate-mapping>
5.Category.hbm.xml
//Category.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.how2java.pojo">
<class name="Category" table="category_">
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<property name="name" />
</class>
</hibernate-mapping>
数据库表图:
1. product_:
2. category_:
参考文献:
https://how2j.cn/k/hibernate/hibernate-tutorial/31.html