使用spring mvc web和hibernate更新表

时间:2010-10-01 10:11:48

标签: java hibernate spring spring-mvc

我有简单的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”类中处理上一本书和新书。

任何想法..?

提前感谢!

2 个答案:

答案 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模式以一种简洁的方式处理它。