开发者

update table using spring mvc web and hibernate

开发者 https://www.devze.com 2023-01-18 20:40 出处:网络
I have simple spring mvc web application which can handle simple book store. I have a problem when the existing book is updating.

I have simple spring mvc web application which can handle simple book store. I have a problem when the existing book is updating.

I want to up date title of a book. My updateBook.jsp is somethig like this.

<form method="post" action="">
    Previous book title : <input type="text" name="previousTitle" /> <br>
    New book title :<input type="text" name="newTitle"/><br>
    <input t开发者_如何学Cype="submit" name="update" value="update"/>
</form>

Problem: I have java class,"UpdateBookController" for handle the update of book. How can I handle the previous and new book titles in "UpdateBookController" class.

any idea..?

Thank in advance!


Spring 3.0 way

@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);
    }

}

Where BookRepository can be written as

@Repository
public class BookRepository extends AbstractRepository<Book, Integer> {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void merge(Book book) {
        sessionFactory.getCurrentSession().update(book);
    }

}

If you want, you can create a custom UpdateTitleUseCase command class which encapsulates previousTitle and newTitle attributes. This way, your controller looks like

@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);
}


How about something like this:

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());
}

However, you may want to use the DAO pattern to handle this in a neat way.

0

精彩评论

暂无评论...
验证码 换一张
取 消