Hibrenate hibernate query language(单表操作)

来源:互联网 发布:卓越之剑全套完整源码 编辑:程序博客网 时间:2024/05/21 13:55
public class SingleTableTest  extends HibernateUtil{    @Test    public  void  testQueryAllCleass(){        Session session=sessionFactory.openSession();        List<Classes> list=session.createQuery("from  com.sanmao.utils.Classes").list();        session.close();    }/** * 查询指定列 * */    @Test    public  void  testQueryClasses_Propertyes(){        Session session=sessionFactory.openSession();        session.createQuery("select  cid,name from  com.sanmao.utils.Classes").list();//        不用理会报错,编译环境检测器无法识别的问题        session.close();    }    /**     *  根据指定列的构造参数查询     *  带构造参数的查询     * */    @Test    public  void  testQueryClasses_Constructor(){        Session session=sessionFactory.openSession();       List<Classes> classes= session.createQuery("select  new com.sanmao.utils.Classes(cid,name) from  Classes").list();        for (Classes c:classes) {            System.out.println(c.getName()); //返回参数只有cid name 的对象集合        }        session.close();    }    /**     * 带参数的Query查询     * */    @Test    public  void  testQueryClasses_Where_Condition(){        Session session=sessionFactory.openSession();        Query query=session.createQuery("from com.sanmao.utils.Classes where name=?");        query.setParameter(0,"123");        List<Classes> classes=query.list(); //返回name=123 的所有班级        System.out.println(classes.size()); //输出结果为4        session.close();    }    /**     * 带参数的Query查询   HQL特有方式     * */    @Test    public  void  testQueryClasses_Where_Condition2(){        Session session=sessionFactory.openSession();        Query query=session.createQuery("from com.sanmao.utils.Classes where name=:name");        query.setParameter("name","123");        List<Classes> classes=query.list(); //返回name=123 的所有班级        System.out.println(classes.size()); //输出结果为4        session.close();    }    /**     * 利用 Map对参数进行封装     * */    @Test    public  void testQueryClasses_Where_AndCondition_one(){        /**         * Map<String,String>         *     key为持久化对象的属性         *     value为持久化对象属性的 值         * */        Map<String,String> variables=new HashMap<>();        variables.put("name","123");        variables.put("description","123");        Session session=sessionFactory.openSession();        Query query=session.createQuery("from" +                " com.sanmao.utils.Classes where name=:name and " +                "description=:description");        for (Map.Entry<String,String> entry: variables.entrySet()) {                query.setParameter(entry.getKey(),entry.getValue());        }        List<Classes> classes=query.list();        System.out.println(classes.size());        session.close();    }/** * 动态拼接HQL查询 * */    @Test    public  void testQueryClasses_Where_AndCondition_two(){        /**         * Map<String,String>         *     key为持久化对象的属性         *     value为持久化对象属性的 值         * */        Map<String,String> variables=new HashMap<>();        variables.put("name","123");        variables.put("description","123");        StringBuffer hql=new StringBuffer();        hql.append("  from Classes ");        hql.append("  where 1=1");        /**         * 动态的拼接查询语句,如果一个属性的值为"",则不往条件中添加         */        for (Map.Entry<String,String> entry: variables.entrySet()) {            if (!entry.getValue().equals("")){                hql.append("  and  "+entry.getKey()+"=:"+entry.getKey());            }        }        Session session=sessionFactory.openSession();        Query query=session.createQuery(hql.toString());        for (Map.Entry<String,String> entry: variables.entrySet()) {            if (!entry.getValue().equals("")) {                query.setParameter(entry.getKey(), entry.getValue());            }        }        List<Classes> classes=query.list();        System.out.println(classes.size());        session.close();    }    /**     * 元数据     *   数据仓库     */    @Test    public void testClassMetaData(){        /**         * ClassMetaData可以得到持久化类的信息         *      标示符的名称         *      一般属性的名称         *      。。。。。         */        Map<String,ClassMetadata> map = sessionFactory.getAllClassMetadata();        for (Map.Entry<String, ClassMetadata> entry : map.entrySet()) {            System.out.println(entry.getKey());            ClassMetadata classMetadata = entry.getValue();            System.out.println("entityName:"+classMetadata.getEntityName());            System.out.println("identityName:"+classMetadata.getIdentifierPropertyName());            String[] propertiesNames = classMetadata.getPropertyNames();            for (String string : propertiesNames) {                System.out.println(string);            }        }        ClassMetadata classMetadata = sessionFactory.getClassMetadata(Classes.class);        System.out.println(classMetadata.getEntityName());        System.out.println(Classes.class.getName());    }//    @Test    Test 方法不能带有参数,会报错     public void testQueryClasses_Where_AnyCondition_MAO(Class className,Map<String, String> variables){        StringBuffer stringBuffer = new StringBuffer();        /**         * 通过className得到该实体类的字符串形式         */        stringBuffer.append("from "+sessionFactory.getClassMetadata(className).getEntityName());        stringBuffer.append(" where 1=1");        /**         * 动态的拼接查询语句,如果一个属性的值为"",则不往条件中添加         */        for (Map.Entry<String, String> entry : variables.entrySet()) {            if(!entry.getValue().equals("")){//如果属性不为""                stringBuffer.append(" and "+entry.getKey()+"=:"+entry.getKey());            }        }        Session session = sessionFactory.openSession();        Query query = session.createQuery(stringBuffer.toString());        /**         * 动态的给条件赋值         */        for (Map.Entry<String, String> entry : variables.entrySet()) {            if(!entry.getValue().equals("")){                query.setParameter(entry.getKey(), entry.getValue());            }        }        List<Classes> classes = query.list();        System.out.println(classes.size());        session.close();    }    @Test    public void testQueryEntry_Where_AnyCondition(){        /**         * Map<String,String>         *     key为持久化对象的属性         *     value为持久化对象的属性的值         */        Map<String, String> variables = new HashMap<>();        variables.put("name", "");        variables.put("description", "");        this.testQueryClasses_Where_AnyCondition_MAO(Classes.class,variables);    }}
    /**     * 查询唯一的结果     * */    @Test    public void testUniqueResult() {        Session session=sessionFactory.openSession();        Query query=session.createQuery("from com.sanmao.utils.Classes where cid=:cid");        query.setParameter("cid",1L);        Classes classes=(Classes) query.uniqueResult(); //返回唯一结果        System.out.println(classes.getName());        session.close();    }    /**     * 查询主键最大值     * 由函数查询出来的是Long 类型     * */    @Test    public void testMaxResult() {        Session session=sessionFactory.openSession();        Query query=session.createQuery("select  max(c.cid)  from com.sanmao.utils.Classes c");        System.out.println(query.uniqueResult());        session.close();    }
0 0