现在我帮老师做一个图书在线商城.我期中有一个子模块是图书高级搜索.期中从页面拿回来的5个参数都是进行模糊搜索的.(like ) 会员也可以只对一个字段进行搜索.相信大家也明白.就像当当高级搜索一样.可以所有关键字都填了.也可以任意填写期中的参数进行高级搜索.现在我写了一个sql语句生成类.如果页面拿回来的字段是空的.那我就不生成那个字段的搜索关键字例如 from Book book where 1=1 and book.bookName like '%?%'and book.author like '%?%'
如果会员只填写了书名.那sql只会生成from Book book where 1=1 and book.bookName like '%?%'
我现在是用Hibernate...我查询语句可以动态生成..但是我的Hibernate查询架构session.createSQLQuery().setString()...list()无法动态生成的.还有一个头痛的地方...所有字段都不是string的有些是Integer和Float需要转换.请问高手们我应该用什么方法解决高级搜索?
如果会员只填写了书名.那sql只会生成from Book book where 1=1 and book.bookName like '%?%'
我现在是用Hibernate...我查询语句可以动态生成..但是我的Hibernate查询架构session.createSQLQuery().setString()...list()无法动态生成的.还有一个头痛的地方...所有字段都不是string的有些是Integer和Float需要转换.请问高手们我应该用什么方法解决高级搜索?
解决方案 »
- jpa OneToMany的简单问题
- web开发中,生成的文件如果保存在硬盘,一般保存在哪?
- JSP高级请高人解决?(重量级问题:急求)
- struts-config.xml的input问题 请帮忙看看
- JSTL的下载问题
- 如何手动创建Struts项目,不用任何IDE
- 求教mysql
- 我建了一个实体bean为什么出错啊????
- 各位大神,请教一下每秒访问一次URL的问题
- JAVA问题,我把tomcat项目部署在一台电脑,我用另一台电脑用访问项目,然后我有一个方法是删除本地文件夹下面的文件,我想删除的是访问的那台电脑
- 请问怎么用Struts2接收数组数据?
- 利用struts2 session防止数据重复提交
String sql = from Book book where 1=1
if(book.bookName !=null)
{
sql+=and book.bookName like '%?%'
}你添加Struts框架,用实体类作为Form属性不就把转型解决了吗?
String[] para = {"bookName","author","bookcategory.categoryId"};
Object[] value = {123,"交友会",23.56,};
String pojoAlias = "book";
String pojoName = "Book";
String dis = sqlGenerator(para,value, pojoAlias, pojoName);
System.out.println(dis);
}
private static String sqlGenerator(String[] paraName, Object[] value, String pojoAlias, String pojoName) {
StringBuffer sql = new StringBuffer("from ");
sql.append(pojoName).append(" ").append(pojoAlias).append(" where 1=1");
String strAnd = " and";
String strLike = " like ";
for (int i=0;i<paraName.length;i++) {
if ("" != value[i] && value[i] != null) {
sql.append(strAnd).append(" ").append(pojoAlias).append(".").append(paraName[i]).append(strLike).append("'%" + value[i] + "%'");
}
}
return sql.toString();
}现在我只能把一条构建好带值得语句传到Hibernate里面了.
Criteria cri = session.createCriteria(Book.class);if(name != null) {
cri.add(Expression.like("name", "%" + name + "%");
}
if(author != null) {
cri.add(Expression.like("author", "%" + author + "%");
}List books = cri.addOrder( Order.asc("date") )
.setFirstResult(0)
.setMaxResults(10)
.list();