• hibernate查询竟然有6种方法


    hibernate查询的6种方法

    1.HQL查询

    2.对象化查询Criteria方法

    3.动态查询DetachedCriteria

    4.例子查询

    5.sql查询

    6.命名查询


    1、HQL查询

    static void query(String name){
      Session s=null;
      try{
       s=HibernateUtil.getSession();
       
       //from后面是对象,不是表名
       String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
       Query query=s.createQuery(hql);
       query.setString("name", name);
       
       List<Admin> list=query.list();
       
       for(Admin admin:list){
        System.out.println(admin.getAname());
       }
      }finally{
       if(s!=null)
       s.close();
      }
     }

    适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。

    2、对象化查询Criteria方法:

    static void query(String name){
      Session s=null;
      try{
       s=HibernateUtil.getSession();
       
       //from后面是对象,不是表名
       String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
       Query query=s.createQuery(hql);
       query.setString("name", name);
       
       List<Admin> list=query.list();
       
       for(Admin admin:list){
        System.out.println(admin.getAname());
       }
      }finally{
       if(s!=null)
       s.close();
      }
     }

    适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。

    3、动态分离查询DetachedCriteria

    static List dc(DetachedCriteria dc) {
    
      Session s = HibernateUtil.getSession();
      Criteria c = dc.getExecutableCriteria(s);
      List rs = c.list();
      s.close();
      return rs;
     }

    适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。  缺点:适用面较HQL有限。

    4、例子查询

    static List example(User user) {
      Session s = HibernateUtil.getSession();
      List<User> users = s.createCriteria(User.class).add(
        Example.create(user)).list();
      // List<User>
      // users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
      // .createCriteria("child").add((Example.create(user))).list();
      return users;
     }

    适用情况:面向对象操作。   缺点:适用面较HQL有限,不推荐。

    5、sql查询

    static List sql() {
    
      Session s = HibernateUtil.getSession();
      Query q = s.createSQLQuery("select * from user").addEntity(User.class);
      List<User> rs = q.list();
      s.close();
      return rs;
     }

    适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法   缺点:破坏跨平台,不易维护,不面向对象。

    6、命名查询

    static List namedQuery(int id) {
      Session s = HibernateUtil.getSession();
      Query q = s.getNamedQuery("getUserById");
      q.setInteger("id", id);
      return q.list();
     }

    适用情况:万能方法,有点像ibatis轻量级框架的操作,方便维护。  缺点:不面向对象。基于hql和sql,有一定缺陷。

  • 相关阅读:
    OpenCV -- Mat 转 QImage 函数
    Qt--checkbox
    QT 发布release版本
    JS_0014:JS刷新页面
    JS_0013:JS获取文件后缀名
    JS_0012:JS从一个有规则的字符串中随机选择一个字符再循环生成一个新的无规则的字符串
    JQuery0016:JQuery等待页面全部加载完后执行代码块
    JQuery0015:JQuery查找指定元素并修改其属性
    JS_0011:通过JS给div添加html标签内容
    JS_0010:获取url中指定的参数
  • 原文地址:https://www.cnblogs.com/huangjinyong/p/9067920.html
Copyright © 2020-2023  润新知