Java中springboot搭建html

这篇具有很好参考价值的文章主要介绍了Java中springboot搭建html。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

最终效果图

 前言:springboot是什么

一、实现类和接口类

在Book中设置图书的属性

BookRepository接口

BookServiceImpl实现类

BookService接口

BookController业务层

二、html搭建

连接MySQL

index.html 搭建基本框架

add_book.html搭建新增图书界面,通过添加的超链接进入界面

updata_book.html搭建更新图书界面,通过添加的超链接进入界面

query_book.html中设置了超链接跳转到查询图书的界面中


最终效果图

springboot html,java,spring boot,spring

 前言:springboot是什么

Spring Boot简化了开发人员对Spring框架的应用程序的搭建和配置过程,提供了一套简单易用的开发工具和规范,使开发人员能够更专注于业务逻辑的开发,而无需过多关注繁琐的配置和细节。

一、实现类和接口类

springboot html,java,spring boot,spring

在Book中设置图书的属性

package com.lzzy.project.model;

import jakarta.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "book")
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "name")
    private String name;

    @Column(name = "writer")
    private String writer;

    @Column(name = "state")
    private String state;

    @Column(name = "price")
    private int price;
}

BookRepository接口

JpaRepositorySpring Data JPA框架提供的一个接口,它提供了许多用于操作数据库的方法,例如保存数据、查询数据、删除数据等。通过继承JpaRepository接口,BookRepository就可以使用这些方法来对Book实体对象进行持久化操作。

并且设置了模糊查询。

package com.lzzy.project.repository;

import com.lzzy.project.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
    @Query("SELECT b FROM Book b WHERE b.name LIKE %:keyword%")
    List<Book> findByNameContaining(@Param("keyword") String keyword);
}

BookServiceImpl实现类

BookServiceImpl中通过这些方法的实现,BookServiceImpl类成为了一个BookService接口的实现类,可以提供对书籍的保存、查询和删除等服务操作。

package com.lzzy.project.service;

import com.lzzy.project.model.Book;
import com.lzzy.project.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;


@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookRepository bookRepository;

    @Override
    public void saveBook(Book book) {this.bookRepository.save(book);}

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

    @Override
    public void deleteBookById(long id) {this.bookRepository.deleteById(id);}

    //获取指定图书的id
    @Override
    public Book getBookById(long id){
        //调用数据访问层查找指定ID的图书,返回Optional对象
        Optional< Book > optional = bookRepository.findById(id);
        Book book = null;
        //如果存在指定id的图书
        if (optional.isPresent()) {
            //从Optional对象中获取图书对象
            book = optional.get();
        } else {
            //否则抛出运行时异常
            throw new RuntimeException("  :: " + id);
        }
        return book;
    }




    @Override
    public Page<Book> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
        //设置排序参数,升序ASC/降序DESC?
        Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
                ? Sort.by(sortField).ascending()
                : Sort.by(sortField).descending();

        //根据页号/每页记录数/排序依据返回某指定页面数据。
        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
        return this.bookRepository.findAll(pageable);
    }

    @Override
    public List<Book> QueryBook(String bookName) {
        //将查询结果返回
        return bookRepository.findByNameContaining(bookName);
    }


}

BookService接口

 BookService中通过定义这些方法,BookService接口提供了一系列操作图书的服务接口,具体的实现类可以根据需要来实现这些方法来提供对图书的具体操作功能。

package com.lzzy.project.service;

import com.lzzy.project.model.Book;
import org.springframework.data.domain.Page;

import java.util.List;

public interface BookService {

    //获取所有的图书
    List<Book> getAllBook();

    //新增/更新一本图书
    void saveBook(Book book);

    //删除指定id的图书
    void deleteBookById(long id);

    //获取指定图书的id
    Book getBookById(long id);

    //分页 + 排序
    Page<Book> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection);

    // 按名称查询
    List<Book> QueryBook(String bookName);
}

BookController业务层

BookController中,使用@Autowired注解将BookService注入到该类的booksService属性中。通过依赖注入,BookController可以使用BookService中定义的方法来处理业务逻辑。

@Autowired注解告诉Spring框架将BookService的实例自动注入到booksService属性中,这样在BookController中就可以直接使用booksService来调用BookService中定义的方法了。

这样,BookController就可以与视图层(如前端页面)进行交互

package com.lzzy.project.controller;

import com.lzzy.project.model.Book;
import com.lzzy.project.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Controller
public class BookController {

    @Autowired
    private BookService booksService;

//    @GetMapping("/")
//    public String viewHomePage(Model model) {
//        model.addAttribute("listBook", booksService.getAllBook());
//        return "index";
//    }

    @GetMapping("/")
    public String viewHomePage(Model model) {
        return findPaginated(1, "id", "asc", model);
    }

