栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSM 项目 ---------小米商城后台管理系统

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSM 项目 ---------小米商城后台管理系统

目录

一、项目名称二、使用技术三、开发步骤四、具体实现

1、创建数据库表2、项目结构3、配置文件

pom.xmldb.propertiesapplicationContext-dao.xmlapplicationContext-services.xmlspringmvc.xmlSqlMapConfig.xmlweb.xml 4、使用 MyBatis 逆向工程生成 pojo 类 和 dao 类

在 maven 中添加依赖配置逆向工程核心配置文件 generatorConfig.xml运行并生成 pojo类 和 dao类 5、utils 包下添加 MD5 加密算法工具类6、登录功能7、分页与翻页


一、项目名称

名称 :小米商城后台管理系统

本项目主要目的是使学员更深层的了解IT企业的文化和岗位需求、模拟企业的工作场景,分享研制成果,增加学员对今后工作岗位及计算机应用开发对客观世界影响的感性认识,使学员对技术有更深入的理解,在今后工作中能有更明确的目标和方向。并能为日后职业规划提供很好的指导作用。

二、使用技术

服务端:Spring+SpringMVC+MyBatis框架整合数据库:MySql8.0web服务器:Tomcat项目管理:Maven前端:jQuery + BootStrap + Javascript开发工具:idea2021 三、开发步骤

介绍项目实现功能,使用到的技术点,使用到的框架,演示最终效果。创建数据库和表,添加idea可视化。完成SSM框架的搭建。添加字符编码过滤器,实现中文编码解析。使用数据库连接池技术,使用mybatis框架完成底层实体类的创建和数据访问层的实现。实现登录功能。实现登录成功后全部商品分页显示。实现Ajax的翻页功能。添加监听器,实现获取全部商品类型功能。实现商品增加功能。实现Ajax商品删除功能。实现Ajax商品批量删除功能。实现商品修改的回显功能。实现商品修改功能。实现按商品名称条件查询并分页功能,翻页使用Ajax技术。实现按商品类型查询并分页功能,翻页使用Ajax技术。实现按商品价格查询并分页功能,翻页使用Ajax技术。实现按商品名称、商品类型、商品价格多条件查询并分页,翻页使用Ajax技术。实现退出功能。 四、具体实现 1、创建数据库表

DROp DATAbase IF EXISTS xiaomissm;
CREATE DATAbase xiaomissm DEFAULT CHARSET utf8;


USE xiaomissm;
DROP TABLE IF EXISTS `orderdetail`;
DROP TABLE IF EXISTS `xmorder`;
DROP TABLE IF EXISTS `carshop`;
DROP TABLE IF EXISTS `address`;
DROP TABLE IF EXISTS `users`;
drop table if exists product_info;
drop table if exists product_type;
drop table if exists admin;


#DROP TABLE xiaomi_admin;
#管理员表
CREATE TABLE admin(
	a_id INT AUTO_INCREMENT PRIMARY KEY,
	a_name VARCHAR(20),
	a_pass VARCHAR(20)
);
INSERT INTO admin(a_id,a_name,a_pass) VALUES(1,'admin','000000');

#商品类型表
CREATE TABLE product_type
(
	type_id int auto_increment PRIMARY KEY,
	type_name varchar(20)
);

#添加数据
insert into product_type(type_name) values('手机');
insert into product_type(type_name) values('电脑');
insert into product_type(type_name) values('电视');


#创建商品表
create table product_info
(
	p_id int auto_increment primary key,
	p_name varchar(20),
	p_content varchar(200), ##############33商品规格/简介
	p_price int, ###############价格
	p_image varchar(200), #############图片
	p_number int, ########数量
	type_id int,
	p_date date,
	FOREIGN KEY(type_id) REFERENCES product_type(type_id)
);

