用Springboot +JPA+thymeleaf+MySQL+BootStrap做一个商品信息管理系统 |
您所在的位置:网站首页 › springbootmybatisplus写留言板 › 用Springboot +JPA+thymeleaf+MySQL+BootStrap做一个商品信息管理系统 |
一.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。 二.JPAJPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 三.Thymeleaf Thymeleaf的主要目标是为您的开发工作流程带来优雅自然的模板-HTML可以在浏览器中正确显示,也可以作为静态原型工作,从而可以在开发团队中加强协作。Thymeleaf拥有适用于Spring Framework的模块,与您喜欢的工具的大量集成以及插入您自己的功能的能力,对于现代HTML5 JVM Web开发而言,Thymeleaf是理想的选择——尽管它还有很多工作要做。 四.MysqlMySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 五.BootStrapBootstrap 是一个用于快速开发 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官网
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |