基于SSM框架的电影院购票系统
Posted 彭祥.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于SSM框架的电影院购票系统相关的知识,希望对你有一定的参考价值。
今天,博主分享一份基于SSM框架与maven管理的电影院购票系统
项目结构
该项目基本完成了电影购票流程内的所有功能,项目前端使用ajax进行请求,json数据流返还结果,是一份较为完善的项目
技术简介
基础框架:SSM SpringMVC+Spring+Mybatis
前端框架:Bootstrap前台,Layui后台
项目依赖管理:Maven
分页插件:pagehelper
数据库:mysql 5.7
开发软件及环境:eclipse JDK 1.8 Tomcat 8.0
数据请求与响应:ajax,json
项目功能
前台功能:
用户登陆注册,影片查看,影片选择,影院选择,座位选择,购票下单,查看订单,个人信息,评论
后台功能:
影院管理,影片管理,场次管理,订单管理,用户管理,评论管理
数据库介绍
本文以影院首页为例,介绍该项目的实现流程
首先我们看看页面展示
结果:
项目样例讲解
spring.xml 该文件将spring容器与视图解析器(也就是我们的spring-mvc)模块整合在了一起,并完成数据库链接,扫描资源包,进行事务处理,数据类型转换等各种功能。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p" xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.8.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 引入属性文件,获取配置参数 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:mysql.properties" />
</bean>
<!-- 使用阿里巴巴的数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 连接池参数 -->
<property name="maxActive" value="800"/>
<property name="minIdle" value="10"/>
</bean>
<!-- 注册sqlSessionFactoryBean -->
<!-- spring和MyBatis完美整合,不需要单独配置mybatis的映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源 连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 指定 mybatis 主配置文件 -->
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
<!-- Mapper接口所在的包名,Spring会自动找到其下的类 -->
<!-- 生产dao代理对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- 注册事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--支持注解驱动的事务管理,指定事务管理器 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--自动扫描IOC组件 -->
<context:component-scan base-package="com"></context:component-scan>
<!-- 开启aspectj代理 -->
<aop:aspectj-autoproxy/>
<!-- Jackson配置-->
<bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="serializationInclusion" value="NON_NULL" />
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
<!-- 注解映射支持;JSON转换器 -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper" />
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 对于字符串类型解析的配置 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value = "text/html;charset=UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- freemarker的配置 -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/views/" />
<property name="defaultEncoding" value="utf-8" />
<property name="freemarkerSettings">
<props>
<prop key="default_encoding">UTF-8</prop>
<prop key="output_encoding">UTF-8</prop>
<prop key="template_update_delay">10</prop>
<prop key="locale">zh_CN</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="time_format">HH:mm:ss</prop>
<prop key="number_format">#.##</prop>
</props>
</property>
</bean>
<!-- FreeMarker视图解析 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
<property name="suffix" value=".html" />
<property name="contentType" value="text/html;charset=utf-8" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="cache" value="false" />
<property name="requestContextAttribute" value="rc"></property>
</bean>
<!-- 文件解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1100000"></property>
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
</beans>
mybatis.xml
配置分页插件,扫描mapper包
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 定义别名 -->
<typeAliases>
<package name="com.mapper"/>
</typeAliases>
<!-- 配置 mybatis的分页插件 -->
<plugins>
<!-- com.github.pagehelper 为 PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 分页参数合理化,默认为false。
启动合理化时,如果pageNum < 1 会查询第一页,
如果pageNum > pages 会查询最后一页;
禁用合理化时,如果pageNum < 1或pageNum > pages会返回空数据。 -->
<property name="reasonable" value="true"/>
<!-- 设置数据库类型Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreS -->
<property name="helpetrDialect" value="mysql"/>
</plugin>
</plugins>
<!-- mapper映射 -->
<mappers>
<package name="com.mapper"/>
</mappers>
</configuration>
以上是配置文件的部分,完成以上配置后,我们就可以分析项目的执行过程了,即发出请求,springmvc拦截给controller,调用业务逻辑层,执行持久层数据库操作,访问并操作数据库,返还结果,层层返还,视图渲染,展示在浏览器上。
首先我们来看浏览器的请求,是以ajax的方式进行的
$.ajax({
type:'post',
url:"${basePath}/movie/findAllMovies",
dataType:'json',
data: {},
success:function (obj) {
console.log(obj)
});
发生我们的查询所有影片的请求,并将数据打印出来,然后我们在使用javascript来对obj内容进行解析获取并展示。
我们可以单独请求刚刚的链接,发现其返还的结果是一个json字符串
那么,接下来,我们的请求将会传递到Controller中,通过页面展示可知,其内容分为正在热映,即将上映,排行榜等,那么,我们的获取所有也需要将这些数据获取到
@RequestMapping("findAllMovies")
@ResponseBody
public JSONObject findAllMovies() {
JSONObject obj = new JSONObject();
List<Movie> list = movieService.findAllMovies(1);
List<Movie> upcomingList = movieService.findAllMovies(0);
List<Movie> offList = movieService.sortMovieByBoxOffice();
String type[] = {"喜剧","动作","爱情","动画","科幻","惊悚","冒险","犯罪","悬疑"};
ArrayList<Object> typeArr = new ArrayList<Object>();
for(int i = 0;i < type.length;i++) {
List<Movie> movieList = this.movieService.findMoviesLikeType(type[i]);
float boxOffice = 0;
for(int j = 0; j < movieList.size();j++) {
boxOffice += movieList.get(j).getMovie_boxOffice();
}
JSONObject typeJson = new JSONObject();
typeJson.put(type[i], boxOffice);
typeArr.add(typeJson);
}
obj.put("code", 0);
obj.put("count", list.size());
obj.put("upcomingCount",upcomingList.size());
obj.put("data", list);
obj.put("data1", upcomingList);
obj.put("sort", offList);
obj.put("type", typeArr);
return obj;
}
上面的Controller中调用了多个业务层方法,我们以第一个调用为例
业务层方法
@Transactional(propagation=Propagation.REQUIRED,readOnly=true)
@Override
public List<Movie> findAllMovies(int movie_state) {
return this.movieMapper以上是关于基于SSM框架的电影院购票系统的主要内容,如果未能解决你的问题,请参考以下文章
计算机毕业设计ssm+vue基本微信小程序的电影票务系统-电影票预订系统