Hibrenate hibernate query language(单表操作)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值