Category.java代码:
package com.jlee06.QL;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author JLee
* 板块
*/
@Entity
@Table(name="Category")
public class Category {
private int id ;
private String name ;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Msg.java代码:
package com.jlee06.QL;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="Msg")
public class Msg {
private int id ;
private String cont ;
private Topic topic ;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="cont" , length=500)
public String getCont() {
return cont;
}
public void setCont(String cont) {
this.cont = cont;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="topicId")
public Topic getTopic() {
return topic;
}
public void setTopic(Topic topic) {
this.topic = topic;
}
}
Topic.java代码:
package com.jlee06.QL;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
* @author JLee
* 主题
*/
@Entity
@Table(name="topic")
@NamedQueries({
@NamedQuery(name="Topic.selectTopic" , query="from Topic t where t.id = :id ") ,
@NamedQuery(name="Topic.conditionTopic" , query="from Topic t where t.title like :title ")
})
//hibernate3.3.2尚未支持
//@NamedNativeQueries({
// @NamedNativeQuery(name="native_sql_page" , query="select * from topic limit 2,5")
//})
public class Topic {
private int id ;
private String title ;
private Date createDate ;
public Date getCreateDate() {
return createDate;
}
@Column(name="createDate")
@Temporal(TemporalType.DATE)
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
private Category category ;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="title" , length=32)
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="categoryId")
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}
MsgInfo.java代码:
package com.jlee06.QL;
/**
* VO Value Object
* @author JLee
* 查询使用的 值对象
*/
public class MsgInfo {
private int id ;
private String cont ;
private String topicName ;
private String categoryName ;
public MsgInfo(int id, String cont, String topicName, String categoryName) {
super();
this.id = id;
this.cont = cont;
this.topicName = topicName;
this.categoryName = categoryName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCont() {
return cont;
}
public void setCont(String cont) {
this.cont = cont;
}
public String getTopicName() {
return topicName;
}
public void setTopicName(String topicName) {
this.topicName = topicName;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
}
DataBase.java代码:
package com.jlee06.QL;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class DataBase {
private static SessionFactory sf ;
@BeforeClass
public static void beforeClass(){
sf = new AnnotationConfiguration().configure().buildSessionFactory() ;
}
//@AfterClass
//public void afterClass(){
// sf.close() ;
//}
@Test
public void testSave() {
Session session = sf.getCurrentSession() ;
session.beginTransaction();
for(int i=0; i<10; i++) {
Category c = new Category();
c.setName("c" + i);
session.save(c);
}
for(int i=0; i<10; i++) {
Category c = new Category();
c.setId(1);
Topic t = new Topic();
t.setCategory(c);
t.setTitle("t" + i);
t.setCreateDate(new Date());
session.save(t);
}
for(int i=0; i<10; i++) {
Topic t = new Topic();
t.setId(1);
Msg m = new Msg();
m.setCont("m" + i);
m.setTopic(t);
session.save(m);
}
session.getTransaction().commit();
}
/**
* HQL面向对象查询语句
* SQL语句
* select
category0_.id as id0_,
category0_.name as name0_
from
Category category0_
*/
@Test
public void testHQL_01(){
Session session = sf.openSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Category") ;
List<Category> categorys = (List<Category>)q.list() ;
for(Category c : categorys){
System.out.println(c.getName());
}
session.getTransaction().commit() ;
session.close() ;
}
/**
* 设置 Where 条件语句
* SQL 语句
* select
category0_.id as id0_,
category0_.name as name0_
from
Category category0_
where
category0_.name>'c5'
*/
@Test
public void testHQL_02(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Category c where c.name > 'c5' ") ;
List<Category> categorys = (List<Category>)q.list() ;
for(Category c : categorys){
System.out.println(c.getName());
}
session.getTransaction().commit() ;
}
/**
* 使用 order by 排序语句
* SQL 语句
* select
category0_.id as id0_,
category0_.name as name0_
from
Category category0_
order by
category0_.name desc
*/
@Test
public void testHQL_03(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Category c order by c.name desc ") ;
List<Category> categorys = (List<Category>)q.list() ;
for(Category c : categorys){
System.out.println(c.getName());
}
session.getTransaction().commit() ;
}
/**
* 使用 distinct
* SQL语句
* select
distinct category0_.id as id0_,
category0_.name as name0_
from
Category category0_
order by
category0_.name desc
*/
@Test
public void testHQL_04(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select distinct c from Category c order by c.name desc ") ;
List<Category> categorys = (List<Category>)q.list() ;
for(Category c : categorys){
System.out.println(c.getName());
}
session.getTransaction().commit() ;
}
/**
* 在SQL语句中设置参数1
* select
category0_.id as id0_,
category0_.name as name0_
from
Category category0_
where
category0_.id>?
and category0_.id<?
* 分开设置参数
*/
@Test
public void testHQL_05(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Category c where c.id > :min and c.id < :max ") ;
q.setParameter("min", 2) ;
q.setParameter("max", 5) ;
List<Category> categorys = (List<Category>)q.list() ;
for(Category c : categorys){
System.out.println(c.getId()+" "+c.getName());
}
session.getTransaction().commit() ;
}
/**
* 在SQL语句中设置参数2
* select
category0_.id as id0_,
category0_.name as name0_
from
Category category0_
where
category0_.id>?
and category0_.id<?
* 级联设置参数
*/
@Test
public void testHQL_06(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Category c where c.id > :min and c.id < :max ")
.setInteger("min", 2)
.setInteger("max", 5) ;
List<Category> categorys = (List<Category>)q.list() ;
for(Category c : categorys){
System.out.println(c.getId()+" "+c.getName());
}
session.getTransaction().commit() ;
}
/**
* 查询结果 进行 分页
* SQL语句(MySQL分页语句)
* select
category0_.id as id0_,
category0_.name as name0_
from
Category category0_
order by
category0_.name desc limit ?,
?
*/
@Test
public void testHQL_07(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Category c order by c.name desc ") ;
q.setMaxResults(5) ;
q.setFirstResult(3) ;
List<Category> categorys = (List<Category>)q.list() ;
for(Category c : categorys){
System.out.println(c.getId()+" "+c.getName());
}
session.getTransaction().commit() ;
}
/**
* 查询指定字段
* SQL 语句
* select
category0_.id as col_0_0_,
category0_.name as col_1_0_
from
Category category0_
where
category0_.id>?
and category0_.id<?
* 查询结果为 数组
* @return Object[]
*/
@Test
public void testHQL_08(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select c.id , c.name from Category c where c.id > :min and c.id < :max ")
.setInteger("min", 2)
.setInteger("max", 5) ;
List<Object[]> categorys = (List<Object[]>)q.list() ;
for(Object[] o : categorys){
System.out.println(o[0]+" "+o[1]);
}
session.getTransaction().commit() ;
}
/**
* 两张表关联查询
* 设置 fetch type 为 lazy 后将不会有第二条SQL语句
* SQL语句:
* 1.fetch=FetchType.LAZY
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
topic0_.categoryId=1
*2.fetch=FetchType.EAGER
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
topic0_.categoryId=1
* select
category0_.id as id0_0_,
category0_.name as name0_0_
from
Category category0_
where
category0_.id=?
*/
@Test
public void testHQL_09(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Topic t where t.category .id = 1 ") ;
List<Topic> topics = (List<Topic>)q.list() ;
for(Topic t : topics){
System.out.println(t.getId()+" "+t.getTitle());
}
session.getTransaction().commit() ;
}
/**
* 多表关联查询
* fetch type
* 1 LAZY SQL语句
* select
msg0_.id as id1_,
msg0_.cont as cont1_,
msg0_.topicId as topicId1_
from
Msg msg0_,
topic topic1_
where
msg0_.topicId=topic1_.id
and topic1_.categoryId=1
* 2 EAGER SQL
* select
msg0_.id as id1_,
msg0_.cont as cont1_,
msg0_.topicId as topicId1_
from
Msg msg0_,
topic topic1_
where
msg0_.topicId=topic1_.id
and topic1_.categoryId=1
select
topic0_.id as id2_1_,
topic0_.categoryId as categoryId2_1_,
topic0_.createDate as createDate2_1_,
topic0_.title as title2_1_,
category1_.id as id0_0_,
category1_.name as name0_0_
from
topic topic0_
left outer join
Category category1_
on topic0_.categoryId=category1_.id
where
topic0_.id=?
*/
@Test
public void testHQL_10(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Msg m where m.topic.category .id = 1 ") ;
List<Msg> msgs = (List<Msg>)q.list() ;
for(Msg m : msgs){
System.out.println(m.getId()+" "+m.getCont());
}
session.getTransaction().commit() ;
}
/**
* 自定义查询 赋予自定义的POJO
* 使用自定义 Value Object
* 临时对象VO一定要有 一个有参的构造方法
*/
@Test
public void testHQL_11(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select new com.jlee06.QL.MsgInfo (m.id , m.cont , m.topic.title , m.topic.category.name ) from Msg m ") ;
List<MsgInfo> msgInfos = (List<MsgInfo>)q.list() ;
for(MsgInfo mi : msgInfos){
System.out.println(mi.getId()+" "+mi.getCategoryName()+" "+mi.getCont()+" "+mi.getTopicName());
}
session.getTransaction().commit() ;
}
/**
* 手动测试left right join
* 为什么不能直接写Category名,而必须写t.category
* 因为有可能存在多个成员变量(同一个类),需要指明用哪一个成员变量作为连接条件
*/
@Test
public void testHQL_12(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select t.title , c.name from Topic t join t.category c ") ;
List<Object[]> os = (List<Object[]>)q.list() ;
for(Object[] o : os){
System.out.println(o[0]+" "+o[1]);
}
session.getTransaction().commit() ;
}
/**
* 学习使用 uniqueResult
* select
msg0_.id as id1_,
msg0_.cont as cont1_,
msg0_.topicId as topicId1_
from
Msg msg0_
where
msg0_.id=?
* 返回单独的唯一的结果
*/
@Test
public void testHQL_13(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Msg m where m= :msg ") ;
Msg m = new Msg() ;
m.setId(1) ;
q.setParameter("msg", m) ;
Msg mResult = (Msg)q.uniqueResult() ;
System.out.println(mResult.getId()+" "+mResult.getCont());
session.getTransaction().commit() ;
}
/**
* 集合函数 Count
* SQL语句
* select
count(*) as col_0_0_
from
Msg msg0_
*/
@Test
public void testHQL_14(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select count(*) from Msg m ") ;
long count = (Long)q.uniqueResult() ;
System.out.println(count);
session.getTransaction().commit() ;
}
/**
* 集合函数 max min avg sum
* SQL语句
* select
max(msg0_.id) as col_0_0_,
min(msg0_.id) as col_1_0_,
avg(msg0_.id) as col_2_0_,
sum(msg0_.id) as col_3_0_
from
Msg msg0_
*/
@Test
public void testHQL_15(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select max(m.id) , min(m.id) , avg(m.id) , sum(m.id) from Msg m ") ;
Object[] o = (Object[])q.uniqueResult() ;
System.out.println(o[0] +" "+ o[1] +" "+ o[2] +" "+ o[3]);
session.getTransaction().commit() ;
}
/**
* between and
* SQL语句
* select
msg0_.id as id1_,
msg0_.cont as cont1_,
msg0_.topicId as topicId1_
from
Msg msg0_
where
msg0_.id between 3 and 8
*/
@Test
public void testHQL_16(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Msg m Where m.id between 3 and 8 ") ;
for(Object o : q.list() ){
Msg m = (Msg)o ;
System.out.println(m.getId()+" "+m.getCont());
}
session.getTransaction().commit() ;
}
/**
* in
* SQL 语句
* select
msg0_.id as id1_,
msg0_.cont as cont1_,
msg0_.topicId as topicId1_
from
Msg msg0_
where
msg0_.id in (
3 , 4 , 5 , 6
)
*/
@Test
public void testHQL_17(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Msg m Where m.id in (3,4,5,6) ") ;
for(Object o : q.list() ){
Msg m = (Msg)o ;
System.out.println(m.getId()+" "+m.getCont());
}
session.getTransaction().commit() ;
}
/**
* is null 和 is not null
* select
msg0_.id as id1_,
msg0_.cont as cont1_,
msg0_.topicId as topicId1_
from
Msg msg0_
where
msg0_.cont is not null
*/
@Test
public void testHQL_18(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Msg m Where m.cont is not null ") ;
for(Object o : q.list() ){
Msg m = (Msg)o ;
System.out.println(m.getId()+" "+m.getCont());
}
session.getTransaction().commit() ;
}
/**
* is empty
* SQL 语句
*
*/
@Test
public void testHQL_19(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Topic t where t.msgs is empty ") ;
for(Object o : q.list() ){
Topic t = (Topic)o ;
System.out.println(t.getId()+" "+t.getTitle());
}
session.getTransaction().commit() ;
}
/**
* like 的使用
*SQL语句
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
topic0_.title like '%5'
*/
@Test
public void testHQL_20(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Topic t where t.title like '%5' ") ;
for(Object o : q.list() ){
Topic t = (Topic)o ;
System.out.println(t.getId()+" "+t.getTitle());
}
session.getTransaction().commit() ;
}
/**
* 函数的使用1
* lower , upper , trim , concat , length
* SQL语句
* select
lower(topic0_.title) as col_0_0_,
upper(topic0_.title) as col_1_0_,
trim(topic0_.title) as col_2_0_,
concat(topic0_.title,
'*****') as col_3_0_,
length(topic0_.title) as col_4_0_
from
topic topic0_
*/
@Test
public void testHQL_21(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select " +
" lower(t.title) ," +
" upper(t.title) ," +
" trim(t.title) ," +
" concat(t.title , '*****') , " +
" length(t.title)" +
" from Topic t ") ;
for(Object os : q.list() ){
Object[] o = (Object[])os ;
System.out.println(o[0] +" "+ o[1] +" "+ o[2] +" "+ o[3] +" "+ o[4]);
}
session.getTransaction().commit() ;
}
/**
* 函数的使用2
* abs , sqrt , mod
* SQL 语句
* select
abs(topic0_.id) as col_0_0_,
sqrt(topic0_.id) as col_1_0_,
mod(topic0_.id,
2) as col_2_0_
from
topic topic0_
*/
@Test
public void testHQL_22(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select " +
" abs(t.id) ," +
" sqrt(t.id) ," +
" mod(t.id , 2) " +
" from Topic t ") ;
for(Object os : q.list() ){
Object[] o = (Object[])os ;
System.out.println(o[0] +" "+ o[1] +" "+ o[2] );
}
session.getTransaction().commit() ;
}
/**
* 时间函数的应用
* SQL 语句
* select
current_date as col_0_0_,
current_time as col_1_0_,
current_timestamp as col_2_0_,
topic0_.id as col_3_0_
from
topic topic0_
*/
@Test
public void testHQL_24(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select current_date , current_time , current_timestamp , t.id from Topic t ") ;
for(Object os : q.list() ){
Object[] o = (Object[])os ;
System.out.println(o[0] +" "+ o[1] +" "+ o[2] +" "+o[3]);
}
session.getTransaction().commit() ;
}
/**
* 日期的比较
* SQL语句
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
topic0_.createDate<?
*/
@Test
public void testHQL_25(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Topic t Where t.createDate < :date ") ;
q.setParameter("date", new Date()) ;
for(Object o : q.list() ){
Topic t = (Topic)o ;
System.out.println(t.getId()+" "+t.getCreateDate());
}
session.getTransaction().commit() ;
}
/**
* group by 语句
* SQL 语句
* select
topic0_.title as col_0_0_,
count(*) as col_1_0_
from
topic topic0_
group by
topic0_.title
*/
@Test
public void testHQL_26(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select t.title , count(*) from Topic t group by t.title ") ;
for(Object o : q.list() ){
Object[] arr = (Object[])o ;
System.out.println(arr[0]+" "+arr[1]);
}
session.getTransaction().commit() ;
}
/**
* group by having 语句
* group by 里面出现的 字段 必须出现在 select 里面
* having 中的条件必须是 组合函数
* SQL 语句
* select
topic0_.title as col_0_0_,
count(*) as col_1_0_
from
topic topic0_
group by
topic0_.title
having
count(*)>0
*/
@Test
public void testHQL_27(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("select t.title , count(*) from Topic t group by t.title having count(*) > 0 ") ;
for(Object o : q.list() ){
Object[] arr = (Object[])o ;
System.out.println(arr[0]+" "+arr[1]);
}
session.getTransaction().commit() ;
}
/**
* 子查询
* SQL 语句
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
topic0_.id<(
select
avg(topic1_.id)
from
topic topic1_
)
*/
@Test
public void testHQL_28(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Topic t where t.id < (select avg(t.id) from Topic t ) ") ;
for(Object o : q.list() ){
Topic t = (Topic)o ;
System.out.println(t.getId() +" "+t.getCreateDate());
}
session.getTransaction().commit() ;
}
/**
* All 函数的使用
* SQL 语句
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
topic0_.id<all (
select
topic1_.id
from
topic topic1_
where
mod(topic1_.id, 2)=0
)
*/
@Test
public void testHQL_29(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Topic t where t.id < ALL (select t.id from Topic t where mod(t.id , 2) = 0 ) ") ;
for(Object o : q.list() ){
Topic t = (Topic)o ;
System.out.println(t.getId() +" "+t.getCreateDate());
}
session.getTransaction().commit() ;
}
/**
* exists 和 not exists
* 说明: 用 in 可以实现 exists 的功能
* 但是exists的效率高
* SQL 语句
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
not (exists (select
msg1_.id
from
Msg msg1_
where
msg1_.topicId=topic0_.id))
*/
@Test
public void testHQL_30(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Topic t where not exists (select m.id from Msg m where m.topic.id = t.id ) ") ;
// Query q = session.createQuery("from Topic t where exists (select m.id from Msg m where m.topic.id = t.id ) ") ;
for(Object o : q.list() ){
Topic t = (Topic)o ;
System.out.println(t.getId() +" "+t.getCreateDate());
}
session.getTransaction().commit() ;
}
/**
* update delete
* SQL 语句
* update
topic
set
title=upper(title)
*/
@Test
public void testHQL_31(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("update Topic t set t.title = upper(t.title) ") ;
q.executeUpdate() ;
q = session.createQuery("from Topic ");
for(Object o : q.list()){
Topic t = (Topic) o ;
System.out.println(t.getTitle());
}
session.createQuery("update Topic t set t.title = lower(t.title) ")
.executeUpdate() ;
session.getTransaction().commit() ;
}
/**
* 命名查询
* 实现 按名字查找的自定义查询
* 在 Entity 上面自定义好 SQL 语句
* SQL 语句
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
topic0_.id=?
*/
@Test
public void testHQL_32(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
// Query q = session.getNamedQuery("Topic.selectTopic") ;
// q.setParameter("id", 5) ;
// Topic t = (Topic)q.uniqueResult() ;
// System.out.println(t.getId()+" "+t.getCreateDate());
Query q = session.getNamedQuery("Topic.conditionTopic") ;
q.setParameter("title", "%") ;
for(Object o : q.list()){
Topic t = (Topic)o ;
System.out.println(t.getId()+" "+t.getCreateDate());
}
// Query q = session.getNamedQuery("native_sql_page") ;
// for(Object o : q.list()){
// Topic t = (Topic)o ;
// System.out.println(t.getId()+" "+t.getCreateDate());
// }
session.getTransaction().commit() ;
}
/**
* 原生SQL查询
* Hibernate使用SQL语句
* SQL语句
* select *
from
category limit 2, 6
*/
@Test
public void testHQL_33(){
Session session = sf.getCurrentSession() ;
session.getTransaction().begin() ;
SQLQuery q = session.createSQLQuery("select * from category limit 2,6").addEntity(Category.class);
List<Category> categorys = (List<Category>)q.list() ;
for(Category c : categorys){
System.out.println(c.getId()+" "+c.getName());
}
session.getTransaction().commit() ;
}
/**
* 实现数据分也显示
* SQL语句
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
not (exists (select
msg1_.id
from
Msg msg1_
where
msg1_.topicId=topic0_.id)) limit ?, ?
*/
@Test
public void testHQL_34(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
Query q = session.createQuery("from Topic t where not exists (select m.id from Msg m where m.topic.id = t.id ) ") ;
// Query q = session.createQuery("from Topic t where exists (select m.id from Msg m where m.topic.id = t.id ) ") ;
q.setFirstResult(10).setMaxResults(20) ;
for(Object o : q.list() ){
Topic t = (Topic)o ;
System.out.println(t.getId() +" "+t.getCreateDate());
}
session.getTransaction().commit() ;
}
/**
* 根据日期时间进行查询
* SQL语句:
* select
topic0_.id as id2_,
topic0_.categoryId as categoryId2_,
topic0_.createDate as createDate2_,
topic0_.title as title2_
from
topic topic0_
where
topic0_.createDate=? limit ?
*/
@Test
public void testHQL_35(){
Session session = sf.getCurrentSession() ;
session.beginTransaction() ;
/**
* 这种方式适用于 datetime 和 date 的两种字段格式
*/
String today = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Query q = session.createQuery("from Topic t where t.createDate = :today ") ;
try {
q.setDate("today", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(today)) ;
} catch (ParseException e) {
e.printStackTrace();
}
/**
* 这种方式适只用于 datetime 的字段格式
*/
// Query q = session.createQuery("from Topic t where t.createDate between ? and ? ") ;
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// try {
// q.setParameter(0, sdf.parse("2011-02-12 00:00:00")) ;
// q.setParameter(1, sdf.parse("2011-02-12 23:59:59"));
// } catch (Exception e) {
// e.printStackTrace();
// }
q.setFirstResult(0).setMaxResults(20) ;
for(Object o : q.list() ){
Topic t = (Topic)o ;
System.out.println(t.getId() +" "+t.getCreateDate());
}
session.getTransaction().commit() ;
}
@Test
public void testSchemaExport(){
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
}
}
hibernate.cfg.xml文件:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/hibernate</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">100</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup --> <!--<property name="hbm2ddl.auto">create</property>--> <mapping class="com.jlee06.QL.Category"/> <mapping class="com.jlee06.QL.Msg"/> <mapping class="com.jlee06.QL.Topic"/> </session-factory> </hibernate-configuration>