Hibernate中HQL练习

用一个Demo来记录

建立二张表Book和Press

press:

/*
MySQL Data Transfer
Source Host: localhost
Source Database: hibernate1
Target Host: localhost
Target Database: hibernate1
Date: 2015/5/27 22:13:25
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for hql_press
-- ----------------------------
CREATE TABLE `hql_press` (
  `id` int(11) NOT NULL,
  `address` varchar(255) default NULL,
  `book_id` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `FKFCEED87AECB66CF` (`book_id`),
  CONSTRAINT `FKFCEED87AECB66CF` FOREIGN KEY (`book_id`) REFERENCES `hql_book` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records 
-- ----------------------------
INSERT INTO `hql_press` VALUES ('1', '广州', '1');
INSERT INTO `hql_press` VALUES ('2', '上海', '1');
INSERT INTO `hql_press` VALUES ('3', '北京', '1');

book:

/*
MySQL Data Transfer
Source Host: localhost
Source Database: hibernate1
Target Host: localhost
Target Database: hibernate1
Date: 2015/5/27 22:13:17
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for hql_book
-- ----------------------------
CREATE TABLE `hql_book` (
  `id` int(11) NOT NULL,
  `name` varchar(255) default NULL,
  `author` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records 
-- ----------------------------
INSERT INTO `hql_book` VALUES ('1', '设计模式', '刘伟');

Book.java

package com.lx.domain;

import java.util.HashSet;
import java.util.Set;


public class Book{

	private Integer id;
	
	private String name;
	
	private String author;

	private Set press = new HashSet();

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public Set getPress() {
		return press;
	}

	public void setPress(Set press) {
		this.press = press;
	}
	
	
}


Press.java

package com.lx.domain;

public class Press {

	private int id;
	
	private String address;
	
	private Book book;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Book getBook() {
		return book;
	}

	public void setBook(Book book) {
		this.book = book;
	}
	
	
}


Book.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
     
     <class name="com.lx.domain.Book" table="hql_book">
       
       <id name="id" column="id" type="int">
           <generator class="increment"></generator>
       </id>
       
       <property name="name" column="name" type="string"></property>
       
       <property name="author" column="author" type="string"></property>
       
       <set name="press" cascade="all" inverse="true">
          <key column="book_id"></key>
          <one-to-many class="com.lx.domain.Press"/>
       </set>
       
     </class>

</hibernate-mapping>


Press.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
     
     <class name="com.lx.domain.Press" table="hql_press">
       
       <id name="id" column="id" type="int">
           <generator class="increment"></generator>
       </id>
       
       <property name="address" column="address" type="string"></property>
       
       <many-to-one name="book" column="book_id" class="com.lx.domain.Book"></many-to-one>
       
     </class>

</hibernate-mapping>


测试代码:

package com.lx.test;


import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;

import com.lx.domain.Book;
import com.lx.domain.Press;
import com.lx.util.HibernateUtil;

/**
   Hql语句查询
 * @author Administrator
 *
 */

public class HibernateTest {

	
	@Test
	public void testAdd()
	{
		SessionFactory factory= HibernateUtil.getSessionFactory();
		Session session = factory.openSession();
		Transaction tx = null;
		try
		{
		  tx = session.beginTransaction();
		  Book book = new Book();
		  book.setAuthor("刘伟");
		  book.setName("设计模式");
		  
		  Press press = new Press();
		  press.setAddress("北京");
		  press.setBook(book);
		  
		  Press press2 = new Press();
		  press2.setAddress("上海");
		  press2.setBook(book);
		  
		  Press press3 = new Press();
		  press3.setAddress("广州");
		  press3.setBook(book);
		  
		 book.getPress().add(press);
		 book.getPress().add(press2);
		 book.getPress().add(press3);
		  
		  session.save(book);
		  
		  tx.commit();
		}catch(Exception e)
		{
			System.out.println(e.getCause());
		   if(null != tx)
		   {
		       tx.rollback();	   
		   }
		}finally{
			session.close();
		}
	}
	@Test
	public void testQuery()
	{
		SessionFactory factory= HibernateUtil.getSessionFactory();
		Session session = factory.openSession();
		Transaction tx = null;
		try
		{
		  tx = session.beginTransaction();
		 
		  Book book = (Book)session.get(Book.class, 1);
          
		  Query query =  session.createQuery("from Press p where p.book = :book");
		
		 //① query.setParameter("book", book, Hibernate.entity(Book.class));
		
		 //② query.setEntity("book", book);
		  
		  //③
		query =  session.createFilter(book.getPress(), "where id >1");
		  
		  List<Press> press =  query.list();
		  for(int i=0; i<press.size(); i++)
		  {
			System.out.println(press.get(i).getAddress());  
		  }
		  tx.commit();
		}catch(Exception e)
		{
		   if(null != tx)
		   {
		       tx.rollback();	   
		   }
		}finally{
			session.close();
		}
	}
}


将用到了一些函数的API列在下面,以便查看




使用HQL主要是对集合进行查询。

Hibernate.entity(object):中间是可持久化类,联系到hibernate中累的几种状态。

query.setEntity("name", object) ,也必须为可持久化类


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值