#添加商品
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Note2','双曲面 黑色 6GB内存 64GB闪存',2899,'xmNote2.jpg',500,1,'2018-01-04');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('红米Note5A','5.5英寸 粉色 2GB内存 16GB闪存',699,'hmNote5A.jpg',500,1,'2018-01-05');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('红米Note4X','5.5英寸 绿色 4GB内存 64GB闪存',1299,'hmNote4X.jpg',500,1,'2018-01-06');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('红米4','5英寸 金色 3GB内存 32GB闪存',999,'hm4.jpg',500,1,'2018-01-07');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('红米4X','5英寸 黑色 3GB内存 32GB闪存',899,'hm4X.jpg',500,1,'2018-01-08');

insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米平板3','7.9英寸 金色 4GB内存 64GB闪存',1499,'xmPad3.jpg',500,2,'2018-01-09');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Air12','12.5英寸 银色 4GB内存 128GB闪存',3599,'xmAir12.jpg',500,2,'2018-01-18');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Air13','13.3英寸 银色 8GB内存 256GB闪存',4999,'xmAir13.jpg',500,2,'2018-01-17');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Pro','15.6英寸 灰色 16GB内存 256GB闪存',6999,'xmPro.jpg',500,2,'2018-01-16');

insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4','49英寸 原装LG屏 3840×2160 真4K',3299,'xmTV4-49.jpg',500,3,'2018-01-15');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4','55英寸 原装三星屏 3840×2160 真4K',3999,'xmTV4-55.jpg',500,3,'2018-01-13');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4','65英寸 原装三星屏 3840×2160 真4K',8999,'xmTV4-65.jpg',500,3,'2018-01-22');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4A','43英寸 FHD全高清屏 1920*1080',1999,'xmTV4A-43.jpg',500,3,'2018-01-11');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米电视4A','49英寸 FHD全高清屏 1920*1080',2299,'xmTV4A-49.jpg',500,3,'2018-01-21');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米MIX2','全陶瓷 黑色 8GB内存 128GB闪存',4699,'xmMIX2.jpg',500,1,'2018-04-01');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米Note3','全网通 蓝色 6GB内存 64GB闪存',2499,'xmNote3.jpg',500,1,'2018-03-01');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米6','玻璃金属 白色 6GB内存 128GB闪存',2899,'xm6.jpg',500,1,'2018-02-01');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米MAX2','全金属 金色 4GB内存 64GB闪存',1599,'xmMAX2.jpg',500,1,'2018-01-02');
insert into product_info(p_name,p_content,p_price,p_image,p_number,type_id,p_date) values('小米5X','全金属 金色 4GB内存 64GB闪存',1499,'xm5X.jpg',500,1,'2018-01-03');

