📜  spring mvc 项目示例 - Java (1)

📅  最后修改于: 2023-12-03 15:20:13.247000             🧑  作者: Mango

Spring MVC 项目示例

本示例演示了如何使用 Spring MVC 框架构建一个简单的 Web 应用程序。

技术栈
  • Spring MVC
  • JSP
  • JSTL
  • Bootstrap
  • MySQL
  • Maven
部署步骤
  1. 在 MySQL 中创建数据库 springmvc_example_db
  2. 创建以下表格:
CREATE TABLE `books` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `author` varchar(255) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
  1. 克隆项目:git clone https://github.com/example/spring-mvc-example.git
  2. 进入项目目录:cd spring-mvc-example
  3. 编译项目:mvn clean package
  4. target/spring-mvc-example.war 部署到 Tomcat。
使用说明
  1. 访问 http://localhost:8080/spring-mvc-example/books 查看并管理书籍。
  2. 点击 "New Book" 添加新书籍。
  3. 点击书籍标题或 "Edit" 按钮编辑书籍信息。
  4. 点击 "Delete" 按钮删除书籍。
核心代码
Controller
@Controller
@RequestMapping("/books")
public class BookController {

    @Autowired
    private BookService bookService;

    @GetMapping
    public String listBooks(Model model) {
        List<Book> books = bookService.findAll();
        model.addAttribute("books", books);
        return "list-books";
    }

    @GetMapping("/new")
    public String newBook(Model model) {
        model.addAttribute("book", new Book());
        return "book-form";
    }

    @PostMapping("/save")
    public String saveBook(@ModelAttribute("book") Book book) {
        bookService.save(book);
        return "redirect:/books";
    }

    @GetMapping("/edit")
    public String editBook(@RequestParam("bookId") int id, Model model) {
        Book book = bookService.findById(id);
        model.addAttribute("book", book);
        return "book-form";
    }

    @GetMapping("/delete")
    public String deleteBook(@RequestParam("bookId") int id) {
        bookService.deleteById(id);
        return "redirect:/books";
    }
}

以上就是一个简单的 Spring MVC 控制器类。它使用 @Controller 注解声明,定义了几个方法来处理不同的请求类型。例如,listBooks() 方法用于返回书籍列表视图,newBook() 方法用于返回添加新书籍视图等。

Service
@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;

    @Override
    public List<Book> findAll() {
        return bookDao.findAll();
    }

    @Override
    public void save(Book book) {
        bookDao.save(book);
    }

    @Override
    public Book findById(int id) {
        return bookDao.findById(id);
    }

    @Override
    public void deleteById(int id) {
        bookDao.deleteById(id);
    }
}

以上是一个简单的 Spring 服务实现类。它使用 @Service 注解声明,实现了 BookService 接口中定义的基本书籍管理操作,如添加、编辑、删除等。

DAO
@Repository
public class BookDaoImpl implements BookDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<Book> findAll() {
        String sql = "SELECT * FROM books";
        List<Book> books = jdbcTemplate.query(sql, new BookMapper());
        return books;
    }

    @Override
    public void save(Book book) {
        String sql = "INSERT INTO books (title, author, price) VALUES (?, ?, ?)";
        jdbcTemplate.update(sql, book.getTitle(), book.getAuthor(), book.getPrice());
    }

    @Override
    public Book findById(int id) {
        String sql = "SELECT * FROM books WHERE id = ?";
        Book book = jdbcTemplate.queryForObject(sql, new Object[]{id}, new BookMapper());
        return book;
    }

    @Override
    public void deleteById(int id) {
        String sql = "DELETE FROM books WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }

    private static final class BookMapper implements RowMapper<Book> {

        @Override
        public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
            Book book = new Book();
            book.setId(rs.getInt("id"));
            book.setTitle(rs.getString("title"));
            book.setAuthor(rs.getString("author"));
            book.setPrice(rs.getDouble("price"));
            return book;
        }
    }
}

以上是一个简单的 Spring 数据访问对象 (DAO) 类。它使用 @Repository 注解声明,实现了 BookDao 接口中定义的基本书籍查询、添加、编辑、删除等操作。此外,它还定义了一个内部类 BookMapper,用于将 ResultSet 中获取到的数据映射到 Java 对象中。