hibernate hql

1.什么是hql

Hibernate Query LanguageHibernate查询语言,面向的是类和属性

下面开始列子

//1.HQL 检索所有学生集合
@org.junit.Test
public void testselectAllDepts(){
    String hql="from Student";
    Query query = session.createQuery(hql);
    List<Student> list = query.list();
    for (Student student:list) {
        System.out.println(student.getStuname());
    }
}

//2.获取学生的信息
@org.junit.Test
public void testselectSomeRows(){
    String hql="from Student d where d.stuname='呵呵'";
    Query query = session.createQuery(hql);
    List<Student> list = query.list();
    for (Student student:list) {
        System.out.println(student.getStuname());
    }
}

//3.获取部分列
@org.junit.Test
public void testgetMultiColumns(){
    String hql="select d.stuname from Student d";
    Query query = session.createQuery(hql);
    List<String> list = query.list();
    for (String dept:list) {
        System.out.println(dept);
    }
}

//3.获取部分列  多列   List<Objecgt[]>
@Test
public void testgetMultipleColumns(){
    String hql="select d.stuname,d.sage from Student d";
    Query query = session.createQuery(hql);
    List<Object[]> list = query.list();
    for (Object[] dept:list) {
        for (Object item:dept){
            System.out.print(item+"===");
        }
        System.out.println();
    }
}

  1.匿名占位符

from Student where stuname = ? 

  2.名称占位符

 from Student where s.stuname = :stuname 

3.绑定命名参数与一个对象的属性值

Session session = HibernateUtil.openSession();

NewsDetail news=new NewsDetail();

news.setNtitle("hibernate");

hibernate 工具类

public class HibernateUtil {

    // 初始化一个ThreadLocal对象
    @SuppressWarnings("rawtypes")
    private static final ThreadLocal sessionTL = new ThreadLocal();
    private static Configuration configuration;
    private final static SessionFactory sessionFactory;
    static {
        try {
            configuration = new Configuration().configure();
            sessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static Session currentSession() {
        //sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
        Session session = (Session) sessionTL.get();
        // 如果session为null,则打开一个新的session
        if (session == null) {
            //创建一个数据库连接对象session。
            session = sessionFactory.openSession();
            // 保存该数据库连接session到ThreadLocal中。
            sessionTL.set(session);
        }
        //sessionTL中get()可以获取该线程上次获取过的数据库连接对象。
        return session;
    }
    /**
     * 关闭Session
     */
    public static void closeSession(){
        Session session = (Session) sessionTL.get();
        sessionTL.set(null);
        session.close();
    }

hql实现动态查询

1.检索条件的实体属性

//job
private String job;
//salary
private Double sal;

//入职开始时间
private Date fromDate;

//入职结束时间
private Date endDate;

   2.测试

@Test
public void test05() throws ParseException {
    /*准备对象*/
    Electronic ex=new Electronic();
    /*价格小于等于800.0*/
    ex.setPrice(800.0);
   /*准备hql,hql根据条件动态生成*/
 StringBuilder stringBuilder=new StringBuilder("from Electronic e where 1=1 ");     
 /*判断价格是否为空*/
 if(ex.getPrice()!=null){
      stringBuilder.append("and e.price<=:price");
 }
 /*3. 依据hql构建query对象*/
    Query query=session.createQuery(stringBuilder.toString());
    /*使用query对象的setProperties()方法为参数赋值,empCondition对象中封装了条件*/
    query.setProperties(ex);
    List<Electronic> list = query.list();
    /*遍历*/
    for (Electronic item:list) {
        System.out.println(item.getEid()+"==="+item.getE_code()+"==="+item.getPrice());
    }
}

分页查询

uniqueResult()获取唯一对象

setFirstResult(int firstResult) 设置返回结果从第几条开始 ---- 索引从0开始

setMaxResults(int maxResults) 设置本次返回结果记录条数 

 

 

@Test
public void selectPageEc(){
    String hql="from Electronic";
    Query query = session.createQuery(hql);
    int pageSize=3;
    int pageIndex=1;
    query.setFirstResult((pageIndex-1)*pageSize); //6
    query.setMaxResults(pageSize);
    List<Electronic> list = query.list();
    for (Electronic item:list) {
        System.out.println(item.getE_code());
    }
}

 

 

 



原文地址:https://www.cnblogs.com/xuhaifeng017/p/8119365.html