我正在设计一个款待应用程序。并且在从数据库中获取多行时遇到了一些问题。我正在使用Hibernate,Spring Web MVC,mySQL和JSP。我有控制器,服务,Dao,模型层。我设计了一个搜索页面,以根据用户所在的城市查看他们的个人资料。例如,当我在搜索屏幕上的城市字段中写入“ NewYork”时,它将显示居住在NewYork中的用户个人资料列表,并将isHosting值标记为true。
这是我的User类:
public class User{
@Column(unique = true, nullable = false)
private String username;
...
private String city;
private String isHosting;
public boolean isHosting() {
return hosting;
}
public void setHosting(boolean hosting) {
this.hosting = hosting;
}
...
}
搜索类别:
public class Search {
private String city;
private String sdate;
private String fdate;
private String numOfvisitor;
...
}
我这道课:
@Repository
public class SearchDao extends GenericDao<User> {
public User findByUserCity(final String city){
final Criteria c = createCriteria(User.class).add(Restrictions.eq("city", city));
return (User) c.uniqueResult();
}
}
服务等级:
@Service
@Transactional
public class SearchService extends GenericService<User>{
@Autowired
public SearchService(SearchDao dao) {
super(dao);
}
...
public User findByUserCity(final String city) {
return ((SearchSurferDao) this.dao).findByUserCity(city);
}
}
和控制器类:
@RequestMapping(value = "/search", method = RequestMethod.GET)
public ModelAndView search(@ModelAttribute Search search) {
User user = SearchService.findByUserCity(search.getCity());
ModelAndView result = new ModelAndView("hello");
...
result.addObject("username", user.getUsername());
return result;
}
我知道我需要编写一个数据库查询,该查询返回一个列表,并且需要将该列表发送到JSP文件,并且可以使用foreach标记在屏幕上看到配置文件。但是如何编写数据库查询以从db获取此类列表,而实际上将其放在哪个类中呢?我需要在Controller中做什么?在哪里可以查看isHosting值?
Criteria c = createCriteria(User.class).add(Restrictions.eq("city", city));
return (User) c.uniqueResult();
上面的代码确实创建了一个查询,该查询查找具有给定城市的用户。但它假设给定城市中只有一个用户,事实可能并非如此。方法应该是
public List<User> findByUserCity(final String city) {
Criteria c = createCriteria(User.class).add(Restrictions.eq("city", city));
return c.list();
}
另外,Criteria API导致难以阅读的代码,并且当您必须基于多个搜索条件动态组成查询时,该标准非常适合。对于这样的静态查询,您应该使用HQL:
public List<User> findByUserCity(String city) {
return session.createQuery("select u from User u where u.city = :city")
.setString("city", city)
.list();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句