package com.liu.app.user.hibernate_query;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.Session;
import com.liu.app.hibernate.HibernateSessionFactory;
import com.liu.app.hibernate.entity.SysRole;
import com.liu.app.hibernate.entity.SysUser;
import junit.framework.TestCase;
public class QueryTest extends TestCase {
Session session = HibernateSessionFactory.getSession();
public void testLoad1(){
try {
session.beginTransaction();
for(int i=0;i<5;i++){
SysRole sysRole = new SysRole();
sysRole.setRoledes("role"+i);
session.save(sysRole);
for(int j=0;j<2;j++){
SysUser sysUser = new SysUser();
sysUser.setUserName("user"+i+"role"+j);
sysUser.setPassword("xxxx");
sysUser.setSysRole(sysRole);
session.save(sysUser);
}
}
session.beginTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.beginTransaction().rollback();
}
}
/**
* 构件对象查询
* 1:在BEAN类中必须有带参数构造器
* 2:返回的类型是一个list里面存的是对象类型
*/
public void testLoad2(){
try {
List list = session.createQuery("select new SysUser(s.userId,s.userName,s.password) from SysUser s").list();
Iterator iter = list.iterator();
for(;iter.hasNext();){
SysUser sysUser = (SysUser)iter.next();
System.out.println(sysUser.getUserId()+" "+sysUser.getUserName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/***
* Hibernate支持SQL语句查询
* 本地SQL查询返回的结果是一个Object数组类型
*/
public void testLoad3(){
try {
List list = session.createSQLQuery("select * from sys_user").list();
Iterator iter = list.iterator();
for(;iter.hasNext();){
Object [] obj = (Object[])iter.next();
System.out.println(obj[0]+" "+obj[1]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Hibernate外置命名查询
* HQL语句不写在程序中而是设置在配置文件中,HQL语句必须配置在类的映射文件当中
* 如sysUser类则配置在SysUser.hbm.xml中
* 在映射文件中采用<query>标签来定义HQL语句,在程序中采用session.getNamedQuery(queryname)来查询
*/
public void testLoad4(){
try {
List list = session.getNamedQuery("userAll").list();
Iterator iter = list.iterator();
for(;iter.hasNext();){
SysUser sysUser = (SysUser)iter.next();
System.out.println(sysUser.getUserId()+" "+sysUser.getUserName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 过滤器查询
* 1:在映射文件中定义过滤器和参数
* 2:在类的映射中使用这些参数
* 3:在程序中启用过滤器
* 4:在过滤器当中参数的type类型必须是小写的而且在设置参数setParamenter中必须与type类型一
*/
public void testLoad5(){
try {
session.enableFilter("filterress").setParameter("myId", 5);
List list = session.createQuery("from SysUser").list();
Iterator iter = list.iterator();
for(;iter.hasNext();){
SysUser sysUser = (SysUser)iter.next();
System.out.println(sysUser.getUserId()+" "+sysUser.getUserName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 在分页查询中需要设置两个参数
* 1:setFirstResult()表示分页的起始位置
* 2:setMaxResults()表示每页的条数
*/
public void testLoad6(){
try {
List list = session.createQuery("from SysUser").setFirstResult(1)
.setMaxResults(5).list();
Iterator iter = list.iterator();
for(;iter.hasNext();){
SysUser sysUser = (SysUser)iter.next();
System.out.println(sysUser.getUserId()+" "+sysUser.getUserName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}