hibernate 六种查询方法

阅读: 评论:0

hibernate 六种查询方法

hibernate 六种查询方法

hibernate查询的6种方法。分别是1.HQL查询,2.对象化查询Criteria方法,3.动态查询DetachedCriteria,4.例子查询,5.sql查询,6.命名查询

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

static void query(String name){
  Session s

  Session s = null ;
   try {
   s = Session();
   
    // 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.Aname());
   }
  } finally {
    if (s != null )
   s.close();
  }

 }

二.对象化查询Criteria方法(适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。)

static void cri(String name,String password){
  Session s=null;
  try{
   s&#Session();
   
   Criteria c&#ateCriteria(Admin.class);
   c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
   c.add(Restrictions.eq("apassword", password));
   
   List<Admin> list=c.list();
   for(Admin admin:list){
    System.out.Aname());
   }
  }finally{
   if(s!=null)
   s.close();
  }

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

static List dc(DetachedCriteria dc) {

  Session s = Session();
  Criteria c = dc.getExecutableCriteria(s);
  List rs = c.list();
  s.close();
  return rs;
 }

--------------------------------------------------------------------

DetachedCriteria dc = DetachedCriteria.forClass(User.class);
  int id = 1;
  if (id != 0)
   dc.add(Restrictions.eq("id", id));
  Date age = new Date();
  if (age != null)
   dc.add(Restrictions.le("birthday", age));
  List users = dc(dc);
  System.out.println("离线查询返回结果:" + users);

四.例子查询(适用情况:面向对象操作。   缺点:适用面较HQL有限,不推荐。) static List example(User user) {
  Session s = Session();
  List<User> users = s.createCriteria(User.class).add(
    ate(user)).list();
  // List<User>
  // users2&#ateCriteria(User.class).add((ate(user)).ignoreCase())
  // .createCriteria("child").add((ate(user))).list();
  return users;
 }

五. SQL查询 (适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法   缺点:破坏跨平台,不易维护,不面向对象。) static List sql() {

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

六.命名查询(适用情况:万能方法,有点像ibatis轻量级框架的操作,方便维护。  缺点:不面向对象。基于hql和sql,有一定缺陷。) static List namedQuery(int id) {
  Session s = Session();
  Query q = s.getNamedQuery("getUserById");
  q.setInteger("id", id);
  return q.list();
 }

------------------------------------------------ <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
".0.dtd">

<hibernate-mapping>
    <class name="com.sy.vo.User" table="user" catalog="news">
    
 

    </class>
    <!-- 命名查询:定义查询条件 -->
    <query name="getUserById">
     <![CDATA[from User where id=:id]]>
    </query>
    <!-- 命名查询中使用sql,不推荐使用,影响跨数据库
    <sql-query name="getUserById2">
     <![CDATA[select * from User where ]]>
    </sql-query> -->
</hibernate-mapping>

本文发布于:2024-02-01 13:56:53,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170676701437080.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:六种   方法   hibernate
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23