    //新增图书
    @GetMapping("/showNewBookForm")
    public String showNewBookForm(Model model) {
        Book book = new Book();
        model.addAttribute("book", book);
        return "add_book";
    }

    //保存图书
    @PostMapping("/saveBook")
    public String saveBook(@ModelAttribute("book") Book book) {
        booksService.saveBook(book);
        return "redirect:/";
    }

    //更新图书
    @GetMapping("/showFormForUpdate/{id}")
    public String showFormForUpdate(@PathVariable(value = "id") long id, Model model) {

        Book book = booksService.getBookById(id);

        model.addAttribute("book", book);
        return "update_book";
    }

    //删除图书
    @GetMapping("/deleteBook/{id}")
    public String deleteEmployee(@PathVariable(value = "id") long id) {

        this.booksService.deleteBookById(id);
        return "redirect:/";
    }


    //获取分页数据
    @GetMapping("/page/{pageNo}")
    public String findPaginated(@PathVariable (value = "pageNo") int pageNo,
                                @RequestParam("sortField") String sortField,
                                @RequestParam("sortDir") String sortDir,
                                Model model) {
        int pageSize = 5;

        Page<Book> page = booksService.findPaginated(pageNo, pageSize, sortField, sortDir);
        List<Book> listBook = page.getContent();

        model.addAttribute("currentPage", pageNo);
        model.addAttribute("totalPages", page.getTotalPages());
        model.addAttribute("totalItems", page.getTotalElements());
        model.addAttribute("sortField", sortField);
        model.addAttribute("sortDir", sortDir);
        model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc");
        model.addAttribute("listBook", listBook);
        return "index";
    }

    //按书名查询
    @GetMapping("/query")
    public String queryBookName(@RequestParam("bookName") String bookName, Model model){

        List<Book> books = booksService.QueryBook(bookName);
        model.addAttribute("books", books);

        return "query_book";
    }

}

二、html搭建

连接MySQL

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username= root
spring.datasource.password= 123456

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# for Spring Boot 2
# spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect

# for Spring Boot 3
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQLDialect

# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto= update

#?????hibernate-sql
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE

index.html 搭建基本框架

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>图书管理系统</title>

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">

</head>
<body class="table-warning">

<div class="container my-2">

    <h1 class="display-4 font-weight-bold text-center">Book List</h1>


    <div class="container">
        <div class="row">
            <div class="col-4">
                <a th:href="@{/showNewBookForm}" class="btn btn-primary btn mb-3">添加图书</a>
            </div>
            <div class="col-8">
                <form class="form-inline justify-content-end" th:action="@{/query}">
                    <div class="form-group mr-2">
                        <input type="text" class="form-control" id="searchInput" name="bookName" placeholder="请输入书名...">
                    </div>
                    <button type="submit" class="btn btn-primary">搜索</button>
                </form>
            </div>
        </div>
    </div>

    <table border="1" class="table table-striped table-responsive-md table-danger">
        <thead class="thead-dark">
        <tr>
            <th>
                <a th:href="@{'/page/' + ${currentPage} + '?sortField=id&sortDir=' + ${reverseSortDir}}">图书id</a>
            </th>
            <th>
                <a th:href="@{'/page/' + ${currentPage} + '?sortField=name&sortDir=' + ${reverseSortDir}}">书名</a>
            </th>
            <th>
                <a th:href="@{'/page/' + ${currentPage} + '?sortField=writer&sortDir=' + ${reverseSortDir}}">作者</a>
            </th>
            <th>
                <a th:href="@{'/page/' + ${currentPage} + '?sortField=state&sortDir=' + ${reverseSortDir}}">国家</a>
            </th>
            <th>
                <a th:href="@{'/page/' + ${currentPage} + '?sortField=price&sortDir=' + ${reverseSortDir}}">价格</a>
            </th>
            <th class="text-primary">操作</th>
        </tr>
        </thead>
        <tbody>
        <tr th:each="book : ${listBook}">
            <td th:text="${book.id}"></td>
            <td th:text="${book.name}"></td>
            <td th:text="${book.writer}"></td>
            <td th:text="${book.state}"></td>
            <td th:text="${book.price}"></td>
            <td>
                <a th:href="@{/showFormForUpdate/{id}(id=${book.id})}" class="btn btn-primary btn-sm">更新图书</a>
                <a th:href="@{/deleteBook/{id}(id=${book.id})}" class="btn btn-danger btn-sm">删除</a>
            </td>
        </tr>
        </tbody>
    </table>

    <div th:if="${totalPages > 1}">
        <div class="row col-sm-10">
            <div class="col-sm-3">
                Total Rows: [[${totalItems}]]
            </div>
            <div class="col-sm-5">
					<span th:each="i: ${#numbers.sequence(1, totalPages)}">
						<a th:if="${currentPage != i}"
                           th:href="@{'/page/' + ${i}+ '?sortField=' + ${sortField} + '&sortDir=' + ${sortDir}}">[[${i}]]</a>
						<span th:unless="${currentPage != i}">[[${i}]]</span>  &nbsp; &nbsp;
					</span>
            </div>
            <div class="col-sm-1">
                <a th:if="${currentPage < totalPages}"
                   th:href="@{'/page/' + ${currentPage + 1}+ '?sortField=' + ${sortField} + '&sortDir=' + ${sortDir}}"1
                   class="btn btn-primary">上一页</a>
                <span th:unless="${currentPage < totalPages}" class="btn btn-primary disabled">上一页</span>
            </div>

            <div class="col-sm-1">
                <a th:if="${currentPage < totalPages}"
                   th:href="@{'/page/' + ${totalPages}+ '?sortField=' + ${sortField} + '&sortDir=' + ${sortDir}}"
                   class="btn btn-primary">下一页</a>
                <span th:unless="${currentPage < totalPages}" class="btn btn-primary disabled">下一页</span>
            </div>
        </div>
    </div>

