文章目录
前言:
用Springboot +JPA+thymeleaf+MySQL+BootStrap 部署了一个订单管理系统,实现了 添加设备、删除设备、更新设备、查找设备、分页、排序等功能,项目内分有不同的包,也就是层,下面我将对每层进行解释。
BootStrap官网
1.创建项目
1.1 项目结构
1.2 在application.properties配置数据库
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
#localhost:3306为mysql的host和port tesstdb就是连接的庶几乎库名称
#mysql用户名
spring.datasource.username= root
#登入mysql的密码
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
2.model模型层
package com.example.mvcorders.model;
import jakarta.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "orders")
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
//订单id
@Column(name = "order_id")
private Long orderID;
//时间
@Column(name = "time")
private String time;
//收件人
@Column(name = "consignee")
private String consignee;
//收件地址
@Column(name = "addr")
private String addr;
//订单状态
@Column(name = "status")
private String status;
}
3.repository层
此层只定义了一个接口,而且此接口继承了JpaRepository接口,JpaRepository接口内有很多方法,可供接下来的使用,因为JpaRepository接口里并不一定有我想要的功能的方法,这里我创建了一个模糊查询,可以通过status状态这个属性,查询到相关的所有信息
package com.example.mvcorders.repository;
import com.example.mvcorders.model.Orders;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface OrdersRepository extends JpaRepository<Orders,Long> {
@Query("select e from Orders e where e.status like %:status%")
List<Orders> findByStatus(@Param("status") String status);
}
4.service 业务层
业务层分别有两部分,一个是接口,一个是接口的实现类
4.1OrdersService接口
接口里负责构建方法,但没有实体,方法的实体由继承此接口的类重写,每个方法指定要实现什么功能
package com.example.mvcorders.service;
import com.example.mvcorders.model.Orders;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
public interface OrdersService {
//获取所有订单
List<Orders> getOrders();
//新增/更新一个订单
void saveOrders(Orders orders);
//获取指定ID的订单
Orders getOrdersById(long id);
//删除指定ID的订单
void deleteOrdersById(long id);
//通过指定状态查询信息
List<Orders> findByStatus(String status);
//分页
Page<Orders> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection);
}
4.2 OrdersServicelmpl类
此类需要继承OrdersService接口并实现父类方法
package com.example.mvcorders.service;
import com.example.mvcorders.model.Orders;
import com.example.mvcorders.repository.OrdersRepository;
import org.aspectj.weaver.ast.Or;
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 OrdersServicelmpl implements OrdersService{
@Autowired
private OrdersRepository ordersRepository;
@Override //返回所有信息
public List<Orders> getOrders() {
return ordersRepository.findAll();
}
@Override //添加信息
public void saveOrders(Orders orders) {
this.ordersRepository.save(orders