网上订票系统是一个基于Web的应用程序,它可以让用户通过互联网来订购电影、演唱会、体育比赛等活动的票。SSM框架(Spring + SpringMVC + MyBatis)是一个流行的Java企业应用程序开发框架,它提供了一个完整的解决方案,可以用于构建复杂的Web应用程序。
以下是一个简单的基于SSM的网上订票系统的设计。
1. 功能需求
-
用户可以注册并登录系统。
-
用户可以浏览活动列表并选择要订购的活动。
-
用户可以选择座位,并确认订单。
-
用户可以查看已订购的活动和订单。
-
管理员可以添加、修改和删除活动信息。
-
管理员可以查看所有订单信息。
2. 数据库设计
本系统需要使用以下数据库表:
用户表(user)
字段名 | 类型 | 描述 |
id | int | 用户ID |
username | varchar | 用户名 |
password | varchar | 密码 |
| varchar | 邮箱 |
活动表(event)
字段名 | 类型 | 描述 |
id | int | 活动ID |
name | varchar | 活动名称 |
description | varchar | 活动描述 |
time | datetime | 活动时间 |
price | float | 活动票价 |
venue | varchar | 活动地点 |
capacity | int | 活动容量 |
image | varchar | 活动图片 |
订单表(order)
字段名 | 类型 | 描述 |
id | int | 订单ID |
user_id | int | 用户ID |
event_id | int | 活动ID |
seat | varchar | 座位 |
price | float | 订单价格 |
create_time | datetime | 订单创建时间 |
3. 后端设计
3.1 Spring配置
在Spring配置文件中,需要配置数据源、事务管理器、MyBatis的Mapper扫描器和SpringMVC的注解扫描器。具体配置如下:
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ticket_system?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置MyBatis的Mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
</bean>
<!-- 配置SpringMVC的注解扫描器 -->
<context:component-scan base-package="com.example.controller"/>
3.2 MyBatis配置
在MyBatis的配置文件中,需要配置数据库连接信息和Mapper接口的映射关系。具体配置如下:
<!-- 配置数据源 -->
<dataSource type="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ticket_system?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
<!-- 配置Mapper接口的映射关系 -->
<mappers>
<mapper class="com.example.mapper.UserMapper"/>
<mapper class="com.example.mapper.EventMapper"/>
<mapper class="com.example.mapper.OrderMapper"/>
</mappers>
3.3 Controller设计
在SpringMVC的Controller中,需要定义处理请求的方法,以及方法与URL的映射关系。具体代码如下:
@Controller
@RequestMapping("/event")
public class EventController {
@Autowired
private EventService eventService;
@RequestMapping("/list")
public ModelAndView list() {
List<Event> events = eventService.getAllEvents();
ModelAndView mav = new ModelAndView("event/list");
mav.addObject("events", events);
return mav;
}
@RequestMapping("/detail/{eventId}")
public ModelAndView detail(@PathVariable("eventId") int eventId) {
Event event = eventService.getEventById(eventId);
ModelAndView mav = new ModelAndView("event/detail");
mav.addObject("event", event);
return mav;
}
@RequestMapping("/book/{eventId}")
public ModelAndView book(@PathVariable("eventId") int eventId) {
Event event = eventService.getEventById(eventId);
ModelAndView mav = new ModelAndView("event/book");
mav.addObject("event", event);
return mav;
}
@RequestMapping("/confirm")
public ModelAndView confirm(int eventId, String seat) {
Event event = eventService.getEventById(eventId);
float price = event.getPrice();
Order order = new Order();
order.setEventId(eventId);
order.setSeat(seat);
order.setPrice(price);
ModelAndView mav = new ModelAndView("event/confirm");
mav.addObject("event", event);
mav.addObject("order", order);
return mav;
}
@RequestMapping("/pay")
public ModelAndView pay(int eventId, String seat) {
Event event = eventService.getEventById(eventId);
float price = event.getPrice();
Order order = new Order();
order.setEventId(eventId);
order.setSeat(seat);
order.setPrice(price);
order.setCreateTime(new Date());
ModelAndView mav = new ModelAndView("event/pay");
mav.addObject("event", event);
mav.addObject("order", order);
return mav;
}
}
3.4 Service设计
在Service中,需要定义业务逻辑的方法,以及调用Mapper接口的方法。具体代码如下:
@Service
public class EventService {
@Autowired
private EventMapper eventMapper;
public List<Event> getAllEvents() {
return eventMapper.getAllEvents();
}