#创建前台用户表
CREATE TABLE `users` (
    `uid` int(11) NOT NULL auto_increment,
    `uname` varchar(50) default NULL,
    `upass` varbinary(50) default NULL,
    `ustatus` int(11) default NULL,
    `ulevel` int(11) default NULL,
    `score` int(11) default NULL,
    PRIMARY KEY  (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#增加用户数据
INSERT INTO `users` VALUES ('1', 'zar', 0x313233343536, '0', '0', '0');
INSERT INTO `users` VALUES ('2', 'zhangsan', 0x313233343536, '1', '0', '0');

#创建地址表
CREATE TABLE `address` (
    `addressId` int(11) NOT NULL auto_increment,
    `uid` int(11) default NULL,
    `cnee` varchar(50) default NULL,
    `phone` varchar(11) default NULL,
    `address` varchar(100) default NULL,
    PRIMARY KEY  (`addressId`),
    KEY `FK_Reference_1` (`uid`),
    CONSTRAINT `FK_Reference_1` FOREIGN KEY (`uid`) REFERENCES `users` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#增加地址表数据
INSERT INTO `address` VALUES ('1', '1', 'zar', '15266676667', '北京海淀甲骨文');
INSERT INTO `address` VALUES ('2', '1', 'oracle', '15266678888', '北京朝阳科技文化一条街');
INSERT INTO `address` VALUES ('3', '2', '张三', '15290888162', '北京大兴西红门');

#创建购物车表
CREATE TABLE `carshop` (
     `cid` int(11) NOT NULL auto_increment,
     `uid` int(11) default NULL,
     `pid` int(11) default NULL,
     `numbers` int(11) default NULL,
     PRIMARY KEY  (`cid`),
     KEY `FK_Reference_3` (`uid`),
     KEY `FK_Reference_4` (`pid`),
     CONSTRAINT `FK_Reference_4` FOREIGN KEY (`pid`) REFERENCES `product_info` (`p_id`),
     CONSTRAINT `FK_Reference_3` FOREIGN KEY (`uid`) REFERENCES `users` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#增加购物车数据
insert into carshop (uid,pid,numbers) values (1,1,2);

#创建订单表
CREATE TABLE `xmorder` (
   `oid` char(32) NOT NULL ,
   `uid` int(11) default NULL,
   `addressId` int(11) default NULL,
   `totalprice` double(10,2) default NULL,
   `remarks` varchar(200) default NULL,
   `status` varchar(6) default NULL,
   `odate` TIMESTAMP  DEFAULT CURRENT_TIMESTAMP ,
    PRIMARY KEY  (`oid`),
    KEY `FK_Reference_5` (`uid`),
    KEY `FK_Reference_6` (`addressId`),
    CONSTRAINT `FK_Reference_6` FOREIGN KEY (`addressId`) REFERENCES `address` (`addressId`),
    CONSTRAINT `FK_Reference_5` FOREIGN KEY (`uid`) REFERENCES `users` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#订单表增加数据
insert into xmorder(oid,uid,addressid,totalprice,remarks,status,odate) values('abcd111222333444777888999000wwww',1,1,9996,'尽快送到','待发货',default);

#创建订单明细表
CREATE TABLE `orderdetail` (
    `odid` int(11) NOT NULL auto_increment,
    `oid` char(32) default NULL,
    `pid` int(11) default NULL,
    `pnumber` int(11) default NULL,
    `ptotal` double(10,2) default NULL,
    PRIMARY KEY  (`odid`),
    KEY `FK_Reference_7` (`oid`),
    KEY `FK_Reference_8` (`pid`),
    CONSTRAINT `FK_Reference_8` FOREIGN KEY (`pid`) REFERENCES `product_info` (`p_id`),
    CONSTRAINT `FK_Reference_9` FOREIGN KEY (`oid`) REFERENCES `xmorder` (`oid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into orderdetail(oid,pid,pnumber,ptotal) values ('abcd111222333444777888999000wwww',1,2,9996);

select * from admin;
select * from users;
select * from product_type;
select * from product_info ;
select * from orderdetail;
select * from xmorder;
select * from carshop;
select * from address;

用 Navicat 执行此 SQL文件 即可

2、项目结构

SSM 项目分层参考 : SSM框架下各个层的解释说明

3、配置文件 pom.xml

与之前不同整合项目不同的是,在此版本号进行集中管理,便于后续进行更改




  4.0.0

  com.fancy
  xiaomissm
  1.0-SNAPSHOT
  war

  xiaomissm Maven Webapp
  
  http://www.example.com

  
    UTF-8
    1.7
    1.7
    
    4.12
    5.2.5.RELEASE
    3.5.1
    1.3.1
    1.2.15
    8.0.22
    1.6.4
    1.1.12
    5.1.2
    1.2
    3.0.1
    2.0
    2.9.6
  

  
      
      
        org.springframework
        spring-context
        ${spring.version}
      
      
        org.springframework
        spring-beans
        ${spring.version}
      
      
        org.springframework
        spring-webmvc
        ${spring.version}
      
      
        org.springframework
        spring-jdbc
        ${spring.version}
      
      
        org.springframework
        spring-aspects
        ${spring.version}
      
      
        org.springframework
        spring-jms
        ${spring.version}
      
      
        org.springframework
        spring-context-support
        ${spring.version}
      
      
        org.springframework
        spring-test
        ${spring.version}
      
      
      
        org.mybatis
        mybatis
        ${mybatis.version}
      
      
        org.mybatis
        mybatis-spring
        ${mybatis.spring.version}
      
      
        com.github.miemiedev
        mybatis-paginator
        ${mybatis.paginator.version}
      
      
        com.github.pagehelper
        pagehelper
        ${pagehelper.version}
      
      
      
        mysql
        mysql-connector-java
        ${mysql.version}
      
      
      
        com.alibaba
        druid
        ${druid.version}
      

      
      
        junit
        junit
        ${junit.version}
        test
      


      
      
        jstl
        jstl
        ${jstl.version}
      
      
        javax.servlet
        javax.servlet-api
        3.0.1
        provided
      
      
        javax.servlet
        jsp-api
        provided
        ${jsp-api.version}
      
      
      
        com.fasterxml.jackson.core
        jackson-databind
        ${jackson.version}
      
      
        commons-io
        commons-io
        2.4
      
      
        commons-fileupload
        commons-fileupload
        1.3.1
      

  

  
      
      
          
              src/main/java
              
                  ***.xml
              
              false
          
          
              src/main/resources
              
                  ***.xml
              
              false
          
      
    xiaomissm
    
      
        
          maven-clean-plugin
          3.1.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.8.0
        
        
          maven-surefire-plugin
          2.22.1
        
        
          maven-war-plugin
          3.2.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
    
  


db.properties

在此需要在 password、username等前加上前缀 jdbc. ,以防与登录界面中的username、password的相冲突

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xiaomissm?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123456

application-services.xml 配置文件中的 ${ } 可以取到全局域所有的username与password#

applicationContext-dao.xml

此文件主要完成 Spring 在 dao 包(持久层)相关配置,主要分为以下四步

(1) 配置属性文件 :读取数据库配置文件 db.properties ,引入连接数据库的相关属性

(2) 配置数据源 :数据库连接池用到阿里旗下 druid 连接池,读取数据库属性,完成数据库的连接

(3) 配置 MyBatis 工厂 : 需要用到数据源与mybatis核心配置文件

(4) 创建动态代理对象 :代码中有解释



      
      
      
      
          
          
          
          
      
      
      
          
          
          
          
      

    
      
          
          
      

applicationContext-services.xml

此文件主要完成 Spring 在 services 包 (业务层) 相关配置,主要分为以下几步操作

(1) 配置组件扫描器,完成对于 services 包的扫描,使注解生效

(2) 设置事务管理器

(3) 添加事务切面

(4) 完成切面和切入点的织入

至于为什么要在 services 包而不是 dao 包下添加事务,可以参考此文章:
https://blog.csdn.net/m0_51111980/article/details/123140072?spm=1001.2014.3001.5501



    
    
    
    

    
    
        
    
    
    
    
        
            
            
            
            
            
        
    
    
    
    
        
        
    

springmvc.xml

springmvc.xml 配置文件主要完成 Spring 在 controllers 包(控制层) 需要的相关配置,分为以下四步

(1) 注册组件扫描器:使 controllers 包下注解生效

(2) 指定视图解析器:简化视图路径,便于开发

(3) 设置文件上传核心组件:使用MultipartFile这个类主要是来实现以表单的形式进行多文件上传功能

(4) 注册注解驱动:后,默认会帮我们注册默认处理请求,参数和返回值的类。其会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为 @Controller 分发请求所必须的。




    
    

    
    
        
        
        
    

    
    

    
    

SqlMapConfig.xml

SqlMapConfig.xml 作为 MyBatis 全局配置文件,一般完成两个设置别名、指定 sql 映射文件。由于我们要在项目中用到分页功能,在此我们要注册分页插件。




    
    
        
    

    
    
        
    
    
    
    
        
    

web.xml

我们需要在 web.xml 配置文件中完成注册字符编码过滤器、注册Spring框架、注册 SpringMVC 框架的代码,以便在web项目启动时框架可以正常使用。

注册Spring框架主要完成 注册监听器和加载applicationContext.xml配置文件 两个部分

注册SpringMVC框架主要完成注册中央调度器和拦截匹配的请求两部分,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。



    
    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
        
            forceRequsetEncoding
            true
        
        
            forceResponseEncoding
            true
        
    
    
        characterEncodingFilter
        
    public final static String getMD5(String str){
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");//创建具有指定算法名称的摘要
            md.update(str.getBytes());                    //使用指定的字节数组更新摘要
            byte mdBytes[] = md.digest();                 //进行哈希计算并返回一个字节数组

            String hash = "";
            for(int i= 0;i 
6、登录功能 

我们先编写登录界面 login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>




	
		
		
		
		
		
		
		
	

	
		

SSM 项目 ---------小米商城后台管理系统
LOGIN
用户名:
密码:
${errmsg}

如图所示

接下来是做登录判断,如果表单提交数据与数据库表中数据相符,则登录成功;反之,则登录失败。

做登录判断的功能函数属于业务层范围,我们在services包下定义 AdminService 接口及其实现类 AdminServiceImpl,其内部封装 login() 作为登录判断的函数。

做业务层开发时,我们知道业务层函数是基于持久层操作数据库方法的,所以业务层实现类一定会有持久层的对象。

既然要判断表中是否存在该数据,我们需要到 MyBatis 逆向工程生成的 AdminMapper 接口中寻找 根据用户名称查询 的方法。

我们发现其中只有根据主键查询数据的方法,而 admin 表中 aName属性不是主键,在此我们需要额外再创建方法

Admin selectByName(String aName) 来根据用户提交的username来查询

mapper 映射文件中同时定义

   
            商品类型:   
            价格:-
            
        
    

  全选
<%----%>
商品名 商品介绍 定价(元) 商品图片 商品数量 操作
${p.pName} ${p.pContent} ${p.pPrice} ${p.pNumber}删除--%> <%--   修改

暂时没有符合条件的商品!

结果如图:


所有商品显示在一页中。

接下来,我们需要完成的是分页操作。分页操作实际上就是要在函数中实现 select * from product_info limit 10,5查询,在此我们使用 PageHelper 插件来辅助完成分页操作。

在 ProductService 接口中添加 splitPage 方法并在 ProductServiceImpl 进行实现

@Override
public PageInfo splitPage(int pageNum, int pageSize) {
    //使用分页插件 PageHelper 工具类完成分页设置
    PageHelper.startPage(pageNum, pageSize);
    
    List list = productInfoMapper.selectAll();
    
    //将查询到的集合封装进 PageInfo 对象中
    PageInfo pageInfo = new PageInfo<>(list);
    
    return pageInfo;
}

在控制层中,我们只需要将 splitPage() 方法执行即可,并将结果提交到 product.jsp 页面中

结果如图,第一页的数据就显现出来了


不过,此方法只能得到第一页的数据,要想得到第2、3、4等页的数据,我们需要定义 ajax 进行翻页操作。

翻页事实上是修改 PageHelper.startPage(pageNum, pageSize) 的 pageNum 属性,在定义 ajax 请求时我们要特别地将页数 page 进行传入。


每次将 page 传入 ajaxSplit(page) 函数中,并将数据提交控制器给 ajaxSplit.action 中,新的page数据存入到session中,EL表达式${}的原理是每次刷新页面都重新从session中取出数据。

ajax请求:


控制器方法:

@RequestMapping("/ajaxSplit.action")
@ResponseBody
public void ajaxSplit(int page, HttpSession session) {
         PageInfo info = productInfoService.splitPage(page, 5);
         session.setAttribute("info", info);
}

结果:


未完待续

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/748861.html

Java相关栏目本月热门文章

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号