用Springboot +JPA+thymeleaf+MySQL+BootStrap做一个商品信息管理系统

您所在的位置:网站首页 springbootmybatisplus写留言板 用Springboot +JPA+thymeleaf+MySQL+BootStrap做一个商品信息管理系统

用Springboot +JPA+thymeleaf+MySQL+BootStrap做一个商品信息管理系统

2023-07-07 00:55| 来源: 网络整理| 查看: 265

一.SpringBoot简介

SpringBoot是一个集成了Spring技术栈的一个大整合,是一个简化了Spring应用开发的框架,可以一站式解决J2EE的开发流程

优点:

1.可以快速独立的创建Spring及主流框架集成的项目。 2.使用了嵌入式的Servlet容器,无需生成WAR包 3.我们在使用SpringBoot进行开发时可以使用Starts启动依赖,而SpringBoot会自动地把所需要的其他相关技术jar包导入. 4.大量的自动配置,极大地简化了我们的开发。 5.无需XML文件的大量编写,也不会生成代码,底层是利用SpringBoot写好的API来调用实现,开箱即用 6.SpringBoot也有运维监控项目的功能 7.SpringBoot与云计算的集成

虽然SpirngBoot确实很大程度上简化了我们的开发,但是由于集成度很高,他的底层的实现对我们而言透明度很大,因此如果不对Spring框架了解的比较深入,就很难精通SpringBoot。

二.JPA

JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

三.Thymeleaf

Thymeleaf的主要目标是为您的开发工作流程带来优雅自然的模板-HTML可以在浏览器中正确显示,也可以作为静态原型工作,从而可以在开发团队中加强协作。Thymeleaf拥有适用于Spring Framework的模块,与您喜欢的工具的大量集成以及插入您自己的功能的能力,对于现代HTML5 JVM Web开发而言,Thymeleaf是理想的选择——尽管它还有很多工作要做。 四.Mysql

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

五.BootStrap

Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。

在现代 Web 开发中,有几个几乎所有的 Web 项目中都需要的组件。

Bootstrap 为您提供了所有这些基本的模块 - Grid、Typography、Tables、Forms、Buttons 和 Responsiveness。

此外,还有大量其他有用的前端组件,比如 Dropdowns、Navigation、Modals、Typehead、Pagination、Carousal、Breadcrumb、Tab、Thumbnails、Headers 等等。

六.代码实现 1.选择依赖

使用IDEA新建项目时,要选择Spring Initializr,选择Maven 添加以下五个依赖

 

 

 

 2.创建model层

存放实体类;有商品名,产地,生产日期,保质期,价格,一张表对应一个实体类,类属性同表字段相对应。

注:添加@Data用法,可帮我们省去实体类的get()和set()方法,节省时间。

package com.example.commoditysystem.model; import jakarta.persistence.*; import lombok.Data; @Data @Entity @Table(name = "commoditys") public class Commodity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY ) private long id; //商品名 @Column(name="commodity_name") private String name; //产地 @Column(name="place") private String place; //生产日期 @Column(name="start_date") private String startDate; //保质期 @Column(name="expiration_date") private String expirationDate; //价格 @Column(name="price") private double price; } 3.创建Service层

业务层,service层的作用为完成功能设计。存放业务逻辑处理,不直接对数据库进行操作,有接口和接口实现类,提供controller层调用的方法。设计的功能主要有新增、更新、获取指定id的商品信息、删除指定ID的商品信息、分页、模糊查询快递信息。

代码展示:

