通过这种方法来模糊查询,可以自定义匹配HQL语句
public List<User> searchUser(User user, PageInfo pageInfo) {
init();
Session session = null;
List<User> list = null;
try {
session = this.ht.getSessionFactory().openSession();
// 查询操作
String hql10 = "select u from User u where 1=1";
// 通过自定义的getHql()方法得到hql语句
hql10 = this.getHql(hql10, user);
Query q4 = session.createQuery(hql10);
this.setValue(q4, user);
list = (List<User>) q4.iterate();
// 分页操作
String hql11 = "select count(u) from User u ";
Query q2 = session.createQuery(hql11);
List list3 = q2.list();
int count = (Integer) list3.get(0);
pageInfo.setTotalRecords(count);// 设置总记录数
int temp = count % pageInfo.getEveryPage();// 得取总页数
if (temp == 0) {
pageInfo.setTotalPage(temp);
} else {
pageInfo.setTotalPage(temp + 1);
}
} catch (Exception e) {
}
return list;
}
// 设置Query值
private void setValue(Query q, User user) {
if (user.getUserName() != null
&& user.getUserName().trim().length() > 0) {
q.setString("userName", "%" + user.getUserName() + "%");
}if(user.getRegisterStartTime()!=null){
q.setString("registerStartTime", "%"+user.getRegisterStartTime()+"%");
}if(user.getResisterEndTime()!=null){
q.setString("registerEndTime", "%"+user.getResisterEndTime()+"%");
}
if (user.getName() != null && user.getName().trim().length() > 0) {
q.setString("name", "%" + user.getName() + "%");
}
if (user.getEmail() != null && user.getEmail().trim().length() > 0) {
q.setString("email", "%" + user.getEmail() + "%");
}
}
// 获取HQL语句
private String getHql(String hql, User user) {
StringBuffer buffer = new StringBuffer();
buffer.append(hql);
/**
* 判断用户名是否存在,如果存在,则append语句与传进来的hql进行组合 如:"hql"+"and o.address like
* :address"
*/
if (user.getUserName() != null
&& user.getUserName().trim().length() > 0) {
buffer.append(" and u.userName like :userName");
}
if (user.getRegisterStartTime() != null) {
buffer.append(" and u.registerTime >= :registerStartTime");
}
if (user.getResisterEndTime() != null) {
buffer.append(" and u.rigisterTime <= :registerEndTime");
}
if (user.getName() != null && user.getName().trim().length() > 0) {
buffer.append(" and u.name like :name");
}
if (user.getEmail() != null && user.getEmail().trim().length() > 0) {
buffer.append(" and u.email like :email");
}
return buffer.toString();
}