about Query of hibernate

    Query和Criteria接口:都是查询接口,query实例包装了HQL查询语句,hql是面向对象的,他引用类名及类的属性名,而不是表名和字段名。

    Criteria接口完全封装了基于字符串形式的查询语句,比query接口更面向对象,他擅长执行动态查询。
    sessoin接口的find方法也具有数据查询功能,但他只是执行一些简单的hql查询语句的快捷方式,远没 有query接口功能强大。

String hql=from BookInfo b where b.isbn like ? and b.lname like ?;
hql.setParameter(0," 111111");
hql.setParameter(1," zhen");
Query query=getSession().createQuery(hql);

0 代表Parameter所在参数数组的index。

//很多时候eclipse提示getSession().createSQLQuery(hql);这样查询就会出错,因为这个方法是针对原生的SQL。

//通过ID或者名字的模糊查询获取 User

public List<Login> listUserByEmployeeIdOrLastName(String str) {
  String query =
   "select l from Login l, Person p " +
   "where l.dirty = 0 AND p.dirty = 0 AND l.userType = :userType and l.person.personId = p.personId " +
   "and (l.userName like :employeeId OR p.lastName like :lastName ) order by p.firstName";
    
  String userQueryStr = str+"%";
  Query hql= getSession().createQuery(query);//创建query对象
  hql.setParameter("userType", Login.USER_TYPE_EMPLOYEE);//占位符赋值
  hql.setParameter("employeeId", userQueryStr);
  hql.setParameter("lastName", userQueryStr);
  
  List<Login> list = hql.list();//查实返回对象数组(object【】)
  return list;
 }

==========细心的会看到有三个:冒号。========

这里的作用是占位符,在Query 实例后进行setParameter,相当于上面的?赋值。

这样比较直观,不容易因为写代码时参数的位置问题导致出错。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值