Bootstrap

Spring Boot中停车场管理系统的实现

springboot的常用注解:

1,@SpringBootApplication:该注解是springboot最核心注解,也是组合注解,声明它就可以让springboot自动给程序进行必要的配置(简单的说,开启组件扫描和自己配置的功能)。

2,@EnableAutoCfiguration:使用该注解作用就是告诉springboot根据添加jar依赖猜测你想如何配置spring。

3,@ComponentScan:组件扫描,自动扫面包。并把这些类注册为Bean。

4,@SpriingBootConfiguration:是标志当前的类的配置类。

5,Configuration:定义配置类,可以替换xml文件,如果被注解的类内部包含有一个或者多个被@Bean注解的方法。

6,@Autowired:使用该注解作用就是进行自动注入。

7,@RestController:此注解就是@Controller和@ResponseBoby的集合,使用在controller层的,意思就是告诉控制层里面的方法都是以json的格式进行输出。

8,@Controller:该注解用于定义控制器,在spring项目中是由控制器负责用户发来的请求,然后控制器将用户请求的URL转发到对应的接口service层,进行调用相应的业务,在使用该注解时,还用结合@RequestMapping一起使用,处理http请求。

9,@ResponseBody:使用该注解表示方法的返回结果直接写入HTTP response body中的,当我们异步请求的时候常使用,用于构建restful的API。

10,@Repository:该注解用于标注数据访问组件,DAO组件的。

11,Component:该注解指当我们组件不好归类时,就可以使用该注解进行标注。

12,@service:该注解使用于标注业务层,当在业务层的类上使用时,bean就是自动找到该类就是service的。

13,@PathVariable:该注解使用来绑定函数中的参数用于获取参数的,当默认的情况下,spring会对@该注解的变量进行自动赋值的,我们也可以自己指定。

14,@PequestParam注解:是指获取请求参数的值,@GetMapping是组合注解。

15, @Data是Lombok框架中的一个注解,可以自动生成Java类的getter、setter、equals、hashCode和toString等方法。

创建停车场管理系统项目,需要在pom.xml文件中引入如下配置:

  Spring Boot可以通过集成JDBC来实现与MySQL的联系和交互,在application.yml配置文件中配置数据源信息即可连接到MySQL数据库。例如:

其中,url指定了连接数据库的地址和端口,username和password指定了连接数据库的用户名和密码,driver-class-name指定了使用的数据库驱动。

在软件开发中,常见的架构模式是MVC(Model-View-Controller),其中Controller、Entity、Mapper和Service是常见的组件或模块。

  1. Controller(控制器):控制器负责接收用户的请求,并将请求转发给合适的处理程序进行处理。它负责接受和验证输入数据,并调用相应的服务层方法来处理业务逻辑。控制器通常与用户界面(如Web页面)交互,并根据用户请求决定返回响应或者渲染视图。

  2. Entity(实体):实体代表系统中的核心业务对象或数据模型。它通常对应数据库中的表或集合,具有相应的属性和方法,用于表示和操作这些数据。实体类通常包含与数据库交互的逻辑,并提供对数据的增删改查等操作。

  3. Mapper(映射器):映射器负责将实体对象与数据库中的表或文档进行映射,实现数据的持久化操作。它提供了将实体对象存储到数据库中以及从数据库中检索实体对象的方法。映射器还可以处理对象之间的关系映射,例如一对多、多对多等关系。

  4. Service(服务):服务层包含了应用程序的业务逻辑和处理过程。它作为控制器和数据访问层(如Mapper)之间的中间层,负责封装业务逻辑的具体实现。服务层通常包含一组方法,用于执行复杂的业务操作,并协调各个相关的实体和数据访问操作。

这些组件之间的联系如下:

  • 控制器(Controller)通过接收用户请求并调用相应的服务层(Service)方法来处理业务逻辑。
  • 服务层(Service)通过调用映射器(Mapper)来读取或写入数据库中的实体对象。
  • 实体对象(Entity)代表系统中的核心业务对象,通过映射器(Mapper)与数据库进行交互。
  • 映射器(Mapper)负责将实体对象与数据库进行映射,提供数据的持久化操作。

这种分层架构可以使代码更易于维护和理解,同时也有利于实现模块化和可扩展性。控制器负责接收和转发请求,服务层负责处理业务逻辑,实体和映射器负责数据的操作和持久化。这样的设计使得每个组件的职责清晰,且可以独立进行测试和修改。

在一个停车场管理系统中,实体概念之间存在以下关系:

  • Order(订单):表示用户的停车请求或停车记录。每当用户进入停车场或离开停车场时,都会生成一个订单。
  • Parking Lot(停车场):是指停放车辆的区域,可以包含多个停车位。
  • Pricing Standard(计费标准):用于确定停车费用的规则或方案。计费标准通常基于停车时间的长短、停车场的位置以及其他因素来计算费用。
  • SysUser(系统用户):指使用停车场管理系统的用户,可以是停车场管理员或普通车主。
  • Vehicle(车辆):表示停放在停车场内的车辆,每个订单关联一个车辆。

