• 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());
        }
    }

     

     

     

    
    
    
  • 相关阅读:
    CSS基本
    Visual Basic相关图书推荐
    Docker相关图书推荐
    PASCAL相关图书推荐
    正则表达式相关图书推荐
    Go语言相关图书推荐
    F#相关图书推荐
    Ruby相关图书推荐
    PHP相关图书推荐
    Swift相关图书推荐
  • 原文地址:https://www.cnblogs.com/xuhaifeng017/p/8119365.html
Copyright © 2020-2023  润新知