web开发-动态sql实现模糊查询错误

问题描述

动态sql实现模糊查询错误

public List findByCondition(String readerTypeId, String barcode,
String name, final int page, final int pageSize)
throws DAOException {
final List params = new ArrayList();
final String hql = createFindHQL(readerTypeId, barcode, name, params, page,
pageSize);
List list = (List) super.getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
// 分页参数
int begin = (page - 1) * pageSize;
query.setFirstResult(begin);
query.setMaxResults(pageSize);
for (int i = 0; i < params.size(); i++) {
query.setParameter(i, params.get(i));
}
return query.list();
}
});
// 将list集合封装成List
List readerList = new ArrayList();
for (Object[] objs : list) {
ReaderVO vo = new ReaderVO();
Reader r = (Reader)objs[0];
//将r属性值给vo属性赋值
BeanUtils.copyProperties(r, vo);
vo.setReaderTypeName(objs[1].toString());
readerList.add(vo);
}
return readerList;
}

private String createFindHQL(String readerTypeId, String barcode, String name,
        List<Object> params, int page, int pageSize) {
    // 开始拼子查询
    StringBuffer sb = new StringBuffer();
    sb.append("select a,b.typeName ");
    sb.append("from Reader a,ReaderType b ");
    sb.append("where a.readerType = b.id ");
    if (readerTypeId != null
            && readerTypeId.length() > 0) {
        sb.append("and a.readerType=? ");
        params.add(readerTypeId);
    }
    if(barcode != null
            && barcode.length() > 0){
        sb.append("and a.barcode=? ");
        params.add(barcode);
    }
    if (name != null && name.length() > 0) {
        sb.append("and a.name like ? ");
        params.add("'%" + name + "%'");
    }
    sb.append("order by a.id");
    System.out.println(sb.toString());
    return sb.toString();
}

我JUnit方法:List list = readerDao.findByCondition("4", null, "om", 1, 5);
数据库中有name为"tom"的记录,但是没找到。
为什么?

时间: 2024-10-31 12:48:01

web开发-动态sql实现模糊查询错误的相关文章

为什么sql中模糊查询左百分号 无法用索引

问题描述 为什么sql中模糊查询左百分号 无法用索引 为什么sql中模糊查询左百分号 无法用索引,右百分号 却可以用索引? 解决方案 sql 中模糊查询转义 escape 解决方案二: 数据库一般都是前缀索引,所以支持模糊匹配在后面

jdbc 动态sql语句拼接 查询不出结果

问题描述 jdbc 动态sql语句拼接 查询不出结果 public List queryByCondition(String command String description) { // message列表 List messageList = new ArrayList(); try { // 加载驱动 Class.forName(""com.mysql.jdbc.Driver""); // 数据库的连接 Connection conn; conn = Dri

MyBatis实践之动态SQL及关联查询_MsSql

序言 MyBatis,大家都知道,半自动的ORM框架,原来叫ibatis,后来好像是10年apache软件基金组织把它托管给了goole code,就重新命名了MyBatis,功能相对以前更强大了.它相对全自动的持久层框架Hibernate,更加灵活,更轻量级,这点我还是深有体会的. MyBatis的一个强大特性之一就是动态SQL能力了,能省去我们很多串联判断拼接SQL的痛苦,根据项目而定,在一定的场合下使用,能大大减少程序的代码量和复杂程度,不过还是不是过度太过复杂的使用,以免不利于后期的维护

MyBatis实践之动态SQL及关联查询

序言 MyBatis,大家都知道,半自动的ORM框架,原来叫ibatis,后来好像是10年apache软件基金组织把它托管给了goole code,就重新命名了MyBatis,功能相对以前更强大了.它相对全自动的持久层框架Hibernate,更加灵活,更轻量级,这点我还是深有体会的. MyBatis的一个强大特性之一就是动态SQL能力了,能省去我们很多串联判断拼接SQL的痛苦,根据项目而定,在一定的场合下使用,能大大减少程序的代码量和复杂程度,不过还是不是过度太过复杂的使用,以免不利于后期的维护

Web开发中用sql语句完成分页的特效方法

这篇文章以jsp/asp为例,简要介绍了Web开发中一种用sql语句完成分页的高效率方法. 一.Jsp方法如下: **********************<%@ page language=java import=java.util.*,java.sql.* %><%@ page contentType=text/html;charset=gb2312%><jsp:useBean id=cn scope=page class=myConnection.Conn />

IOS开发数据库篇—SQLite模糊查询

一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: 1 // 2 // YYPerson.h 3 // 03-模糊查询 4 // 5 // Created by apple on 14-7-27. 6 // Copyright (c) 2014年 wendingding. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 11 @interface Y

模糊查询 错误

问题描述 新手求助.想把书上的例题改下,变成模糊查询,但老是出错,请各位高手拉兄弟一把.ModulemdlDisplaySearchData[查询的类]PublicSubDataBind(ByValconnStrAsString,ByValTableAsString,ByValfrmConntrolAsDataGridView,ByValstrFieldAsString,ByValstrValueAsString)'连接数据库DimcnAsNewOleDb.OleDbConnection(con

php 简单内容查询代码 利用sql like模糊查询

<head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <script language="javascript教程">  check111cnNet()  {   var keyword = myfm.keyword.value;   if( keyword =='' )   {    alert('www.1

sql server怎么模糊查询某几列

问题描述 sql server怎么模糊查询某几列 小白一个,正在做一个管理系统,有第一周到第二十周的数据,怎么每次通过写入第几周,把本周的数据查询出来呢 解决方案 在数据查询的时候,有完整查询和模糊查询之分.在Access和SQL Server中使用模糊查询有一下几种查询: 1.用_通配符查询 "_"号表示任意单个字符,该字符号只能匹配一个字符,利用"_"号可以作为通配符组成匹配模式进行查询."_"符号可以放在查询条件 的任意位置,且只能代表一个