我有简单的spring mvc web应用程序,它可以处理简单的书店。当现有图书正在更新时,我遇到了问题。
我想要更新一本书的日期标题。 我的updateBook.jsp就是这样的东西。
<form method="post" action="">
Previous book title : <input type="text" name="previousTitle" /> <br>
New book title :<input type="text" name="newTitle"/><br>
<input type="submit" name="update" value="update"/>
</form>
问题:我有java类,“UpdateBookController”用于处理书的更新。 如何在“UpdateBookController”类中处理上一本书和新书。
任何想法..?
提前感谢!
答案 0 :(得分:3)
Spring 3.0方式
@Controller
public class BookController {
@Autowired
private BookRepository<Book, Integer> bookRepository;
@RequestMapping(method=RequestMethod.POST)
public void updateTitle(@RequestParam("bookId") Integer bookId,
@RequestParam("previousTitle") String previousTitle,
@RequestParam("newTitle") String newTitle) {
Book book = bookRepository.findById(bookId);
book.setPreviousTitle(previousTitle);
book.setNewTitle(newTitle);
bookRepository.merge(book);
}
}
BookRepository可以写成
@Repository
public class BookRepository extends AbstractRepository<Book, Integer> {
@Autowired
private SessionFactory sessionFactory;
@Override
public void merge(Book book) {
sessionFactory.getCurrentSession().update(book);
}
}
如果需要,可以创建一个自定义的UpdateTitleUseCase命令类,它封装了previousTitle和newTitle属性。这样,您的控制器看起来像
@RequestMapping(method=RequestMethod.POST)
public void updateTitle(UpdateTitleUseCase command) {
Book book = bookRepository.findById(command.getBookId());
book.setPreviousTitle(command.getPreviousTitle());
book.setNewTitle(command.getNewTitle());
bookRepository.merge(book);
}
答案 1 :(得分:0)
这样的事情怎么样:
Session sess = null;
try {
SessionFactory fact = new Configuration().configure().buildSessionFactory();
sess = fact.openSession();
Transaction tr = sess.beginTransaction();
Book book = (Book)sess.get(Book.class, new Long(<id of the book to update>));
book.setTitle(<new title>);
sess.update(book);
tr.commit();
sess.close();
System.out.println("Update successfully!");
}
catch(Exception e){
System.out.println(e.getMessage());
}
但是,您可能希望使用DAO模式以一种简洁的方式处理它。