</div>


</body>
</html>

add_book.html搭建新增图书界面,通过添加的超链接进入界面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加图书</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">

</head>
<body>
<div class="container">
    <h1>图书管理系统</h1>
    <hr>
    <h2>新增图书</h2>

    <form action="#" th:action="@{/saveBook}" th:object="${book}" method="POST">

        <input type="text" th:field="*{name}" placeholder="请输入图书名称" class="form-control mb-4 col-4">

        <input type="text" th:field="*{writer}" placeholder="请输入作者" class="form-control mb-4 col-4">

        <input type="text" th:field="*{state}" placeholder="请输入作者的国家" class="form-control mb-4 col-4">

        <input type="text" th:field="*{price}" placeholder="请输入图书的售价" class="form-control mb-4 col-4">

        <button type="submit" class="btn btn-info col-2"> 添加  </button>
    </form>

    <hr>

    <a th:href="@{/}"> 返回图书列表 </a>
</div>
</body>
</html>

updata_book.html搭建更新图书界面,通过添加的超链接进入界面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>更新图书</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">

</head>
<body>
<div class="container">
    <h1>图书管理系统</h1>
    <hr>
    <h2>更新图书</h2>

    <form action="#" th:action="@{/saveBook}" th:object="${book}" method="POST">
        <!--隐藏表单-->
        <input type="hidden" th:field="*{id}" />

        <input type="text" th:field="*{name}" placeholder="请输入图书名称" class="form-control mb-4 col-4">

        <input type="text" th:field="*{writer}" placeholder="请输入作者" class="form-control mb-4 col-4">

        <input type="text" th:field="*{state}" placeholder="请输入作者的国家" class="form-control mb-4 col-4">

        <input type="text" th:field="*{price}" placeholder="请输入图书的售价" class="form-control mb-4 col-4">

        <button type="submit" class="btn btn-info col-2"> 更新图书 </button>
    </form>

    <hr>

    <a th:href="@{/}"> 返回图书列表 </a>
</div>
</body>
</html>

query_book.html中设置了超链接跳转到查询图书的界面中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询结果</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">

</head>
<body>
<div class="container my-2">

    <h1 class="display-4 font-weight-bold text-center">Book List</h1>


    <div class="container">
        <div class="row">
            <div class="col-4">
                <a th:href="@{/showNewBookForm}" class="btn btn-primary btn mb-3">添加图书</a>
            </div>
            <div class="col-8">
                <form class="form-inline justify-content-end">
                    <div class="form-group mr-2">
                        <input type="text" class="form-control" id="searchInput" placeholder="搜索">
                    </div>
                    <button type="submit" class="btn btn-primary">搜索</button>
                </form>
            </div>
        </div>
    </div>

    <table border="1" class="table table-striped table-responsive-md">
        <thead class="thead-dark">
        <tr>
            <th>
                图书id
            </th>
            <th>
                书名
            </th>
            <th>
                作者
            </th>
            <th>
                国家
            </th>
            <th>
                价格
            </th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        <tr th:each="book : ${books}">
            <td th:text="${book.id}"></td>
            <td th:text="${book.name}"></td>
            <td th:text="${book.writer}"></td>
            <td th:text="${book.state}"></td>
            <td th:text="${book.price}"></td>
            <td>
                <a th:href="@{/showFormForUpdate/{id}(id=${book.id})}" class="btn btn-primary btn-sm">更新图书</a>
                <a th:href="@{/deleteBook/{id}(id=${book.id})}" class="btn btn-danger btn-sm">删除</a>
            </td>
        </tr>
        </tbody>
    </table>

    <a th:href="@{/}"> 返回图书列表 </a>

