Spring Boot 整合 Bootstrap、Spring Data JPA 基础实战

Spring Boot 整合 Bootstrap、Spring Data JPA 基础实战,第1张

Spring Boot 整合 Bootstrap、Spring Data JPA 基础实战

  本文以单表数据的增删改查业务为背景,介绍 Spring Boot 整合视图层Bootstrap框架、Thymeleaf 模板以及 Spring Data JPA等框架的实际应用。

1、技术选型:

Spring BootThymeleafBootstrapSpring Data JPAMySQL

2、需求描述:实现图书信息单表数据的增删改查任务。
3、项目演示效果如下图所示:


1. 项目初始化

第一步:在 IDEA 中新建空白的 SpringBoot 工程,勾选如下几项:

注:这些勾选的依赖都会在生成空白项目时,自动导入到 pom.xml 文件中。
第二步:在 pom.xml 文件中手动添加整合 Bootstrap 的相关依赖


    org.webjars
    bootstrap
    3.3.7


    org.webjars
    jquery
    3.1.1


    net.sourceforge.nekohtml
    nekohtml

第三步:在 MySQL 数据库中创建一张书籍数据表(book),并录入若干条测试数据。

DROP TABLE IF EXISTS `book`;
CREATE TABLE `book`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `price` decimal(10, 2) NULL DEFAULT NULL,
  `publishDate` date NULL DEFAULT NULL,
  `publishName` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `authorInfo` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

创建数据表对应的实体类 Student

package com.trainingl.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity(name = "book")   //实体类映射数据表
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    @Column
    private Double price;
    @Column
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date publishDate;
    @Column
    private String publishName;
    @Column
    private String authorInfo;
}

2. 业务代码 2.1 Spring Boot 配置文件

在全局配置文件 resources/application.yml 中配置数据源信息、视图解析器以及端口号等相关配置等

server:
  port: 8080
spring:
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
    mode: HTML5
    encoding: UTF-8
  datasource:
    url: jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

说明:最后一行表示 Spring Data JPA 的命名策略,这里取消了字段驼峰式命名时,字段转化为下划线连接的方式。

2.2.1 数据持化层

在路径 com > trainingl > repository 下创建接口 BookRepository;

Spring Data JPA 不是对 JPA 规范的具体实现,本身是一个抽象层,底层也是通过 Hibernate 实现的。开发者使用 Spring Data JPA 持久化框架时,并不需要自己编写 SQL 语句去实现,而是将数据表和实体类映射起来后,直接继承 JpaRepository 即可,该类内置了与增删改查业务相关的一些方法可供调用。

package com.trainingl.repository;

import com.trainingl.entity.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
//第一个泛型表示实体类的类型,第二个泛型表示主键类型
public interface BookRepository  extends JpaRepository {
    public Book getById(Long id);
}

说明:第一个泛型表示实体类的类型,第二个泛型表示主键类型。

2.2.2 业务层

创建业务层接口 BookService

package com.trainingl.service;

import com.trainingl.entity.Book;

import java.util.List;

public interface BookService {
    public List findAll();
    public Book findById(Long id);
    public void save(Book book);
    public void update(Book book);
    public void deleteById(Long id);
}

业务层实现 BookServiceImpl

package com.trainingl.service.Impl;

import com.trainingl.entity.Book;
import com.trainingl.repository.BookRepository;
import com.trainingl.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookRepository bookRepository;

    @Override
    public List findAll() {
        return bookRepository.findAll();
    }

    @Override
    public Book findById(Long id) {
        return bookRepository.getById(id);
    }

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

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

    @Override
    public void deleteById(Long id) {
        bookRepository.deleteById(id);
    }
}
2.2.3 控制层

创建 BookController 控制器,主要负责接收客户端浏览器的请求与响应。这里接受的请求都是 POST 表单和 ... 标签触发的 GET 请求,至于 Ajax 异步请求在后面的实例学习中会进一步介绍。

package com.trainingl.controller;

import com.trainingl.entity.Book;
import com.trainingl.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/book")
public class BookController {

    @Autowired
    private BookService bookService;

    @GetMapping("/list")
    public ModelAndView booklist(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("index");
        modelAndView.addObject("books",bookService.findAll());
        return modelAndView;
    }

    //根据id查找数据库的记录
    @GetMapping("/findById/{id}")
    public ModelAndView findById(@PathVariable Long id){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("editor");
        Book book = bookService.findById(id);
        modelAndView.addObject("book",book);
        return modelAndView;
    }

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

    //根据id删除数据库的记录
    @GetMapping("/delete/{id}")
    public String deleteById(@PathVariable Long id){
        bookService.deleteById(id);
        return "redirect:/book/list";
    }

    //根据id修改数据记录
    @PostMapping("/update")
    public String updateById(Book book){
        bookService.update(book);
        return "redirect:/book/list";
    }
}
2.2.4 视图层

Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,⽤于开发响应式布局、移动设备优先的WEB 项⽬。简洁、直观、强悍的前端开发框架,html、css、javascript ⼯具集,让 web 开发更速、简单。这里我使用 Bootstrap + Thymeleaf 模板完成视图层网页的搭建与数据渲染 *** 作。
1、数据列表首页 resources > templates > index.html





    
    
    
    
    数据列表


    
    
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存