Hibernate查询方法

1: QBE (Query By Example)
   Criteria cri = session.createCriteria(Student.class);
   cri.add(Example.create(s)); //s是一个Student对象
   list cri.list();  
   实质:创建一个模版,比如我有一个表serial有一个 giftortoy字段,我设置serial.setgifttoy("2"),
         则这个表中的所有的giftortoy为2的数据都会出来

2: QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成
   session = this.getSession();
   Criteria cri = session.createCriteria(JdItemSerialnumber.class);
   Criterion cron = Restrictions.like("customer",name);
   cri.add(cron);
   list = cri.list();
   ==============================
   比较运算符
   HQL运算符                   QBC运算符                      含义
      =                     Restrictions.eq()                  等于
      <>                   Restrictions.not(Exprission.eq())  不等于
      >                     Restrictions.gt()                  大于
      >=                   Restrictions.ge()                  大于等于
      <                     Restrictions.lt()                  小于
      <=                   Restrictions.le()                  小于等于
      is null             Restrictions.isnull()              等于空值
      is not null      Restrictions.isNotNull()           非空值
      like                 Restrictions.like()                字符串模式匹配
      and                Restrictions.and()                 逻辑与
      and                Restrictions.conjunction()         逻辑与
      or                   Restrictions.or()                  逻辑或
      or                   Restrictions.disjunction()         逻辑或
      not                  Restrictions.not()                 逻辑非
      in(列表)          Restrictions.in()                  等于列表中的某一个值
      ont in(列表)         Restrictions.not(Restrictions.in())不等于列表中任意一个值
      between x and y      Restrictions.between()             闭区间xy中的任意值
      not between x and y  Restrictions.not(Restrictions..between()) 小于值X或者大于值y

3: HQL
   String hql = "select s.name ,avg(s.age) from Student s group by s.name";
   Query query = session.createQuery(hql);
   list = query.list();
   ....

4: 本地SQL查询
   session = sessionFactory.openSession();
   tran = session.beginTransaction();
   SQLQuery sq = session.createSQLQuery(sql);
   sq.addEntity(Student.class);
   list = sq.list();
   tran.commit();

5: QID
   Session的get()和load()方法提供了根据对象ID来检索对象的方式。该方式被用于事先知道了要检索对象ID的情况。


Hibernate3的Like用法中 中文查询问题的解决方法
2006年12月07日 星期四 09:37转自:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1340841





原本我的写法:Query repeatClientQuery=querysession.createQuery("from ClientInfo as a "
                                          +"where a.client_name like :name" );
                repeatClientQuery.setParameter("name",clientname);
查询无结果.

LIKE 'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
LIKE '%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
LIKE '[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、以从M到Z的任何单个字母开头的所有名称如 。
LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如 MacFeather)。

直接写
String sql = "from ClientInfo as a where a.client_name like '%"+ clientname+"%'");
Query repeatClientQuery=querysession.createQuery(sql);
成功.

但是却不能查询中文,假如clientname是客户1名字的话,那么将查不到结构,解决办法:

1.用占位符:

                  Query query = session
                        .createQuery("select count(*) from Privilege p where p.name like ?");
                query.setString(0, "%" + name + "%");// 注意这里不能写成setString(0," '%" + name + "%' ";否则查不出来结果,不能加‘单引号

2.修改查询编译器:

Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。
(1)选择Hibernate3.0的查询翻译器:
hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
(2)选择Hibernate2.1的查询翻译器
hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
为了使用3.0的批量更新和删除功能,只能选择(1)否则不能解释批量更新的语句,当使用的时候出现了不支持条件输入中文的情况。选择(2)可以支持输入中文,但没法解释批量更新语句了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值