</div>
</body>
</html>

运行后的效果就出来了

springboot html,java,spring boot,spring文章来源地址https://www.toymoban.com/news/detail-811082.html

到了这里,关于Java中springboot搭建html的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Boot+Thymeleaf+MyBatis+mysql】实现电子商务平台实战(附源码)持续更新~~ 包括sql语句、java、html代码

    源码请点赞关注收藏后评论区留言和私信博主 开发环境:Web服务器使用Servlet容器,数据库采用mysql,集成开发环境为Spring Tool Suite(STS) 电子商务平台分为两个子系统 一个是后台管理系统 一个是电子商务系统,下面分别讲解着两个子系统的功能需要与模块划分 1:后台管理子

    2024年02月09日
    浏览(33)
  • 商城免费搭建之java鸿鹄云商 java电子商务商城 Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

     鸿鹄云商 SAAS云产品概述 1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务)  2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架 VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程序 4. 核心思想 分

    2024年02月03日
    浏览(37)
  • 商城免 费搭建之java鸿鹄云商 java电子商务商城 Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

    【saas云平台】打造全行业全渠道全场景的saas产品,为经营场景提供一体化解决方案;门店经营区域化、网店经营一体化,本地化、全方位、一站式服务,为多门店提供统一运营解决方案;提供丰富多样的营销玩法覆盖所有经营场景,助力商家成功;系统稳定压倒一切,让商

    2024年02月03日
    浏览(33)
  • 小程序商城免费搭建之java商城 电子商务Spring Cloud+Spring Boot+二次开发+mybatis+MQ+VR全景+b2b2c bbc

     在数字化时代,电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念,为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端,包括平台管理、商家端、买家平台、微服务平台等,涵盖了pc端、手机端、h5/公众号、小程序、

    2024年01月19日
    浏览(33)
  • spring boot admin搭建,监控springboot程序运行状况

    新建一个spring boot web项目,添加以下依赖 spring boot的监控端点依赖必须的。 关于版本,springboot的版本前两位是什么,上面依赖的版本就对应什么版本,比如现在spring boot parent的版本是2.3.5,这里的依赖可以选择2.3开头的版本。下面是开启相关的端点功能 添加以上依赖之后,

    2024年04月16日
    浏览(24)
  • IDEA 中搭建 Spring Boot Maven 多模块项目 (父SpringBoot+子Maven)

    [Ref] 新建一个SpringBoot项目 删除无用的 .mvn 目录、 src 目录、 mvnw 及 mvnw.cmd 文件,最终只留 .gitignore 和 pom.xml ① 删除 dependencies 标签及其中的 spring-boot-starter 和 spring-boot-starter-test 依赖,因为 Spring Boot 提供的父工程已包含,并且父 pom 原则上都是通过 dependencyManagement 标签管理

    2024年01月20日
    浏览(61)
  • SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

    SpringBootWeb入门 我们在之前介绍Spring的时候,已经说过Spring官方(Spring官方)提供很多开源项目,点击projects,看到spring家族旗下的项目 Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。而我们在项目开发时,一般会偏向于选

    2024年02月12日
    浏览(41)
  • Java、Java EE、Spring和Spring Boot核心注解

    文章迁移至个人博客 此页面包含常用 Java 、 Java EE 、 Spring 、 Spring Boot 、 JPA 常用注解的一站式说明。 @Component注解 @Component 注解表明被注解的类是一个“spring bean/组件”。@Component注解告诉Spring容器自动创建Spring bean。 @Autowired注解 @Autowired 注解用于自动注入 bean。@Autowired 注

    2024年02月15日
    浏览(40)
  • Springboot实战之spring-boot-starter-data-elasticsearch搭建ES搜索接口

    本教程是本人亲自实战的,然后运行起来的全部步骤。 环境 Elasticsearch 7.15.2 Kibana 7.15.2 springboot 2.6.4 以及对应的spring-boot-starter-web和spring-boot-starter-data-elasticsearch fastjson 1.2.97 安装好Elasticsearch7.15.2以及对应的Kibana。 去Springboot Start 新建项目 使用 devtools 创建 number_of_shards 数据分

    2023年04月08日
    浏览(39)
  • 【Java】Spring Boot 日志文件

    日志是程序的重要组成部分,想象一下,如果程序报错了,不让你打开控制台看日志,那么你能找到报错的原因吗。 日志对于我们来说,最主要的用途就是排除和定位问题。除了发现和定位问题之外,我们还可以通过日志实现以下功能: 记录用户登录日志,方便分析用户是

    2024年02月01日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包