文章目录
米米商城后台管理系统
1. 项目目标
本项目主要目的是使学员更深层的了解IT企业的文化和岗位需求、模拟企业的工作场景,分享研制成果,增加学员对今后工作岗位及计算机应用开发对客观世界影响的感性认识,使学员对技术有更深入的理解,在今后工作中能有更明确的目标和方向。并能为日后职业规划提供很好的指导作用。
1.1 具体的技术指标
-
熟悉Spring框架的使用
-
熟悉SpringMVC框架的使用;
-
熟悉MyBatis框架的使用
-
掌握JSP的标签库的使用
-
掌握EL表达式的使用
-
掌握AJAX异步刷新技术的使用
-
掌握文件上传实现
-
掌握异步AJAX分页实现
-
熟悉企业日常的接口开发流程
-
熟悉企业的项目进度控制规范
-
建立起软件开发的基本思想和积累开发中常见的设计思路
-
巩固SSM框架以及JavaEE的相关知识点,增强对各个知识点的进一步认识
2. 项目介绍
2.1 项目名称:米米商城后台管理系统
本系统采用SSM技术进行开发与设计,可以让学员对JavaEE的框架有个全面的认识,并能将实用技能与理论知识进行完美的结合,让学员知其然的同时,也要知其所以然,加快学员向IT技术转型的专业知识,增加学员在社会就业时的竞争力。
2.2 使用技术
服务端:Spring+SpringMVC+MyBatis框架整合
数据库:MySql8.0
web服务器:Tomcat
项目管理:Maven
前端:jQuery+BootStrap+JavaScript
开发工具:idea2020
3. 开发步骤
1、介绍项目实现功能,使用到的技术点,使用到的框架,演示最终效果。
2、创建数据库和表,添加idea可视化。
3、完成SSM框架的搭建。
4、添加字符编码过滤器,实现中文编码解析。
5、使用数据库连接池技术,使用mybatis框架完成底层实体类的创建和数据访问层的实现。
6、实现登录功能。
7、实现登录成功后全部商品分页显示。
8、实现Ajax的翻页功能。
9、添加监听器,实现获取全部商品类型功能。
10、实现商品增加功能。
11、实现Ajax商品删除功能。
12、实现Ajax商品批量删除功能。
13、实现商品修改的回显功能。
14、实现商品修改功能。
15、实现按商品名称条件查询并分页功能,翻页使用Ajax技术。
16、实现按商品类型查询并分页功能,翻页使用Ajax技术。
17、实现按商品价格查询并分页功能,翻页使用Ajax技术。
18、实现按商品名称、商品类型、商品价格多条件查询并分页,翻页使用Ajax技术。
19、实现退出功能。
maven工程构建web项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M4nFiq8Q-1652020287301)(http://zwj.birenyin.cn//img/image-20220503100911939.png)]
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.bjpowernode</groupId>
<artifactId>mimissm</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<!-- 集中定义依赖版本号 -->
<properties>
<junit.version>4.12</junit.version>
<spring.version>5.2.5.RELEASE</spring.version>
<mybatis.version>3.5.1</mybatis.version>
<mybatis.spring.version>1.3.1</mybatis.spring.version>
<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
<mysql.version>8.0.22</mysql.version>
<slf4j.version>1.6.4</slf4j.version>
<druid.version>1.1.12</druid.version>
<pagehelper.version>5.1.2</pagehelper.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>3.0.1</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<jackson.version>2.9.6</jackson.version>
</properties>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</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-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 不一定借助mybaties 自己底层也jdbc一整套的处理 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring的test和junit的test有什么区别和说法 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Mybatis -->
<!-- Mybatis 本身-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- Mybatis 和spring整合 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- Mybatis 和 分页整合-->
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>${mybatis.paginator.version}</version>
</dependency>
<!-- 分页本身依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
<version>${jsp-api.version}</version>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
<!-- 文件异步上传使用的依赖-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
<!-- 插件配置 -->
<!-- JDK编译器的一个插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- 开发的时候使用的1.8 -->
<source>1.8</source>
<!-- 交付给客户的时候使用的也是1.8 -->
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<!--识别所有的配置文件-->
<!-- 资源文件指定添加的文件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
mysql驱动和mysql数据库适配版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6efELoak-1652020287304)(http://zwj.birenyin.cn//img/image-20220503104702446.png)]
配置文件内容都是小写
applicationContext_dao.xml
applicationContext_dao.xml |
---|
![]() |
SqlMapConfig.xml |
---|
![]() |
spring applicationContext_dao.xml接管mabatis.xml配置文件大多数功能
classpath:
DruidDataSource 德鲁伊数据库连接池
applicationContext_service.xml
按照分层来拆
applicationContext_service.xml |
---|
![]() |
dao(mybatis) serviece(事务) controller
<import resource="classpath:applicationContext_dao.xml"></import>
可能发生循环注入
datasource报红没有关系
最后初始化注入的时候都会将这两个配置文件(dao service.xml)都注入到spring 容器中
切入到业务逻辑层
springmvc.xml
springmvc.xml |
---|
![]() |
InternalResourceViewResolver jsp视图解析器的父类码源
InternalResourceViewResolver extends UrlBasedViewResolver
mvc
mvc注解 驱动配置
web.xml
web.xml |
---|
![]() |
监听器配置spring 监听器启动是最早的 过滤器 -->servlet
当web容器启动的时候能直接加载
DispatcherServlet和DefaultServlet区别 要加注解驱动
整个大集合
Mapper
已经对Mapper接口 进行了创建
<!--加载dao包中的所有DAO接口,通过sqlSessionFactory获取sqlSession,然后创建所有的DAO接口对象,存储在Spring容器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.liguoqing.dao"/>
</bean>
小提示
找错要先表面的走一遍过程,
然后再debug
PageInfo
**//**当前页
private int pageNum;
**//****每页的数量
private int pageSize;
** //当前页的数量
private int size;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
**//****总页数
private int pages;
** **//**本页的结果集
private List list;
//前一页
private int prePage;
//下一页
private int nextPage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
//导航条上的第一页
private int navigateFirstPage;
//导航条上的最后一页
private int navigateLastPage;
Spring
Ajax
ajax 是一种浏览器通过 js 异步发起请求,局部更新页面的技术。 Ajax 请求的局部更新,浏览器地址栏不会发生变化 局部更新不会舍弃原来页面的内容
var pname = $("#pname").val();
var typeid = $("#typeid").val();
var lprice = $("#lprice").val();
var hprice = $("#hprice").val();
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/prod/ajaxSplit.action",
data:{"pname":pname,"typeid":typeid,"lprice":lprice,"hprice":hprice},
success:function () {
//刷新显示数据的容器
$("#table").load("http://localhost:8080/admin/product.jsp #table");
分页操作
代码没问题,但是idea依然报错的解决方法
没有代码提示
尝试完要bulid项目
属性名问题,对应的属性名要正确 方便mvc直接将属性值注入到ProductType中
Mapper 空指针
【idea】 build 和rebuild区别
build:针对更改文件编译
rebuild:clean+全部编译
intellj idea中target目录和out目录有什么区别
out存放的是该项目下所有Module(模块)的编译结果。
target存放的是单个Module的编译结果。
如果为某个Module指定了编译结果的路径,则不会再输出到out文件夹中了。
你在Project Structure中的Project选项卡中可以设置Project compiler output的目录。
在Modules中选择某一个模块后,在右侧的Paths选项卡中可以设置该模块的Compiler output目录。
控制层增加新方法, 快捷到业务层接口创建新的方法
在业务层实现接口方法
视图解析器的使用
//转到action 使用forword 和redensit
return "forward:/prod/split.action";
//跳到其他j's'p页面直接 加文件名
return "update";
7324)]
【idea】 build 和rebuild区别
build:针对更改文件编译
rebuild:clean+全部编译
intellj idea中target目录和out目录有什么区别
out存放的是该项目下所有Module(模块)的编译结果。
target存放的是单个Module的编译结果。
如果为某个Module指定了编译结果的路径,则不会再输出到out文件夹中了。
你在Project Structure中的Project选项卡中可以设置Project compiler output的目录。
在Modules中选择某一个模块后,在右侧的Paths选项卡中可以设置该模块的Compiler output目录。
控制层增加新方法, 快捷到业务层接口创建新的方法
[外链图片转存中…(img-QXulfLLN-1652020287325)]
在业务层实现接口方法
[外链图片转存中…(img-bR1vodXB-1652020287325)]
视图解析器的使用
//转到action 使用forword 和redensit
return "forward:/prod/split.action";
//跳到其他j's'p页面直接 加文件名
return "update";