学习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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值