Java自学之路-Java中级教程-37:Hibernate使用HQL按条件查询列表数据

按条件查询的sql语句即使用where关键字,比如按名字查询Person的sql语句为select * from new_table where name="hibernate";


同样,使用HQL语句也可以实现按条件查询。

Query query = sessionFactory.getCurrentSession().createQuery("from Person where name='ch'");


如果要把name作为方法的参数传入进来,就需要给HQL语句增加一个可变动的填充,也就是要参数化HQL语句,可以改一下,把'ch'改为?,并使用Query的setParameter方法把?占位符替换掉再查询。

Query query = sessionFactory.getCurrentSession().createQuery("from Person where name=?“);

query.setParameter(0, name);

List personList = query.list();


如此就查询出根据name条件的列表personList。这个结果列表可以是多个,因为名字为ch的Person可能很多personList.size() >0,我们只需从personList中取出第一个personList.get(0);并且要强制转为Person的对象result。

if(personList.size() >0) {
Person result = (Person)personList.get(0);
return result;
}

在PersonDaoSessionImple.java中可以实现整个按name条件查询的方法getPersonByName(String name):


	@Override
	public Person getPersonByName(String name) {
		Query query = sessionFactory.getCurrentSession().createQuery("from Person where name=?");
		query.setParameter(0, name);
		List personList = query.list();
		
		if(personList.size() >0) {
			Person result = (Person)personList.get(0);
			return result;
		}
		return null;
	}

在PersonService.java和PersonServiceImpl.java中已经有了findPersonByName这个方法的PersonDao调用,PersonController.java的login方法也有了按照name查询的实现。


	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public Object login(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) {
		try {
			
			Person person = personService.findPersonByName(personForm.getName());
			if(person.getPassword().equals(personForm.getPassword())) {
				request.getSession().setAttribute("person", person);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "default";
	}
访问http://localhost:8080/springMvcMavenProject/loginForm.jsp,输入用户名和密码,比如 cheering和123,可以查询到名字cheering对应的记录,显示在网页上。



提示:如果查询不到一条记录,这里会出现一个NullPointerExcception即空指针异常,这个异常也是常见的,因为记录是空的,改进方法为加入判断空值的语句。


Person person = personService.findPersonByName(personForm.getName());
if(person!= null) {
if(person.getPassword().equals(personForm.getPassword())) {
request.getSession().setAttribute("person", person);
}
}

猜你喜欢

转载自blog.csdn.net/weixin_41239710/article/details/80873202