更具体地说,当SysUser想要停车时,他们可以发起一个Order并与其Vehicle相关联。Order将包含车辆的信息和停车时间等细节。停车场将根据订单中的信息为车辆分配一个合适的停车位。当车主想要离开停车场时,他们可以通过提供订单信息来结算停车费用并释放停车位。

计费标准在系统中起着重要的作用,它决定了停车费用的计算方式。停车时间越长,费用越高。SysUser可以查看计费标准以了解停车费用的计算方式。

综上所述,Order、Parking Lot、Pricing Standard、SysUser和Vehicle之间形成了一个停车场管理系统的完整流程。

以下是停车场管理系统的实体类:

订单实体类:

停车场实体类:

计费标准实体类:

用户实体类:

车辆实体类:

在一个停车场管理系统中,通常会使用数据访问对象(Data Access Objects,DAO)或映射器(Mappers)来处理与数据库的交互。这些映射器之间的关系如下:

  • ParkingLotMapper(停车场映射器):用于将停车场对象与数据库中的停车场表进行映射和操作。它负责提供一系列方法来创建、读取、更新和删除停车场信息。

  • PricingStandardMapper(计费标准映射器):用于将计费标准对象与数据库中的计费标准表进行映射和操作。它负责提供一系列方法来创建、读取、更新和删除计费标准信息。

  • SysUserMapper(系统用户映射器):用于将系统用户对象与数据库中的系统用户表进行映射和操作。它负责提供一系列方法来创建、读取、更新和删除系统用户信息。

  • VehicleMapper(车辆映射器):用于将车辆对象与数据库中的车辆表进行映射和操作。它负责提供一系列方法来创建、读取、更新和删除车辆信息。

  • OrderMapper(订单映射器):用于将订单对象与数据库中的订单表进行映射和操作。它负责提供一系列方法来创建、读取、更新和删除订单信息。

这些映射器是实现数据持久化的关键组件,它们与数据库进行交互,并将对象的数据存储到数据库中,或从数据库中检索数据并转换为对象。每个映射器负责管理特定对象类型的数据操作。

在系统中,映射器之间可能存在一些协作关系,比如在创建订单时,OrderMapper可能需要与VehicleMapper和SysUserMapper进行交互,以获取相关的车辆和用户信息。类似地,在查询停车场信息时,可能需要同时使用ParkingLotMapper和PricingStandardMapper。

总之,这些映射器共同构成了一个数据访问层,通过与数据库交互来实现对停车场、计费标准、系统用户、车辆和订单等对象的持久化操作。

以下是停车场管理系统的映射类:

停车场映射器:

@Mapper
public interface ParkingLotMapper extends BaseMapper<ParkingLot> {
@Results({
@Result(column = "id",property = "id"),
@Result(column = "pricing_standard_id",property = "pricingStandard",one=@One(select = "com.yy.mapper.PricingStandardMapper.selectById")),

})
@Select("select * from parking_lot join pricing_standard " +
"on pricing_standard.id=parking_lot.pricing_standard_id ")
List<ParkingLot> getAll();
@Results({
@Result(column = "id",property = "id"),
@Result(column = "pricing_standard_id",property = "pricingStandard",one=@One(select = "com.yy.mapper.PricingStandardMapper.selectById")),
})
@Select("select * from parking_lot join pricing_standard " +
"on pricing_standard.id=parking_lot.pricing_standard_id "+
"where parking_lot.id=#{parking_lot.id} ")
ParkingLot getById(Long id);

@Insert("insert into parking_lot set name=#{name} "+
",volumetric=#{volumetric} "+
",pricing_standard_id=#{pricingStandard.id} ")
int insert(ParkingLot entity);
@Update("update parking_lot set name=#{name} "+
",volumetric=#{volumetric} "+
",pricing_standard_id=#{pricingStandard.id} ")
int update(ParkingLot entity);
}

计费标准映射器:

系统用户映射器:

车辆映射器:

@Mapper
public interface VehicleMapper extends BaseMapper<Vehicle> {
@Results({
@Result(column = "id",property = "id"),
@Result(column = "parking_lot_id",property = "parkingLot",one=@One(select = "com.yy.mapper.ParkingLotMapper.getById")),
})
@Select("select * from vehicle join parking_lot " +
"on parking_lot.id=parking_lot_id ")
List<Vehicle> getAll();
@Results({
@Result(column = "id",property = "id"),
@Result(column = "parking_lot_id",property = "parkingLot",one=@One(select = "com.yy.mapper.ParkingLotMapper.getById")),
})
@Select("select * from vehicle join parking_lot " +
"on parking_lot.id=parking_lot_id "+
"where vehicle.id=#{id} ")
Vehicle getById(Long id);
@Insert("insert into vehicle set licence_plate=#{licencePlate} "+
",picUrl=#{picUrl},is_active=#{is_active} "+
",parking_lot_id=#{parking.id} ")
int insert(Vehicle entity);
@Update("update vehicle set licence_plate=#{licencePlate} "+
",picUrl=#{picUrl},is_active=#{is_active} "+
",parking_lot_id=#{parking.id} where id=#{id}")
int update(Vehicle entity);
}

