旅游网后台管理系统(一)环境搭建
文章目录
- 1. 系统介绍
- 2. 技术选型
- 3. 环境搭建
- 3.1 创建数据库和表
- 3.2 创建 Maven 工程
- 3.2.1 创建父工程
- 3.2.2 创建子模块 dao
- 3.2.3 创建子模块 service
- 3.2.4 创建子模块 domain
- 3.2.5 创建子模块 utils
- 3.2.6 创建子模块 web
- 3.2.7 在父工程中编写 pom.xml
- 3.3 编写工具类
- 3.4 编写实体类
- 3.5 编写持久层接口
- 3.6 编写业务层接口和实现类
- 3.7 编写控制层
- 3.8 SSM 整合
- 3.9 编写 JSP 页面
- 3.10 配置 tomcat 服务器
- 3.11 配置 Maven
- 3.12 运行项目
- 4. 实现添加产品操作
- 4.1 编写控制层
- 4.2 编写业务层接口和实现类
- 4.3 编写持久层接口
- 4.4 编写实体类
- 4.5 编写 JSP 页面
1. 系统介绍
该系统实现了一个旅游网站的后台管理功能,包括用户登录,产品管理,订单管理,用户管理,角色管理,资源权限管理,访问日志功能。
2. 技术选型
- 表现层:SpringMVC,JSP,AdminLTE
- 业务层:Spring
- 持久层:MyBatis
- 数据库:MySQL
- 安全认证:Spring Security
- 单元测试:Junit
- 连接池:c3p0
- 日志:log4j,slf4j
- 分页插件:pagehelper
- 服务器:Tomcat
- 开发工具:IDEA
- 项目管理工具:Maven
3. 环境搭建
3.1 创建数据库和表
创建数据库
create database ssm;
创建产品表
序号 字段名称 字段类型 字段描述 1 id int(11) 主键,自增长 2 productNum varchar(50) 产品编号,唯一,非空 3 productName varchar(50) 产品名称 4 cityName varchar(50) 出发城市 5 departureTime datetime 出发时间 6 productPrice double 产品价格 7 productDesc varchar(255) 产品描述 8 productStatus int(11) 状态(0 或 1) DROP TABLE IF EXISTS `product`; CREATE TABLE `product` (`id` int(11) NOT NULL AUTO_INCREMENT,`productNum` varchar(50) NOT NULL,`productName` varchar(50) DEFAULT NULL,`cityName` varchar(50) DEFAULT NULL,`departureTime` datetime DEFAULT NULL,`productPrice` double DEFAULT NULL,`productDesc` varchar(255) DEFAULT NULL,`productStatus` int(11) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `productNum` (`productNum`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;INSERT INTO `product` VALUES ('1', 'pro-001', '北京三日游', '北京', '2019-11-07 14:51:13', '1200', '不错的旅行', '1'); INSERT INTO `product` VALUES ('2', 'pro-002', '上海五日游', '上海', '2019-10-19 14:51:24', '1800', '魔都我来了', '0'); INSERT INTO `product` VALUES ('3', 'pro-003', '香港七日游', '香港', '2019-10-25 14:51:30', '2800', '不错的旅行', '1'); INSERT INTO `product` VALUES ('7', 'pro-004', '广州六日游', '广州', '2019-10-17 10:50:00', '1800', '广州是个好地方', '1'); INSERT INTO `product` VALUES ('8', 'pro-005', '广州六日游', '广州', '2019-10-22 15:50:00', '1800', '广州好地方', '1');
3.2 创建 Maven 工程
3.2.1 创建父工程
打开 IDEA,选择 Create New Project --> Maven
不勾选 Create From archetype,点击 Next
填写以下内容,点击 Next
GroupId:com.zt ArtifactId:ssm_travel
填写以下内容,点击 Finish
Project name:ssm_travel Project location:D:\idea_workspace\ssm\ssm_travel
3.2.2 创建子模块 dao
点击 File --> New --> Module --> Maven
不勾选 Create From archetype,点击 Next
此时已经指定了其父工程,我们填写以下内容,点击 Next
ArtifactId:ssm_travel_dao
内容已经帮我们填写好了,点击 Finish
3.2.3 创建子模块 service
点击 File --> New --> Module --> Maven
不勾选 Create From archetype,点击 Next
此时已经指定了其父工程,我们填写以下内容,点击 Next
ArtifactId:ssm_travel_service
内容已经帮我们填写好了,点击 Finish
3.2.4 创建子模块 domain
点击 File --> New --> Module --> Maven
不勾选 Create From archetype,点击 Next
此时已经指定了其父工程,我们填写以下内容,点击 Next
ArtifactId:ssm_travel_domain
内容已经帮我们填写好了,点击 Finish
3.2.5 创建子模块 utils
点击 File --> New --> Module --> Maven
不勾选 Create From archetype,点击 Next
此时已经指定了其父工程,我们填写以下内容,点击 Next
ArtifactId:ssm_travel_utils
内容已经帮我们填写好了,点击 Finish
3.2.6 创建子模块 web
点击 File --> New --> Module --> Maven
勾选 Create From archetype,选择以下模板,点击 Next
org.apache.maven.archetypes:maven-archetype-webapp
此时已经指定了其父工程,我们填写以下内容,点击 Next
ArtifactId:ssm_travel_web
内容已经帮我们填写好了,点击 Finish
3.2.7 在父工程中编写 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zt</groupId><artifactId>ssm_travel</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><properties><spring.version>5.0.2.RELEASE</spring.version><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version><mybatis.version>3.4.5</mybatis.version><mysql.version>5.1.6</mysql.version><spring.security.version>5.0.1.RELEASE</spring.security.version></properties><dependencies><!-- spring --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><!-- web --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- log --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency><!-- SpringSecurity --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>javax.annotation</groupId><artifactId>jsr250-api</artifactId><version>1.0</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency></dependencies><build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding><showWarnings>true</showWarnings></configuration></plugin></plugins></pluginManagement></build><modules><module>ssm_travel_dao</module><module>ssm_travel_service</module><module>ssm_travel_domain</module><module>ssm_travel_utils</module><module>ssm_travel_web</module></modules></project>
3.3 编写工具类
在子模块 utils 中,java 中创建包 com.zt.utils
创建日期转换工具类 DateUtils
/*** 日期转换工具类*/ public class DateUtils {/*** 字符串转日期* @param str* @param patten* @return* @throws ParseException*/public static Date string2Date(String str, String patten) throws ParseException {SimpleDateFormat simpleDateFormat = new SimpleDateFormat(patten);Date date = simpleDateFormat.parse(str);return date;}/*** 日期转字符串* @param date* @param patten* @return*/public static String date2String(Date date, String patten){SimpleDateFormat simpleDateFormat = new SimpleDateFormat(patten);String str = simpleDateFormat.format(date);return str;} }
3.4 编写实体类
在子模块 domain 中,java 中创建包 com.zt.domain
创建实体类 Product
/*** 产品实体类*/ public class Product implements Serializable {private Integer id; // 主键private String productNum; // 产品编号,唯一private String productName; // 产品名称private String cityName; // 出发城市private Date departureTime; // 出发时间private String departureTimeStr; // 出发时间的字符串private double productPrice; // 产品价格private String productDesc; // 产品描述private Integer productStatus; // 状态: 0关闭,1开启private String productStatusStr; // 状态的字符串public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getProductNum() {return productNum;}public void setProductNum(String productNum) {this.productNum = productNum;}public String getProductName() {return productName;}public void setProductName(String productName) {this.productName = productName;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}public Date getDepartureTime() {return departureTime;}public void setDepartureTime(Date departureTime) {this.departureTime = departureTime;}public String getDepartureTimeStr() {if (departureTime != null) {departureTimeStr = DateUtils.date2String(departureTime, "yyyy-MM-dd HH:mm:ss");}return departureTimeStr;}public void setDepartureTimeStr(String departureTimeStr) {this.departureTimeStr = departureTimeStr;}public double getProductPrice() {return productPrice;}public void setProductPrice(double productPrice) {this.productPrice = productPrice;}public String getProductDesc() {return productDesc;}public void setProductDesc(String productDesc) {this.productDesc = productDesc;}public Integer getProductStatus() {return productStatus;}public void setProductStatus(Integer productStatus) {this.productStatus = productStatus;}public String getProductStatusStr() {if (productStatus != null) {if (productStatus == 0) {productStatusStr = "关闭";}if (productStatus == 1) {productStatusStr = "开启";}}return productStatusStr;}public void setProductStatusStr(String productStatusStr) {this.productStatusStr = productStatusStr;}@Overridepublic String toString() {return "Product{" +"id='" + id + '\'' +", productNum='" + productNum + '\'' +", productName='" + productName + '\'' +", cityName='" + cityName + '\'' +", departureTime=" + departureTime +", departureTimeStr='" + departureTimeStr + '\'' +", productPrice=" + productPrice +", productDesc='" + productDesc + '\'' +", productStatus=" + productStatus +", productStatusStr='" + productStatusStr + '\'' +'}';} }
3.5 编写持久层接口
在子模块 dao 中,java 中创建包 com.zt.dao
创建接口 ProductDao
@Repository public interface ProductDao {/*** 查询所有产品* @return* @throws Exception*/@Select("select * from product")List<Product> findAll() throws Exception; }
3.6 编写业务层接口和实现类
在子模块 service 中,java 中创建包 com.zt.service
创建接口 ProductService
public interface ProductService {/*** 查询所有产品* @return* @throws Exception*/List<Product> findAll() throws Exception; }
创建包 com.zt.service.impl,创建 ProductServiceImpl
@Service("productService") public class ProductServiceImpl implements ProductService {@Autowiredprivate ProductDao productDao;@Overridepublic List<Product> findAll() throws Exception {return productDao.findAll();} }
3.7 编写控制层
在子模块 controller 中,java 中创建包 com.zt.controller
创建 ProductController
@Controller @RequestMapping("/product") public class ProductController {@Autowiredprivate ProductService productService;@RequestMapping("/findAll.do")public ModelAndView findAll() throws Exception {ModelAndView modelAndView = new ModelAndView();List<Product> products = productService.findAll();modelAndView.addObject("productList",products);modelAndView.setViewName("product-list");return modelAndView;} }
3.8 SSM 整合
在子模块 web 中,main 中创建包 java 和 resources
右键 java --> Make Directory as --> Sources Root
右键 resources --> Make Directory as --> Resource Root
在 resources 中创建 applicationContext.xml
<?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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 开启注解扫描,管理 service和 dao --><context:component-scan base-package="com.zt.service"></context:component-scan><context:component-scan base-package="com.zt.dao"></context:component-scan><!-- Spring 整合 MyBatis --><!--读取外部配置文件--><context:property-placeholder location="classpath:db.properties"/><!-- 配置连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!-- 配置 SqlSessionFactory 工厂 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/></bean><!-- 扫描 dao 接口 --><bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.zt.dao"/></bean><!-- 配置 Spring 的声明式事务管理 --><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!--开启 Spring 对注解事务的支持--><tx:annotation-driven transaction-manager="transactionManager"/></beans>
在 resources 中创建 db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm jdbc.username=root jdbc.password=123456
在 resources 中创建 springmvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 扫描 controller的注解 --><context:component-scan base-package="com.zt.controller"></context:component-scan><!-- 配置视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- JSP文件所在的目录 --><property name="prefix" value="/pages/"/><!-- 文件的后缀名 --><property name="suffix" value=".jsp"/></bean><!-- 设置静态资源不过滤 --><mvc:resources location="/css/" mapping="/css/**"/><mvc:resources location="/img/" mapping="/img/**"/><mvc:resources location="/js/" mapping="/js/**"/><mvc:resources location="/plugins/" mapping="/plugins/**"/><!-- 开启对 SpringMVC 注解的支持 --><mvc:annotation-driven/><!--支持AOP的注解支持,AOP底层使用代理技术JDK动态代理,要求必须有接口cglib代理,生成子类对象,proxy-target-class="true" 默认使用cglib的方式--><aop:aspectj-autoproxy proxy-target-class="true"/></beans>
配置 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!-- 配置 Spring 的监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 设置配置文件的路径 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext.xml</param-value></context-param><!-- 前端控制器 --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置 servlet 的初始化参数,读取 springmvc 的配置文件,创建 spring 容器 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 配置 servlet 启动时加载对象 --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><!-- 配置过滤器解决 post 请求参数中文乱码问题 --><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 指定默认加载页面 --><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list> </web-app>
将 log4j.properties 导入 resources
# Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal log4j.rootCategory=debug, CONSOLE, LOGFILE# Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n# LOGFILE is set to be a File appender using a PatternLayout. # log4j.appender.LOGFILE=org.apache.log4j.FileAppender # log4j.appender.LOGFILE.File=d:\axis.log # log4j.appender.LOGFILE.Append=true # log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout # log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
3.9 编写 JSP 页面
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body><%--转发到 main.jsp--%><jsp:forward page="/pages/main.jsp"></jsp:forward> </body> </html>
将 AdminLTE 的 css,img,plugins 三个包复制到 webapp 下,并在 webapp 下创建 pages 包
在 pages 包中创建 aside.jsp
在 pages 包中创建 header.jsp
在 pages 包中创建 main.jsp
在 pages 包中创建 product-list.jsp
3.10 配置 tomcat 服务器
在子模块 web 中,pom.xml 中加入 tomcat 配置
<plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><!--端口号--><port>80</port><!--访问路径--><path>/</path></configuration></plugin>
</plugins>
3.11 配置 Maven
点击 run --> Edit Configurations --> 添加 Maven
配置 Name
Name:ssm_travel
配置 Working directory
D:/idea_workspace/ssm/ssm_travel/ssm_travel_web
配置 command line
tomcat7:run
点击 OK
选择 Maven Project,clean 父工程,再 install 父工程
clean web 子模块,再 install web 子模块
3.12 运行项目
点击运行项目
打开浏览器访问
http://localhost/
4. 实现添加产品操作
4.1 编写控制层
@Controller
@RequestMapping("/product")
public class ProductController {@Autowiredprivate ProductService productService;/*** 添加产品* @param product* @return* @throws Exception*/@RequestMapping("/save.do")public String save(Product product) throws Exception {productService.save(product);return "redirect:findAll.do";}/*** 查询所有产品* @return* @throws Exception*/@RequestMapping("/findAll.do")public ModelAndView findAll() throws Exception {ModelAndView modelAndView = new ModelAndView();List<Product> products = productService.findAll();modelAndView.addObject("productList",products);modelAndView.setViewName("product-list");return modelAndView;}
}
4.2 编写业务层接口和实现类
public interface ProductService {/*** 查询所有产品* @return* @throws Exception*/List<Product> findAll() throws Exception;/*** 添加产品* @param product* @throws Exception*/void save(Product product) throws Exception;
}
@Transactional
@Service("productService")
public class ProductServiceImpl implements ProductService {@Autowiredprivate ProductDao productDao;/*** 查询所有产品* @return* @throws Exception*/@Overridepublic List<Product> findAll() throws Exception {return productDao.findAll();}/*** 添加产品* @param product* @throws Exception*/@Overridepublic void save(Product product) throws Exception {productDao.save(product);}
}
4.3 编写持久层接口
@Repository
public interface ProductDao {/*** 查询所有产品** @return* @throws Exception*/@Select("select * from product")List<Product> findAll() throws Exception;/*** 添加产品* @param product*/@Insert("insert into product(productNum,productName,cityName,departureTime,productPrice,productDesc,productStatus) values(#{productNum},#{productName},#{cityName},#{departureTime},#{productPrice},#{productDesc},#{productStatus})")void save(Product product) throws Exception;
}
4.4 编写实体类
在 departureTime 字段上添加注解 @DateTimeFormat(pattern = “yyyy-MM-dd HH:mm”),实现 String 类型转换为 Date 类型
/*** 产品实体类*/
public class Product implements Serializable {private Integer id; // 主键private String productNum; // 产品编号,唯一private String productName; // 产品名称private String cityName; // 出发城市@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")private Date departureTime; // 出发时间private String departureTimeStr; // 出发时间的字符串private double productPrice; // 产品价格private String productDesc; // 产品描述private Integer productStatus; // 状态: 0关闭,1开启private String productStatusStr; // 状态的字符串public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getProductNum() {return productNum;}public void setProductNum(String productNum) {this.productNum = productNum;}public String getProductName() {return productName;}public void setProductName(String productName) {this.productName = productName;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}public Date getDepartureTime() {return departureTime;}public void setDepartureTime(Date departureTime) {this.departureTime = departureTime;}public String getDepartureTimeStr() {if (departureTime != null) {departureTimeStr = DateUtils.date2String(departureTime, "yyyy-MM-dd HH:mm:ss");}return departureTimeStr;}public void setDepartureTimeStr(String departureTimeStr) {this.departureTimeStr = departureTimeStr;}public double getProductPrice() {return productPrice;}public void setProductPrice(double productPrice) {this.productPrice = productPrice;}public String getProductDesc() {return productDesc;}public void setProductDesc(String productDesc) {this.productDesc = productDesc;}public Integer getProductStatus() {return productStatus;}public void setProductStatus(Integer productStatus) {this.productStatus = productStatus;}public String getProductStatusStr() {if (productStatus != null) {if (productStatus == 0) {productStatusStr = "关闭";}if (productStatus == 1) {productStatusStr = "开启";}}return productStatusStr;}public void setProductStatusStr(String productStatusStr) {this.productStatusStr = productStatusStr;}@Overridepublic String toString() {return "Product{" +"id='" + id + '\'' +", productNum='" + productNum + '\'' +", productName='" + productName + '\'' +", cityName='" + cityName + '\'' +", departureTime=" + departureTime +", departureTimeStr='" + departureTimeStr + '\'' +", productPrice=" + productPrice +", productDesc='" + productDesc + '\'' +", productStatus=" + productStatus +", productStatusStr='" + productStatusStr + '\'' +'}';}
}
4.5 编写 JSP 页面
在 pages 包中创建 product-add.jsp
旅游网后台管理系统(一)环境搭建相关推荐
- 乐优商城之后台管理系统的环境搭建(七)
文章目录 (一)搭建管理后台的前端 (二)项目结构 (三)vuetify (四)使用域名访问后台页面 (五)nginx的介绍 (六)nginx的使用 (一)搭建管理后台的前端 把资料包中提供的leyo ...
- 旅游网后台管理系统(三)权限操作
文章目录 1. 创建表 1.1 表之间的关系 1.2 用户表 1.3 角色表 1.4 用户与角色的中间表 1.5 权限表 1.6 角色与权限的中间表 2. Spring Security 2.1 Sp ...
- php快速搭建后台,基于thinkphp的后台管理系统模板快速搭建,thinkphp后台模板_PHP教程...
基于thinkphp的后台管理系统模板快速搭建,thinkphp后台模板 当我们在搭建网站的时候,后端开发人员在编写后台的管理系统的时候,往往会因为缺少一个合适的后台管理系统的模板,而必须去重新编写一 ...
- 2021-06-27基于web旅游景点后台管理系统
## 基于web旅游景点后台管理系统 功能模块: 用户模块 登录模块(注册) 景点模块 景点线路查询及周围食宿查询模块 订单模块 可视化模块(大屏和疫情实时可视化) 启动前端项目(npm run de ...
- (12/05/21) vue-element-admi介绍 后台系统基础环境搭建
1. vue-element-admin 介绍 vue-element-admin 是一个后台前端解决方案,它基于 Vue.js 和 Element-UI 实现,它使用了最新的前端技术栈,内置了 i1 ...
- 内网渗透初探(靶场环境搭建+web层面实验+内网基本操作)
靶场环境搭建 在此我使用的是红日安全的环境 下载地址(红日安全) 图片取自互联网,ip地址以实际地址为准 操作系统 IP地址 攻击者 kali IP地址:192.168.3.10 攻击者 Window ...
- 企业级内网的域控环境搭建教程
所谓域控就是一台或多台域控制器能够控制域内的其他服务器,可实现统一更换电脑桌面,统一修改密码等诸多操作,就像网吧里的网络结构一样,只不过更复杂,更庞大,下面是详细部署教程 说明:要做这个实验需要模拟内 ...
- 使用VUE搭建后台管理系统(使用vue-cli搭建框架)
接触VUE已经几个月了,已经完成了一个后台管理系统,一个商城系统.今天决定总结一下之前的零散的知识点,在此开一个系列,自己也从头开始完成一个后台管理系统的搭建,并放在github中供大家参考. 安装v ...
- 基于asp.net061旅游网旅行社管理系统
本旅游管理信息系统主要以Visual Studio.NET为主要的网络开发工具,以SQLServer为后台的数据库开发工具.采用ASP.NET技术和C#语言SQL Server数据库技术来完成该系统. ...
最新文章
- 报错You may use special comments to disable some warnings.vue-cli脚手架关闭eslint的步骤
- 判断类之间的父子关系
- Golang简单写文件操作的四种方法
- 李宏毅深度学习——Backpropagation
- ios 摇一摇不走响应方法_猫咪不和主人亲近?这几种方法让它变得黏人,赶都赶不走|猫|宠物猫|主人...
- RxSwift之深入解析dispose源码的实现原理
- 开发中我们谈的产品化是什么?阿里是怎么看待产品化?
- cms是什么意思啊_美团面试官问我:ZGC 的 Z 是什么意思?
- 万字长文讲解编码知识,看这文就够了!| 原力计划
- mysql学习笔记 51_MySQL学习笔记(一)
- 基于移动最小二乘的图像变形
- 前端js获取屏幕高度
- 数学图形之双曲抛物面
- 微信公众号过程中都有哪些技巧,提升公众号活跃度
- 关于oppo和vivo这两年强势崛起的反思
- 我的2016---悲喜交加的一年
- win10可以运行linux模拟器,Win10将原生兼容安卓App,但模拟器不会被打败
- 【微机原理与接口技术】之一微型计算机系统概述
- C#用easy-mvc开发的后台管理系统
- 宇宙少女-小贾的一时兴起