概念

在Java服务端开发中,Spring+SpringMVC+Mybatis搭建MVC三层架构完成项目的创建流程是开发者学习框架编程的必经之路,这里我们使用一个项目来完成整个的开发过程,后期会用一系列的文章进行讲解每一个功能过程。

数据库创建

该项目的数据库的表结构和数据给出,读者可自行恢复出来,进行使用。

/*
SQLyog 企业版 - MySQL GUI v8.14
MySQL - 5.5.40 : Database - smbms
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`smbms` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;USE `smbms`;/*Table structure for table `smbms_address` */DROP TABLE IF EXISTS `smbms_address`;CREATE TABLE `smbms_address` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`contact` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人姓名',`addressDesc` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '收货地址明细',`postCode` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '邮编',`tel` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人电话',`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者',`creationDate` datetime DEFAULT NULL COMMENT '创建时间',`modifyBy` bigint(20) DEFAULT NULL COMMENT '修改者',`modifyDate` datetime DEFAULT NULL COMMENT '修改时间',`userId` bigint(20) DEFAULT NULL COMMENT '用户ID',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/*Data for the table `smbms_address` */insert  into `smbms_address`(`id`,`contact`,`addressDesc`,`postCode`,`tel`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`,`userId`) values (1,'王丽','北京市东城区东交民巷44号','100010','13678789999',1,'2016-04-13 00:00:00',NULL,NULL,1),(2,'张红丽','北京市海淀区丹棱街3号','100000','18567672312',1,'2016-04-13 00:00:00',NULL,NULL,1),(3,'任志强','北京市东城区美术馆后街23号','100021','13387906742',1,'2016-04-13 00:00:00',NULL,NULL,1),(4,'曹颖','北京市朝阳区朝阳门南大街14号','100053','13568902323',1,'2016-04-13 00:00:00',NULL,NULL,2),(5,'李慧','北京市西城区三里河路南三巷3号','100032','18032356666',1,'2016-04-13 00:00:00',NULL,NULL,3),(6,'王国强','北京市顺义区高丽营镇金马工业区18号','100061','13787882222',1,'2016-04-13 00:00:00',NULL,NULL,3);/*Table structure for table `smbms_bill` */DROP TABLE IF EXISTS `smbms_bill`;CREATE TABLE `smbms_bill` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`billCode` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '账单编码',`productName` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品名称',`productDesc` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品描述',`productUnit` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品单位',`productCount` decimal(20,2) DEFAULT NULL COMMENT '商品数量',`totalPrice` decimal(20,2) DEFAULT NULL COMMENT '商品总额',`isPayment` int(10) DEFAULT NULL COMMENT '是否支付(1:未支付 2:已支付)',`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者(userId)',`creationDate` datetime DEFAULT NULL COMMENT '创建时间',`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者(userId)',`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',`providerId` int(20) DEFAULT NULL COMMENT '供应商ID',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/*Data for the table `smbms_bill` */insert  into `smbms_bill`(`id`,`billCode`,`productName`,`productDesc`,`productUnit`,`productCount`,`totalPrice`,`isPayment`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`,`providerId`) values (1,'BILL2016_001','洗发水、护发素','日用品-洗发、护发','瓶','500.00','25000.00',2,1,'2014-12-14 13:02:03',NULL,NULL,13),(2,'BILL2016_002','香皂、肥皂、药皂','日用品-皂类','块','1000.00','10000.00',2,1,'2016-03-23 04:20:40',NULL,NULL,13),(3,'BILL2016_003','大豆油','食品-食用油','斤','300.00','5890.00',2,1,'2014-12-14 13:02:03',NULL,NULL,6),(4,'BILL2016_004','橄榄油','食品-进口食用油','斤','200.00','9800.00',2,1,'2013-10-10 03:12:13',NULL,NULL,7),(5,'BILL2016_005','洗洁精','日用品-厨房清洁','瓶','500.00','7000.00',2,1,'2014-12-14 13:02:03',NULL,NULL,9),(6,'BILL2016_006','美国大杏仁','食品-坚果','袋','300.00','5000.00',2,1,'2016-04-14 06:08:09',NULL,NULL,4),(7,'BILL2016_007','沐浴液、精油','日用品-沐浴类','瓶','500.00','23000.00',1,1,'2016-07-22 10:10:22',NULL,NULL,14),(8,'BILL2016_008','不锈钢盘碗','日用品-厨房用具','个','600.00','6000.00',2,1,'2016-04-14 05:12:13',NULL,NULL,14),(9,'BILL2016_009','塑料杯','日用品-杯子','个','350.00','1750.00',2,1,'2016-02-04 11:40:20',NULL,NULL,14),(10,'BILL2016_010','豆瓣酱','食品-调料','瓶','200.00','2000.00',2,1,'2013-10-29 05:07:03',NULL,NULL,8),(11,'BILL2016_011','海之蓝','饮料-国酒','瓶','50.00','10000.00',1,1,'2016-04-14 16:16:00',NULL,NULL,1),(12,'BILL2016_012','芝华士','饮料-洋酒','瓶','20.00','6000.00',1,1,'2016-09-09 17:00:00',NULL,NULL,1),(13,'BILL2016_013','长城红葡萄酒','饮料-红酒','瓶','60.00','800.00',2,1,'2016-11-14 15:23:00',NULL,NULL,1),(14,'BILL2016_014','泰国香米','食品-大米','斤','400.00','5000.00',2,1,'2016-10-09 15:20:00',NULL,NULL,3),(15,'BILL2016_015','东北大米','食品-大米','斤','600.00','4000.00',2,1,'2016-11-14 14:00:00',NULL,NULL,3),(16,'BILL2016_016','可口可乐','饮料','瓶','2000.00','6000.00',2,1,'2012-03-27 13:03:01',NULL,NULL,2),(17,'BILL2016_017','脉动','饮料','瓶','1500.00','4500.00',2,1,'2016-05-10 12:00:00',NULL,NULL,2),(18,'BILL2016_018','哇哈哈','饮料','瓶','2000.00','4000.00',2,1,'2015-11-24 15:12:03',NULL,NULL,2);/*Table structure for table `smbms_provider` */DROP TABLE IF EXISTS `smbms_provider`;CREATE TABLE `smbms_provider` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`proCode` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商编码',`proName` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商名称',`proDesc` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商详细描述',`proContact` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商联系人',`proPhone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系电话',`proAddress` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',`proFax` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '传真',`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者(userId)',`creationDate` datetime DEFAULT NULL COMMENT '创建时间',`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者(userId)',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/*Data for the table `smbms_provider` */insert  into `smbms_provider`(`id`,`proCode`,`proName`,`proDesc`,`proContact`,`proPhone`,`proAddress`,`proFax`,`createdBy`,`creationDate`,`modifyDate`,`modifyBy`) values (1,'BJ_GYS001','北京三木堂商贸有限公司','长期合作伙伴,主营产品:茅台、五粮液、郎酒、酒鬼酒、泸州老窖、赖茅酒、法国红酒等','张国强','13566667777','北京市丰台区育芳园北路','010-58858787',1,'2013-03-21 16:52:07',NULL,NULL),(2,'HB_GYS001','石家庄帅益食品贸易有限公司','长期合作伙伴,主营产品:饮料、水饮料、植物蛋白饮料、休闲食品、果汁饮料、功能饮料等','王军','13309094212','河北省石家庄新华区','0311-67738876',1,'2016-04-13 04:20:40',NULL,NULL),(3,'GZ_GYS001','深圳市泰香米业有限公司','初次合作伙伴,主营产品:良记金轮米,龙轮香米等','郑程瀚','13402013312','广东省深圳市福田区深南大道6006华丰大厦','0755-67776212',1,'2014-03-21 16:56:07',NULL,NULL),(4,'GZ_GYS002','深圳市喜来客商贸有限公司','长期合作伙伴,主营产品:坚果炒货.果脯蜜饯.天然花茶.营养豆豆.特色美食.进口食品.海味零食.肉脯肉','林妮','18599897645','广东省深圳市福龙工业区B2栋3楼西','0755-67772341',1,'2013-03-22 16:52:07',NULL,NULL),(5,'JS_GYS001','兴化佳美调味品厂','长期合作伙伴,主营产品:天然香辛料、鸡精、复合调味料','徐国洋','13754444221','江苏省兴化市林湖工业区','0523-21299098',1,'2015-11-22 16:52:07',NULL,NULL),(6,'BJ_GYS002','北京纳福尔食用油有限公司','长期合作伙伴,主营产品:山茶油、大豆油、花生油、橄榄油等','马莺','13422235678','北京市朝阳区珠江帝景1号楼','010-588634233',1,'2012-03-21 17:52:07',NULL,NULL),(7,'BJ_GYS003','北京国粮食用油有限公司','初次合作伙伴,主营产品:花生油、大豆油、小磨油等','王驰','13344441135','北京大兴青云店开发区','010-588134111',1,'2016-04-13 00:00:00',NULL,NULL),(8,'ZJ_GYS001','慈溪市广和绿色食品厂','长期合作伙伴,主营产品:豆瓣酱、黄豆酱、甜面酱,辣椒,大蒜等农产品','薛圣丹','18099953223','浙江省宁波市慈溪周巷小安村','0574-34449090',1,'2013-11-21 06:02:07',NULL,NULL),(9,'GX_GYS001','优百商贸有限公司','长期合作伙伴,主营产品:日化产品','李立国','13323566543','广西南宁市秀厢大道42-1号','0771-98861134',1,'2013-03-21 19:52:07',NULL,NULL),(10,'JS_GYS002','南京火头军信息技术有限公司','长期合作伙伴,主营产品:不锈钢厨具等','陈女士','13098992113','江苏省南京市浦口区浦口大道1号新城总部大厦A座903室','025-86223345',1,'2013-03-25 16:52:07',NULL,NULL),(11,'GZ_GYS003','广州市白云区美星五金制品厂','长期合作伙伴,主营产品:海绵床垫、坐垫、靠垫、海绵枕头、头枕等','梁天','13562276775','广州市白云区钟落潭镇福龙路20号','020-85542231',1,'2016-12-21 06:12:17',NULL,NULL),(12,'BJ_GYS004','北京隆盛日化科技','长期合作伙伴,主营产品:日化环保清洗剂,家居洗涤专卖、洗涤用品网、墙体除霉剂、墙面霉菌清除剂等','孙欣','13689865678','北京市大兴区旧宫','010-35576786',1,'2014-11-21 12:51:11',NULL,NULL),(13,'SD_GYS001','山东豪克华光联合发展有限公司','长期合作伙伴,主营产品:洗衣皂、洗衣粉、洗衣液、洗洁精、消杀类、香皂等','吴洪转','13245468787','山东济阳济北工业区仁和街21号','0531-53362445',1,'2015-01-28 10:52:07',NULL,NULL),(14,'JS_GYS003','无锡喜源坤商行','长期合作伙伴,主营产品:日化品批销','周一清','18567674532','江苏无锡盛岸西路','0510-32274422',1,'2016-04-23 11:11:11',NULL,NULL),(15,'ZJ_GYS002','乐摆日用品厂','长期合作伙伴,主营产品:各种中、高档塑料杯,塑料乐扣水杯(密封杯)、保鲜杯(保鲜盒)、广告杯、礼品杯','王世杰','13212331567','浙江省金华市义乌市义东路','0579-34452321',1,'2016-08-22 10:01:30',NULL,NULL);/*Table structure for table `smbms_role` */DROP TABLE IF EXISTS `smbms_role`;CREATE TABLE `smbms_role` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`roleCode` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色编码',`roleName` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色名称',`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者',`creationDate` datetime DEFAULT NULL COMMENT '创建时间',`modifyBy` bigint(20) DEFAULT NULL COMMENT '修改者',`modifyDate` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/*Data for the table `smbms_role` */insert  into `smbms_role`(`id`,`roleCode`,`roleName`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`) values (1,'SMBMS_ADMIN','系统管理员',1,'2016-04-13 00:00:00',NULL,NULL),(2,'SMBMS_MANAGER','经理',1,'2016-04-13 00:00:00',NULL,NULL),(3,'SMBMS_EMPLOYEE','普通员工',1,'2016-04-13 00:00:00',NULL,NULL);/*Table structure for table `smbms_user` */DROP TABLE IF EXISTS `smbms_user`;CREATE TABLE `smbms_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`userCode` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户编码',`userName` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户名称',`userPassword` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户密码',`gender` int(10) DEFAULT NULL COMMENT '性别(1:女、 2:男)',`birthday` date DEFAULT NULL COMMENT '出生日期',`phone` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '手机',`address` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',`userRole` int(10) DEFAULT NULL COMMENT '用户角色(取自角色表-角色id)',`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者(userId)',`creationDate` datetime DEFAULT NULL COMMENT '创建时间',`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者(userId)',`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/*Data for the table `smbms_user` */insert  into `smbms_user`(`id`,`userCode`,`userName`,`userPassword`,`gender`,`birthday`,`phone`,`address`,`userRole`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`) values (1,'admin','系统管理员','1234567',1,'1983-10-10','13688889999','北京市海淀区成府路207号',1,1,'2013-03-21 16:52:07',NULL,NULL),(2,'liming','李明','0000000',2,'1983-12-10','13688884457','北京市东城区前门东大街9号',2,1,'0000-00-00 00:00:00',NULL,NULL),(5,'hanlubiao','韩路彪','0000000',2,'1984-06-05','18567542321','北京市朝阳区北辰中心12号',2,1,'2014-12-31 19:52:09',NULL,NULL),(6,'zhanghua','张华','0000000',1,'1983-06-15','13544561111','北京市海淀区学院路61号',3,1,'2013-02-11 10:51:17',NULL,NULL),(7,'wangyang','王洋','0000000',2,'1982-12-31','13444561124','北京市海淀区西二旗辉煌国际16层',3,1,'2014-06-11 19:09:07',NULL,NULL),(8,'zhaoyan','赵燕','0000000',1,'1986-03-07','18098764545','北京市海淀区回龙观小区10号楼',3,1,'2016-04-21 13:54:07',NULL,NULL),(10,'sunlei','孙磊','0000000',2,'1981-01-04','13387676765','北京市朝阳区管庄新月小区12楼',3,1,'2015-05-06 10:52:07',NULL,NULL),(11,'sunxing','孙兴','0000000',2,'1978-03-12','13367890900','北京市朝阳区建国门南大街10号',3,1,'2016-11-09 16:51:17',NULL,NULL),(12,'zhangchen','张晨','0000000',1,'1986-03-28','18098765434','朝阳区管庄路口北柏林爱乐三期13号楼',3,1,'2016-08-09 05:52:37',1,'2016-04-14 14:15:36'),(13,'dengchao','邓超','0000000',2,'1981-11-04','13689674534','北京市海淀区北航家属院10号楼',3,1,'2016-07-11 08:02:47',NULL,NULL),(14,'yangguo','杨过','0000000',2,'1980-01-01','13388886623','北京市朝阳区北苑家园茉莉园20号楼',3,1,'2015-02-01 03:52:07',NULL,NULL),(15,'zhaomin','赵敏','0000000',1,'1987-12-04','18099897657','北京市昌平区天通苑3区12号楼',2,1,'2015-09-12 12:02:12',NULL,NULL);/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

SSM框架环境搭建

创建项目,搭建MVC三层架构的包。

将所需要的jar包导入lib文件夹

 在resources文件夹中创建配置文件db.properties,用于配置连接数据库的参数信息

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/smbms
jdbc.username=root
jdbc.password=admin

再创建mybatis-config.xml文件作为Mybatis框架的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 设置延迟加载开关,默认false(立即加载) --><setting name="lazyLoadingEnabled" value="false" /><!-- 开启MyBatis二级缓存配置,默认已经开启,可以省略 --><setting name="cacheEnabled" value="true" /><!-- 设置驼峰命名规则,会将表字段名user_name自动映射到属性名userName --><setting name="mapUnderscoreToCamelCase" value="true" /></settings><!-- <plugins><plugin interceptor ="com.github.pagehelper.PageInterceptor "><property name = "properties" value="mysql" /></plugin></plugins> --></configuration>

接着创建applicationContext.xml文件作为Spring框架的配置文件

<?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"><!--开启组件扫描 --><context:component-scanbase-package="com.smbms.service" /><!-- 引入外面的properties常量配置文件 --><context:property-placeholderlocation="classpath:db.properties" /><!-- 数据源配置 --><bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><!-- 事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 开启基于注解配置的事务管理 --><tx:annotation-driventransaction-manager="transactionManager" /><!-- 扫描mapper接口文件 --><bean id="mapperScannerConfigurer"class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.smbms.dao" /></bean><!-- 创建sqlSession工厂 --><bean id="sessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!--在MyBatis框架中从数据库中查询数据,需要用Map或者自定义实体类进行保存数据当需要用自定义实体类进行存储数据的时候,那么一定要启用一下这行代码,把自定义实体类的包名设置上去--><!-- <property name="typeAliasesPackage" value="com.yhh.domain" /> --><!-- 如果还有一些专门针对于mybatis的配置,需要引入 --><property name="configLocation"value="classpath:mybatis-config.xml" /><!--  配置mybatis分页插件PageHelper<property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><value></value></property></bean></array></property> --></bean>
</beans>

最后创建springmvc.XML文件作为SpringMVC框架的配置文件

<?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"xmlns:mvc="http://www.springframework.org/schema/mvc"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.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--开启组件扫描 --><!--因为Springmvc框架是用于管理控制层,而当前项目的控制层对应的包是com.smbms.controller,因此需要将当前控制层的包的路径给springmvc主配置文件--><context:component-scanbase-package="com.smbms.controller" /><!--开启mvc注解支持 --><mvc:annotation-driven /><!--释放静态资源 --><mvc:default-servlet-handler /><!--视图解析器 --><bean id="internalResourceViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 设置文件上传下载的配置信息 --><!-- <bean id ="multipartResolver" --><!-- class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> --><!--默认编码 --><!-- <property name ="defaultEncoding" value="utf-8" /> --><!--文件大小最大值 <property name = "maxUploadSize" value="10485760000" />--><!--内存中的最大值 <property name = "maxInMemorySize" value="40960" />--><!--</bean>-->
</beans>

接着在web.xml文件中设置初始化参数信息以及注册Servlet,过滤器,用于拦截浏览器的访问请求和转换浏览器的中文数据的编码格式等等

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--将登录页面作为引导页,当浏览器启动访问服务器的时候默认访问index.jsp这个登录页面--><welcome-file-list><welcome-file>/WEB-INF/jsp/index.jsp</welcome-file></welcome-file-list><!-- 监听并加载spring配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!--监听器,用于监听tomcat服务器的启动,只要一启动tomcat服务器,该监听器就会被触发,就会开始执行以上配置的文件,加载Spring框架的配置文件--><!--总结:一旦tomcat服务器运行,就开始运行Spring框架--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--总结:只要浏览器开始访问服务器,就开始运行SpringMVC框架--><!--配置前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--配置DispatcherServlet需要的配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--加载时机--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><!-- 配置/意味着拦截除了jsp之外的所有请求 --><url-pattern>/</url-pattern></servlet-mapping><!--配置POST请求中文乱码过滤器--><!-- response.setCharacterEncoding("UTF-8"); --><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>*.do</url-pattern></filter-mapping></web-app>

登录功能的完成

在jsp文件夹中创建index.jsp文件作为登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--登录</title>
<script type="text/javascript">function btn(obj,i) {//i为1的时候,表示鼠标在按钮上//i为2的时候,表示鼠标点击了按钮//i为3的时候,表示鼠标移出了按钮switch (i) {case 1:obj.style="width: 120px;background-color: red;border: none;padding: 5px;border-radius: 5px;color: white;";break;case 2:obj.style="width: 120px;background-color: skyblue;border: none;padding: 5px;border-radius: 5px;color: white;";break;case 3:obj.style="width: 120px;background-color: green;border: none;padding: 5px;border-radius: 5px;color: white;";break;}}
</script>
</head>
<body><div align="center" ><h3>登录页面</h3><form action="login.do"  method="post"><table  style="margin: auto;text-align: center;"><tr><td>用户名:</td><td><input type="text" name="username" placeholder="请输入用户名" /></td></tr><tr><td>密码:</td><td><input type="password" name="password" placeholder="请输入密码" /></td></tr><tr ><td colspan="2"><input type="submit"onmouseover="btn(this,1)" onmouseout="btn(this,3)" onmousedown="btn(this,2)" value="登录" style="width: 120px;background-color: green;border: none;padding: 5px;border-radius: 5px;color: white;"/></td></tr></table></form></div>
</body>
</html>

登录功能将通过post请求将用户和密码提交给login.do的虚拟地址上,因此根据MVC三层架构的执行流程,该请求会进入控制层,那么在controller包中建立UserController类,定义接收该请求的方法:

//定义方法,用于接收浏览器的登录页面发送过来的用户名和密码@RequestMapping("/login.do")public String login(@RequestParam String username,@RequestParam String password, HttpSession session){System.out.println("控制器接收到的数据为:"+username+"--"+password);//将控制器接收到的用户名和密码发送给业务逻辑层Map<String, Object> userInfo = userService.login(username, password);String url="";if (userInfo!=null){//说明当前登录的用户是存在的,并且获得了该用户的全部个人信息//将登录成功的用户的个人信息存储在session中,//因为session的作用域是只要不切换浏览器,任何页面都能获得该用户的个人信息session.setAttribute("userInfo",userInfo);System.out.println(userInfo);url="redirect:home.do";}else {System.out.println("当前登录的用户名不存在或者密码错误");}return url;}

并且为了阻止非法用户绕开登录页面进入主页面,我们使用session来处理和判断是否是非法登录,我们在控制器中定义进入主页的访问方法和跳转回登录页面的注销功能的方法:

//定义方法,用于跳转进入主页面@RequestMapping("/home.do")public String home(HttpSession session){//在任何用户想要进入主页面之前,都要验证session对象中是否保存了用户的个人信息Object userInfo = session.getAttribute("userInfo");String url="";if (userInfo!=null){//该用户一定经过了登录页面,也是该用户肯定是合法的用户url="home";}else {//该用户肯定是非法用户,不允许此类用户进入主页面,强制打回登录页面url="index";}return url;}
//定义方法,用于跳转回登录页面@RequestMapping("/index.do")public String index(HttpSession session){//当退出网站,回到登录页面,那么需要将保存在session中的个人信息清除session.invalidate();return "index";}

控制层的完整代码如下:

package com.smbms.controller;import com.smbms.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class UserController {//按照MVC三层架构的运行流程,控制层需要将数据发送给业务逻辑层service//因此在控制层中需要将业务逻辑层的类的对象创建//自动写入,将业务逻辑层的对象注入进来@AutowiredIUserService userService;List<Map<String, Object>> userList=null;//定义方法,用于跳转回登录页面@RequestMapping("/index.do")public String index(HttpSession session){//当退出网站,回到登录页面,那么需要将保存在session中的个人信息清除session.invalidate();return "index";}//定义方法,用于跳转进入主页面@RequestMapping("/home.do")public String home(HttpSession session){//在任何用户想要进入主页面之前,都要验证session对象中是否保存了用户的个人信息Object userInfo = session.getAttribute("userInfo");String url="";if (userInfo!=null){//该用户一定经过了登录页面,也是该用户肯定是合法的用户url="home";}else {//该用户肯定是非法用户,不允许此类用户进入主页面,强制打回登录页面url="index";}return url;}//定义方法,用于接收浏览器的登录页面发送过来的用户名和密码@RequestMapping("/login.do")public String login(@RequestParam String username,@RequestParam String password, HttpSession session){System.out.println("控制器接收到的数据为:"+username+"--"+password);//将控制器接收到的用户名和密码发送给业务逻辑层Map<String, Object> userInfo = userService.login(username, password);String url="";if (userInfo!=null){//说明当前登录的用户是存在的,并且获得了该用户的全部个人信息//将登录成功的用户的个人信息存储在session中,//因为session的作用域是只要不切换浏览器,任何页面都能获得该用户的个人信息session.setAttribute("userInfo",userInfo);System.out.println(userInfo);url="redirect:home.do";}else {System.out.println("当前登录的用户名不存在或者密码错误");}return url;}
}

这里登录失败的博主没有做过多的处理,读者可建立一个登录失败的jsp页面,作为登录失败后提示用户的提示信息,相信读者可自行完成。

接着在业务逻辑层service包创建IUserService接口和UserServiceImp接口实现类,用于处理当前的登录功能:

public interface IUserService {//定义方法,接收控制层发送过来的用户名和密码,用于完成登录功能Map<String,Object> login(String username, String password);
}
package com.smbms.service;import com.smbms.dao.IUserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Map;
@Service(value = "userService")
public class UserServiceImp implements IUserService {//按照MVC三层架构的执行流程,业务逻辑层的数据需要发送给数据访问层dao//因此就需要在该类中获得dao层的对象@AutowiredIUserDao dao;@Overridepublic Map<String, Object> login(String username, String password) {System.out.println("业务逻辑层收到控制层发送过来的数据为:"+username+"--"+password);return dao.login(username,password);}
}

最后在数据访问层dao包中创建IUserDao接口,使用Java注解的方式操作Mybatis框架完成登录的查询功能:

package com.smbms.dao;import org.apache.ibatis.annotations.*;import java.util.List;
import java.util.Map;public interface IUserDao {//查询数据库中是否存在当前用户名和密码的用户,如果存在则获得该用户的全部个人信息,并封装成Map//也就意味着登陆成功@Select("select * from smbms_user where userName=#{userName} and userPassword=#{userPassword}")Map<String,Object> login(@Param("userName") String username, @Param("userPassword") String password);
}

总结

最后配置tomcat服务器,将项目进行运行,通过登录页面输入数据库中已存在的用户进行验证登录,并进入主页面,其效果图如下:

本文到这里结束,后期文章将完善根据不同的登录的用户身份去处理用户管理的功能。

【SSM】第一课 超市订单管理平台--SSM框架整合相关推荐

  1. 【SSM】第四课 超市订单管理平台--订单管理功能

    概念 本文在供应商管理功能之后,继续讲解订单管理功能,该功能是由普通员工与供应商之间的订单进货,经理进行监管等等. 需求分析 订单管理: 1.如果系统管理员登录,操作订单管理没有权限 2.如果经理登录 ...

  2. 【SSM】第三课 超市订单管理平台--供应商管理功能

    概念 本文在上一文章之后完成供应商管理模块的实现. 需求分析 供应商管理: 1.如果是系统管理员,不具备操作供应商的功能 2.如果是经理,经理有权利去添加,删除,修改和查询供应商 3.如果是普通员工, ...

  3. 基于Java jsp+servlet超市订单管理平台设计和实现【建议收藏】

  4. 基于SSM的超市订单管理系统设计与实现

    目 录 1 系统需求分析 1 1.1 系统功能分析 2 1.2 系统功能需求 3 1.3 系统性能需求 3 2 可行性分析 5 2.1 研究前提 5 2.2 设计要求 5 2.2.1 安全性 5 2. ...

  5. 计算机毕业设计ssm教师授课信息综合管理平台451gu系统+程序+源码+lw+远程部署

    计算机毕业设计ssm教师授课信息综合管理平台451gu系统+程序+源码+lw+远程部署 计算机毕业设计ssm教师授课信息综合管理平台451gu系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构 ...

  6. ssm毕设项目校外实习管理平台6tu82(java+VUE+Mybatis+Maven+Mysql+sprnig)

    ssm毕设项目校外实习管理平台6tu82(java+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HB ...

  7. 实验10 超市订单管理系统综合实验

    实验10   超市订单管理系统综合实验 应粉丝要求,本博主帮助实现基本效果! 未避免产生版权问题,本项目博主不公开源码,如果您遇到相关问题可私聊博主! 一.实验目的及任务 通过该实验,掌握利用SSM框 ...

  8. 基于Springboot的超市订单管理系统设计与实现

    目录 摘要 I Abstract II 1 系统需求分析 1 1.1 系统功能分析 1 1.2 系统功能需求 2 1.3 系统性能需求 2 2 可行性分析 3 2.1 研究前提 3 2.2 设计要求 ...

  9. 计算机毕业设计之java+ssm土家风景文化管理平台-旅游景点攻略网站

    项目介绍  平台权限按管理员和用户这两类涉及用户划分.  (a) 管理员:管理员使用本平台涉到的功能主要有:首页,个人中心,用户管理,景点分类管理,热门景点管理,门票订单管理,旅游路线管理,景点评价管 ...

最新文章

  1. 07-Python之面向对象编程(定义)
  2. 前端怎么画三角形_前端小技巧:边框写三角形
  3. 逻辑回归优点_逻辑回归:优点
  4. 【收藏】ASP.NET英文技术文章推荐[11/4 - 11/11]
  5. jQuery简单好用的JavaScript代码库略解使用
  6. 转:五大常用算法——贪心算法详解及经典例子
  7. autorunner测试java_AutoRunner自动化测试工具
  8. idea去掉UML类图的虚线箭头(依赖关系)
  9. select_related和prefetch_related的用法与区别
  10. 网站url监控脚本(告警)
  11. 作为一名程序员,我都收集了哪些好玩的生成器?
  12. 解决浏览器下载附件乱码问题 IE11
  13. matlab 实现disparity,disparity-map 利用matlab立体匹配,可获得 图像左右视图的视差图代码,效果不错238万源代码下载- www.pudn.com...
  14. jointjs与rapheal简单说明
  15. ubuntu配置网易云音乐
  16. 2个阶乘什么意思_两个阶乘符号连在一起是什么意思
  17. 笔记:python基础之内置函数2
  18. 插件中的chalk的用法
  19. ker矩阵是什么意思_矩阵分析(一):空间变换与基变换
  20. 国内医院临床自闭症病例分享:大脑自闭了,为什么是肠道的锅?

热门文章

  1. Jetson TX2安装pytorch探坑记
  2. Matplotlib高级
  3. 思科 Packet Tracer 实验四 交换机VLAN的配置
  4. ip加速器为什么受游戏玩家欢迎?
  5. implements
  6. [软件问题][Altium Designer] 封装中Solid Region与Pad间的Clearance Constraint错误
  7. STM32----电容触摸屏,OLED屏和LCD屏
  8. GLRAM-矩阵的广义低秩近似
  9. 马尔可夫聚类算法(MCL)
  10. Java实现判断闰年