我用hibernate中的hql语句写了一个条件查询,但是不能正常执行,请帮忙看一下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用hibernate中的hql语句写了一个条件查询,但是不能正常执行,请帮忙看一下相关的知识,希望对你有一定的参考价值。
public List<User> selectUser(User user)
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("from User where 1=1 ");
if(user.getUsername()!=null&&user.getUsername().trim().length()>0)
stringBuffer.append("and username like +'%"+user.getUsername()+"%'");
if(user.getSex()!=null&&user.getSex().trim().length()>0)
stringBuffer.append("and sex="+user.getSex());
if(user.getEducation()!=null&&user.getEducation().trim().length()>0)
stringBuffer.append("and education="+user.getEducation());
if(user.getIsUpload()!=null&&user.getIsUpload().trim().length()>0)
if(user.getIsUpload().equals("1"))
stringBuffer.append("and filename is not null");
else if(user.getIsUpload().equals("2"))
stringBuffer.append("and filename is null");
String sql=new String(stringBuffer);
//1.开启session
Session session=sessionFactory.openSession();
//2.操作对象
Query query=session.createQuery(sql);
List<User>users=query.list();
session.close();
return users;
1,最好用StringBuilder或者StringBuffered
2,最好不要用where 1=1这样查询效率最低。
如果你想了解更多的Hibernate查询或者HQL的东西,看我的个人简介里面的推荐资料。 参考技术A 肯定执行不了了 都没有空格 输出的sql 不对
建议:写一个 test方法 传一个user 进来 看看你输出的 sql 是什么样子 然后根据你的sql 一项项的调
还有 你那些个 !=null, .trim().length()>0 你就不能抽一个方法出来 这样好难看的 参考技术B stringBuffer.append(" and education="+user.getEducation()); // and前,应该留一空格
如果查询的条件是字符串,应该加单引号。
——查询的条件,最好使用参数 。没你的环境,不太好测试。 参考技术C 你的sql只是相加了 但是你看看你的sql 的查询条件 如果都有的话 你的查询条件前后都没有空格,会连起来的,所以无法分析
Hibernate的增删改查操作
一、在Hibernate中使用原生SQL语句
- sql语句面向的是数据库,所以sql语句中对应的不再是bean了,比如sql="select * from user" 在hql中*是无效的,但是在sql中可以使用,且user指的是数据库中的user表。
案例一:
package action; import java.util.List; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.transform.Transformers; import bean.User; import util.HibernateUtil; /** * hibernate支持原生SQL语句操作 * * @author 半颗柠檬、 * */ public class Query_SQL { public static void main(String[] args) { Query_SQL.testQuery(); // hibernate支持原生SQL语句的查询操作 // Query_SQL.insert(); // insert语句 } private static void testQuery() { Session session = null; Transaction tran = null; SQLQuery sqlQuery = null; String sql = ""; try { session = HibernateUtil.getSession(); tran = session.beginTransaction(); // HQL语句不能使用* , 而原生sql语句可以,且user对应的是数据库中的表名而不是bean的类名 sql = " select * from user where username like :username "; sqlQuery = session.createSQLQuery(sql); sqlQuery.setString("username", "%user%"); sqlQuery.setFirstResult(0); sqlQuery.setMaxResults(2); // 查询结果默认返回数组 List<Object[]> objList = sqlQuery.list(); System.out.println(objList.size()); /** * 查询结果返回一个bean */ sql = " select * from user where username like :username "; sqlQuery = session.createSQLQuery(sql); sqlQuery.setString("username", "%user%"); // addScalar(String)方法作用: // 指定查询结果包含哪些数据列---没有被addScalar选出的列将不会包含在查询结果中。 sqlQuery.addScalar("username"); sqlQuery.addScalar("userid"); // 把结果转为bean,注意bean的字段名要和数据库的字段名一致,区分大小写 //如果数据库的字段和bean中的属性名不一致,这里的数据库中的is_admin和bean中的isadmin不一致,可以通过在sql语句中添加别名sql="select is_admin as isadmin"来使得 //两者一致 sqlQuery.setResultTransformer(Transformers.aliasToBean(User.class)); List<User> userList = sqlQuery.list(); for (User user : userList) { System.out.println("username=" + user.getUsername() + "\t userid=" + user.getUserid()); } tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } finally { HibernateUtil.closeSession(); } } private static void insert() { Session session = null; SQLQuery sqlQuery = null; Transaction tran = null; String sql = ""; try { session = HibernateUtil.getSession(); tran = session.beginTransaction(); sql = "insert into user(userid,username,password) values(?,?,?)"; sqlQuery = session.createSQLQuery(sql); sqlQuery.setParameter(0, 8); sqlQuery.setParameter(1, "user6"); sqlQuery.setParameter(2, "123"); int count = sqlQuery.executeUpdate(); System.out.println("插入了" + count + "条数据"); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } finally { HibernateUtil.closeSession(); } } }
代码在下面章节
以上是关于我用hibernate中的hql语句写了一个条件查询,但是不能正常执行,请帮忙看一下的主要内容,如果未能解决你的问题,请参考以下文章