我正在使用Java Spring和JDBC处理CRUD应用程序。我看过教程,但我坚持使用crUd的“U”字母:)。 我做过一些事情,但如果你能帮助我,我将不胜感激。
以下是我所做的事情:
TournamentDAO:
public void edit(Tournament tournament){
String sql = "update TOURNAMENT.TOURNAMENT set name = ? , location = ? , date = ? , where id = ?";
m_jdbcTemplate.update(sql,
new Object[]{
tournament.getName(),
tournament.getLocation(),
tournament.getDate(),
Long.toString(tournament.getId())
});
}
Controller“EditTournament”:
@Controller
public class EditTournament {
@Autowired
private TournamentService turnirSer;
@RequestMapping(value = "/editTournament", method = RequestMethod.GET)
public ModelAndView edit(@RequestParam("id") Integer id) {
ModelAndView mav = new ModelAndView("editTournament");
Tournament Tournament = turnirSer.getById(id);
mav.addObject("editTournament", tournament);
return mav;
}
@RequestMapping(value = "/editTournament", method = RequestMethod.POST)
public String update(Model model, @Valid Tournament tournament,
BindingResult bindingResult,
@ModelAttribute("tournamentList") ArrayList<Tournament> TournamentList) {
if (!bindingResult.hasErrors()) {
turnirSer.editTournament(tournament);
tournamentList.add(tournament);
}
return "editTournament";
}
}
现在只是说我知道这完全是一个MESS,这就是我需要你帮助的原因!
在这一行:
Tournament Tournament = turnirSer.getById(id);
我没有方法getById(id)
,我把它作为基于Hibernate的教程,我不使用,我不知道如何创建一个!
有人可以解释一下我的错误以及如何编写此代码以便我的更新有效。
PS。创建,读取和删除工作正常。在这里发布这个问题是我的最后一个选择,我已尽我所能。
答案 0 :(得分:4)
你有额外的
,
在查询中的where
之前
date = ? , where id = ?";
答案 1 :(得分:0)
您可以在TournamentDAO
(或其超类中,如果您想要实现它通用名称)中再添加一个名为getById(String id)
的方法,实现类似于
public Tournament getById(String id){
String sql = "select name, location, date from TOURNAMENT.TOURNAMENT where id = :id";
List<Map<String, String>> results = m_jdbcTemplate.queryForList(sql, new HashMap<String, String>(){{put("id", id)}});
//as id would be the primary key, at max you may one record (one entry in the list).
Map<String, Object> result = results.get(0); //add a check for no results
Tournament t = new Tournament();
t.setName(result.get("name"));
//set all your properties as mentioned above
return t;
}
jdbctemplate
提供了其他选项,例如RowMaper
和RowCallbackHandler
,可帮助您自动对属性名称进行硬编码。
参考this link获取基本示例。