package com.example.commoditysystem.service; import com.example.commoditysystem.model.Commodity; import org.springframework.data.domain.Page; import java.util.List; public interface CommodityService { List getAllCommoditys(); void saveCommodity(Commodity commodity); //通过商品名来查询 List findByNameContaining(String name); Commodity getCommodityByid(Long id); void deleteCommodityByid(Long id); Page findPaginated(int pageNo, int pageSize, String sortField, String sortDirection); } 4. ExpressServiceImpl.java用来存放接口的实现类对接口函数进行实现。 package com.example.commoditysystem.service; import com.example.commoditysystem.model.Commodity; import com.example.commoditysystem.repository.CommodityRepository; 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 CommodityServiceLmpl implements CommodityService { @Autowired private CommodityRepository commodityRepository; @Override public List getAllCommoditys() { return commodityRepository.findAll(); } @Override public void saveCommodity(Commodity commodity) { this.commodityRepository.save(commodity); } //通过商品名来查询数据 @Override public List findByNameContaining(String name) { List commoditiesList = commodityRepository.findByCommodityName(name); return commoditiesList; } @Override public Commodity getCommodityByid(Long id) { Optional optional = commodityRepository.findById(id); Commodity commodity = null; if( optional.isPresent()){ commodity = optional.get(); }else{ throw new RuntimeException(" 无此商品,请重输入, id : "+ id); } return commodity; } @Override public void deleteCommodityByid(Long id) { commodityRepository.deleteById(id); } @Override public Page 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.commodityRepository.findAll(pageable); } } 5. 创建Controller层

控制器层,controller层的功能为请求和响应控制。 controller层负责前后端交互,接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端。

package com.example.commoditysystem.controller; import com.example.commoditysystem.model.Commodity; import com.example.commoditysystem.service.CommodityService; 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 CommodityController { @Autowired private CommodityService commodityService; @GetMapping("/") public String viewHomePage(Model model) { return findPaginated(1, "name", "asc" ,model); } //添加商品 @GetMapping("/showNewCommodityForm") public String showCommodity(Model model){ Commodity commodity = new Commodity(); model.addAttribute("commodity",commodity); return "new_commodity"; } //保存商品信息 @PostMapping("/saveCommodity") public String saveCommodity(@ModelAttribute("commodity") Commodity commodity){ commodityService.saveCommodity(commodity); return "redirect:/"; } //修改商品信息 @GetMapping("/showNewCommodityUpdate{id}") public String showFormForUpdate(@PathVariable(value = "id") long id,Model model){ Commodity commodity = commodityService.getCommodityByid(id); model.addAttribute("commodity",commodity); return "update_commodity"; } //删除商品信息 @GetMapping("/deleteCommodity{id}") public String deleteCommodity(@PathVariable(value = "id") long id){ this.commodityService.deleteCommodityByid(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 = 4; Page page = commodityService.findPaginated(pageNo, pageSize, sortField, sortDir); List listcommodity = 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("listcommoditys", listcommodity); return "index"; } //搜索商品 @GetMapping("/query{inpname}") public String query(@PathVariable(value = "inpname") String inpname,Model model){ List listcommoditys = commodityService.findByNameContaining(inpname); model.addAttribute("listcommoditys",listcommoditys); return "index"; } } 6. 创建repository层

调用ExpressRepository进行数据库操作。查询Express里面的personName对象;

select * from xxx中xxx也不是数据库里面真正的表名,而是对应的实体名;

补充:sql中的字段名也不是数据库中真正的字段名,而是实体的字段名。

package com.example.commoditysystem.repository; import com.example.commoditysystem.model.Commodity; 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 CommodityRepository extends JpaRepository { //通过查找商品名来找商品 @Query("select c from Commodity c where c.name like %:name%") List findByCommodityName(@Param("name") String name); } 7. 配置application.properties # DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) spring.datasource.url=jdbc:mysql://sh-cynosdbmysql-grp-fstrde0o.sql.tencentcdb.com:22266/commodity?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false spring.datasource.username=root spring.datasource.password=Ss1691288662 # Hibernate # The SQL dialect makes Hibernate generate better SQL for the chosen database spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQLDialect # Hibernate ddl auto (create, create-drop, validate, update) spring.jpa.hibernate.ddl-auto = update logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type=TRACE 8. index.html部分页面展示

 9. 使用BootStrap 进入到BootStrap官网中,选择符合主题或自己喜欢的样式,将他添加进html页面中的head标签中。 官网:BootStrap官网

10. 效果展示

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3