订单映射器:

在一个停车场管理系统中,通常会使用服务层(Service Layer)来处理业务逻辑和协调各个功能模块。以下是ParkingLotService、PricingStandardService、SysUserService、VehicleService和OrderService之间的关系:

  • ParkingLotService(停车场服务):负责处理与停车场相关的业务逻辑和操作。它可能包括创建、更新、查询和删除停车场信息的方法。ParkingLotService可以依赖于ParkingLotMapper来实现数据库操作,并通过该映射器来访问和处理停车场数据。

  • PricingStandardService(计费标准服务):处理与计费标准相关的业务逻辑和操作。它可能包括创建、更新、查询和删除计费标准信息的方法。PricingStandardService可以依赖于PricingStandardMapper来实现数据库操作,并通过该映射器来访问和处理计费标准数据。

  • SysUserService(系统用户服务):负责处理与系统用户相关的业务逻辑和操作。它可能包括创建、更新、查询和删除系统用户信息的方法。SysUserService可以依赖于SysUserMapper来实现数据库操作,并通过该映射器来访问和处理系统用户数据。

  • VehicleService(车辆服务):处理与车辆相关的业务逻辑和操作。它可能包括创建、更新、查询和删除车辆信息的方法。VehicleService可以依赖于VehicleMapper来实现数据库操作,并通过该映射器来访问和处理车辆数据。

  • OrderService(订单服务):负责处理与订单相关的业务逻辑和操作。它可能包括创建、更新、查询和删除订单信息的方法。OrderService可以依赖于OrderMapper来实现数据库操作,并通过该映射器来访问和处理订单数据。

这些服务层组件通过封装业务逻辑和操作来提供高层次的接口,将底层的数据访问对象(如映射器)与上层的用户界面或其他系统模块解耦。服务层可以处理不同模块之间的交互和协调,以完成复杂的业务需求。例如,当用户发起停车请求时,ParkingLotService可以使用VehicleService和OrderService来分配合适的停车位并生成相应的订单。

综上所述,这些服务层组件共同构成了一个功能完整的停车场管理系统,负责处理不同业务模块的操作,并通过与数据访问层(例如映射器)的协作来实现对停车场、计费标准、系统用户、车辆和订单等对象的业务逻辑处理。

以下是停车场管理系统的各服务层:

系统用户服务:

计费标准服务:

停车场服务:

车辆服务:

订单服务:

在一个停车场管理系统中,通常会使用控制层(Controller层)用于控制逻辑,其最核心的作用在于控制后端与前端的交互。

VehicleController:用于处理车辆的进出状态和信息。

ParkingController:用于管理停车场的基本信息和空位状态。

PicingController:用于计算停车费用和资费标准。

OrderController:用于记录车辆的进出顺序和缴费状态。

SysUserController:用于管理系统用户和权限。

1.车辆进场 

当车辆进入停车场时,首先由VehicleController进行车辆信息的识别和记录。然后VehicleController将车辆信息发送到ParkingController,以检查当前是否有足够的停车位。如果有空余车位,则ParkingController会将车辆信息记录在停车场数据库中,并将该空余车位的状态改变为已占用。接着,VehicleController会向PicingController发送车牌号码和入场时间的信息,以便计算停车费用。PicingController会根据车辆类型和停车时间来计算停车费用并返回计算结果给VehicleController,VehicleController再将费用信息展示给车主。

2.车辆离场

当车辆准备离开停车场时,VehicleController会再次进行车辆信息的识别和记录。接着,VehicleController将车辆信息发送至OrderController,以便记录车辆的缴费状态和出场时间。OrderController会将车辆信息保存在停车场数据库中,并更新车辆的缴费状态和开票状态。同时,VehicleController会向PicingController发送车辆信息以获取停车费用。PicingController会根据车辆类型和停车时间来计算停车费用并返回计算结果给VehicleController,VehicleController再将费用信息展示给车主。如果车主选择在线支付,则VehicleController会将支付信息发送到OrderController,并由OrderController检查支付情况。最后,VehicleController会向ParkingController发送车辆信息以便记录该车位的空闲状态。

以下是停车场管理系统的各控制层:

订单控制器:

停车场控制器:

计费标准控制器:

系统用户控制器:

车辆控制器:

创建sql语句连接数据库:

连接成功

;