首页 > 其他分享 >hibernate——两种查询方式

hibernate——两种查询方式

时间:2023-08-27 11:04:58浏览次数:30  
标签:hibernate 两种 查询 session user User query name


一种是hql语句查询,用Query接口去实现;一种是条件查询,用Criteria接口去实现。这两种方式作用差不多,只是后者更符合面向对象一些。

用hql语句查询,如下例:

public static void query(String name){
		
		Session session=null;
		try{
			session=HibernateUtil.getSession();
			
			//String hql1="from User as user where user.name=?";
			//Query query=session.createQuery(hql1);
			//query.setString(0, hql1);
			
			String hql2="from User as user where user.name=:username";//使用命名参数
			Query query=session.createQuery(hql2);
			query.setString("username", name);
			
			query.setFirstResult(0);
			query.setMaxResults(10);//查询分页
			
			List<User> list = query.list();
			
			for(User user:list){
				System.out.println(user.getName());
			}
		}catch(HibernateException e){
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}




使用条件查询,如下例:

public static void criteria(String name){
		Session session=null;
		try{
			session=HibernateUtil.getSession();
			
			Criteria criteria=session.createCriteria(User.class);//条件查询
			criteria.add(Restrictions.eq("name", name));//增加约束条件,第一个参数是对象中的属性名,后一个是查询条件,eq就是equals的意思
			criteria.add(Restrictions.lt("birthday", new Date()));//lt是less than,即小于的意思
			
			List<User> list = criteria.list();
			
			//User user=(User)criteria.uniqueResult();//若查询结果只有一个的话,那么用这个方法也可以
			
			for(User user:list){
				System.out.println(user.getName()+" "+user.getBirthday());
			}
		}catch(HibernateException e){
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}




标签:hibernate,两种,查询,session,user,User,query,name
From: https://blog.51cto.com/u_5173797/7251430

相关文章

  • hibernate——和数据库关联的对象的三种状态
    和数据库关联的对象有三种状态:瞬时,持久,脱管。瞬时:在数据库中还没有与该对象关联的记录,仅仅是一个普通的对象而已,超过作用域,就会被回收。一般都是new出来的对象,并且还没有与session建立联系。持久:与session建立了联系,并且在数据库中已经有了和该对象关联的记......
  • Struts2中防止表单重复提交的两种方式
    防止表单重复提交,这是个很重要的知识点,而且很有用。当用户提交了一个表单,此时,地址栏显示的是处理这个表单的Action的地址,若此时刷新,则会重新发送一次表单数据,即又进行了一次提交,若这个Action是用来处理用户注册的,那么重复提交会再一次向数据库中插入之前已经插入的数据,这显然不是我......
  • hibernate——一对一、多对一和多对多关系的比较
    现在学习完了这几种映射关系,但是有点乱,这里来小结一下。关键是表之间如何产生映射关系,以及产生的表的结构。1、一对一映射:一对一是通过one-to-one标签来产生映射关系的,其实,如果单单说是建立两个表之间的关联,只要在一个映射文件中配置one-to-one标签就可以了,在另一个映射文件中,也做......
  • 数据库基本语法四 数据库查询(DQL)
    数据查询语言(DQL)是SQL语言中的一部分,主要用于查询数据库中的数据。DQL允许用户根据特定的条件来检索表中的数据,并且可以包含一些基本的操作和条件。语法结构:SELECT列名称1,列名称2FROM表名称;其中,SELECT指定要检索的列,FROM指定要查询的表,WHERE指定筛选条件。以下是一些......
  • 在 Linux/Unix/Mac 下清除 DNS 查询缓存
    在MS-Windows下,你可以使用ipconfig命令来清除dns缓存。然而,Linux和Unix提供了不同的方法来清除缓存。Linux可以运行nscd或者BIND或者dnsmasq作为名称服务缓存守护进程。大型或者工作组服务器可能使用BIND或者dnsmasq作为专用缓存服务器来加速查询。如何:清除nscd......
  • 两种不同的方法来检查Python中的变量是否是字符串
    在Python中,每个变量都有一个数据类型。数据类型表示一个变量内部存储的是哪种数据。数据类型是编程语言最重要的特征,它区分了我们可以存储的不同类型的数据,如字符串、int和float。在处理许多编程问题时,可能会遇到这样的情况:我们需要找到某个变量的数据类型来对其执行一些任务。......
  • DQL-分页查询
       页数就是里面的那个第几行......
  • linux 查询日志
    1定位错误日志所在的行数cat-ntest.log|grep"查找的错误关键字"2得到错误关键字所在行号(假设为第500行),查询错误关键字前后100行数据    cat-ntest.log|tail-n+400|head-n2003  查看日志中出现关键字 "错误的关键信息提示"的前后10行内容 cat-n......
  • sqlserver跨数据库查询
    方法一`execsp_droplinkedsrvloginpms,Nullexecsp_dropserverpmsexecsp_addlinkedserver@server='pms',--被访问的服务器别名@srvproduct='',@provider='SQLOLEDB',@datasrc=''--要访问的服务器execsp_addlinkedsrvlogin'pms�......
  • 子查询用order by,外层用group by但是order by没生效
    今天遇见一个需求:从entity表查询name在我传过来的一个name集合里面,但是同一个name可能会重复,所以我需要根据plan字段判断取每个name的第一条,如果plan=我传进来的plan,优先,plan不等于我传进来的参数的情况下,如果plan不为空,优先,最后就是plan为空的数据。返回的数据就是每个name的第一......