基于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框架的旅游购票系统的设计与实现

计算机毕业设计ssm+vue基本微信小程序的电影票务系统-电影票预订系统

基于微信小程序的电影院购票平台

基于SSM框架电影订票网站开发全程实录(附源码)

基于SSM的电影院订票系统(Spring+SpringMVC+Mybatis)

基于JavaEE的影院购票系统