天猫整站SSM项目(三)后台demo---数据查询(一

  • 一、分类查询页面包含的jsp文件
  • 二、查询功能的实现

到这里就开始讲解功能开发了。 开发整站的顺序,通常来说还是按照依赖性来进行,前端需要的数据,都要先通过后台的功能维护在数据库中,才可以拿到。所以,先进行后台功能的开发,然后再是前台功能的开发。

一、分类查询页面包含的jsp文件

分类查询对应的JSP文件是listCategory.jsp,该jsp文件由几个部分组成,为4个jsp文件

1、adminHeader.jsp
每个后台页面都在一开始使用了adminHeader.jsp,这是设置一些jsp的格式和预先定义好要调用的函数

2、adminNavigator.jsp
该页面是显示后台的导航栏的

3、adminPage.jsp
这是显示页面分页效果的jsp

4、adminFooter.jsp
这是页尾部分的显示jsp

二、查询功能的实现

1、新建项目tmall_ssm

2、在java目录下新建一个包com.how2java.tmall.pojo,并创建Category类.
Category类包含两个属性:id和name

public class Category {private Integer id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name == null ? null : name.trim();}
}

3、创建一个mapper包,新建CategoryMapper接口,由于目前只做查询,就添加查询方法

public interface CategoryMapper {List<Category> list();}

4、创建service接口

public interface CategoryService {List<Category> list();
}

5、创建service接口的实现类
新建CategoryService接口的实现类CategoryServiceImpl

注解@Service声明当前类是一个Service类
通过自动装配@Autowired引入CategoryMapper ,在list方法中调用CategoryMapper 的list方法.
有时候 categoryMapper 会出现红色的下划线,原因不是代码出错了,而是idea的bug.

@Service
public class CategoryServiceImpl implements CategoryService{@AutowiredCategoryMapper categoryMapper;public List<Category> list() {return categoryMapper.list();}
}

6、新建controller包,创建CategoryController类

  • 注解@Controller声明当前类是一个控制器
  • 注解@RequestMapping("")表示访问的时候无需额外的地址
  • 注解@Autowired把CategoryServiceImpl自动装配进了CategoryService 接口
  • 注解@RequestMapping(“admin_category_list”) 映射admin_category_list路径的访问
  • 在list方法中,通过categoryService.list()获取所有的Category对象,然后放在"cs"中,并服务端跳转到 “admin/listCategory” 视图。
  • “admin/listCategory” 会根据后续的springMVC.xml 配置文件,跳转到 WEB-INF/jsp/admin/listCategory.jsp 文件
@Controller
@RequestMapping("")
public class CategoryController {@AutowiredCategoryService categoryService;@RequestMapping("admin_category_list")public String list(Model model){List<Category> cs = categoryService.list();model.addAttribute("cs",cs);return "admin/listCategory";}
}

7、在resource目录下新建mapper包,创建CategoryMapper.xml

  • CategoryMapper.xml的namespace必须是com.how2java.tmall.mapper.CategoryMapper,以和CategoryMapper保持一致。
    这是因为:在mybatis中,mapper文件中的namespace是用于绑定Dao接口的,即面向接口编程。当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句

  • CategoryMapper.xml声明了唯一的一条sql语句:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.how2java.tmall.mapper.CategoryMapper"><select id="list" resultType="Category">select * from   category order by id desc</select>
</mapper>

8、在resource目录下创建log4j日文件log4j.properties

这个配置文件的作用是开启日志,当访问页面的时候,查看mybatis运行的情况,执行了什么SQL语句,以及sql语句的返回情况等信息。

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.how2java.tmall=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

9、在resource目录下创建jdbc.properties
这是数据库配置文件

#数据库配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/tmall_ssm?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

10、在resources目录下新建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"xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><context:annotation-config /><context:component-scan base-package="com.how2java.tmall.service" /><!-- 导入数据库配置文件 --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 配置数据库连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><!-- 基本属性 url、user、password --><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="1" /><property name="minIdle" value="1" /><property name="maxActive" value="20" /><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="SELECT 1" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><!-- 打开PSCache,并且指定每个连接上PSCache的大小 --><property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize"value="20" /></bean><!--Mybatis的SessionFactory配置--><bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="typeAliasesPackage" value="com.how2java.tmall.pojo" /><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/><!--分页插件,目前先注释,后面重构的时候才会使用<property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><value></value></property></bean></array></property>--></bean><!--Mybatis的Mapper文件识别--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.how2java.tmall.mapper"/></bean></beans>

(1)启动对注解的识别,配置注解驱动,并且配置扫描包路径选项
spring扫描dao和service层,springmvc扫描controller层

如果在项目中我们在Service层做全局包扫描,那么springmvc不能提供服务,因为springmvc子容器中没有controller对象。所以spring只能做局部扫描,扫描service层

<context:annotation-config />
<context:component-scan base-package="com.how2java.tmall.service" />

(2)指定对jdbc.properties的引用

<context:property-placeholder location="classpath:jdbc.properties"/>

(3)配置数据源

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

(4)配置Mybatis的SessionFactory,其中声明了别名,并且使用前面配置的数据源,扫描CategoryMapper.xml配置文件

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">

(5)扫描mybatis的Mapper类: CategoryMapper.xml

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">

所以说mybatis的配置是写到了spring的配置文件中的

11、在source目录下建立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:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"><!--启动注解识别--><context:annotation-config/><context:component-scan base-package="com.how2java.tmall.controller"><context:include-filter type="annotation"expression="org.springframework.stereotype.Controller"/></context:component-scan><mvc:annotation-driven /><!--开通静态资源的访问--><mvc:default-servlet-handler /><!-- 视图定位 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 对上传文件的解析--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
</beans>

(1)配置注解驱动和controller扫描

    <context:annotation-config/>    <context:component-scan base-package="com.how2java.tmall.controller">        <context:include-filter type="annotation"                                expression="org.springframework.stereotype.Controller"/>    </context:component-scan>    <mvc:annotation-driven />

(2)开通静态资源的访问,否则访问图片,css,js等文件可能出错
因为是在controller中有可能跳转到静态资源

<mvc:default-servlet-handler />

(3)视图定位
跳转目录的前缀和后缀

<!-- 视图定位 -->
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" />
</bean>

(4)对上传文件的解析

12、修改web.xml
修改web.xml,主要提供如下功能:配置spring和springmvc

  1. 指定spring的配置文件为classpath下的applicationContext.xml
  2. 设置中文过滤器
  3. 指定spring mvc配置文件为classpath下的springMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><!-- spring的配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--中文过滤器--><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><!-- spring mvc核心:分发servlet --><servlet><servlet-name>mvc-dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- spring mvc的配置文件 --><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>mvc-dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

13、静态资源
将所有的静态资源添加进来,css,images,js等
14、在web-inf目录创建listCategory.jsp

15、以上就完成了整个项目,接下来创建测试类创建数据,并启动tomcat测试。

16、程序执行的流程

  1. 首先浏览器上访问路径 /admin_category_list
  2. tomcat根据web.xml上的配置信息,拦截到了/admin_category_list,并将其交由DispatcherServlet处理。
  3. DispatcherServlet 根据springMVC的配置,将这次请求交由CategoryController类进行处理,所以需要进行这个类的实例化
  4. 在实例化CategoryController的时候,注入CategoryServiceImpl
  5. 在实例化CategoryServiceImpl的时候,又注入CategoryMapper
  6. 根据ApplicationContext.xml中的配置信息,将CategoryMapper和CategoryMapper.xml关联起来了。
  7. 这样就拿到了实例化好了的CategoryController,并调用list方法
  8. 在list方法中,访问CategoryService,并获取数据,并把数据放在"cs"上,接着服务端跳转到listCategory.jsp去
  9. 最后在listCategory.jsp 中显示数据

天猫整站SSM项目(三)后台demo---数据查询(一)相关推荐

  1. 天猫整站SSM项目(二)数据库设计

    天猫整站SSM项目(二)数据库设计 一.数据库设计分析 二.创建数据库 1. 建立数据库 2. 表与表之间的关系 2.1 表![在这里插入图片描述](https://img-blog.csdnimg. ...

  2. 终于稀里糊涂完成了模仿天猫整站ssm

    1.首先感谢How2J的SSM教程. 2.其次分享一下图片 3.互勉加油

  3. springboot+veu实战项目-天猫整站

    目录 天猫整站 Springboot 一:技术准备 二:开发流程 三:本地演示 1 : 下载并运行 2 : 访问地址 3 : nginx 4 : nginx.conf 配置文件 5 : 启动nginx ...

  4. SpringBoot实战项目教程----springboot天猫整站

    目录 一:技术准备 二:开发流程 三:本地演示 1 : 下载并运行 2 : 访问地址 3 : nginx 4 : nginx.conf 配置文件 5 : 启动nginx 6 : 访问测试 7 : 动静 ...

  5. springboot实战项目----天猫整站---how2j

    目录 天猫整站 Springboot 一:技术准备 二:开发流程 三:本地演示 1 : 下载并运行 2 : 访问地址 3 : nginx 4 : nginx.conf 配置文件 5 : 启动nginx ...

  6. 天猫整站Springboot 从零开始搭建(二)

    目录 1 技术准备 2 开发流程 2.1 需求分析 2.2.1 需求分析-展示 2.2.2 需求分析-交互 2.2.3 需求分析-后台 2.2 表结构设计 2.3 原型 2.4 后台-分类管理 2.4 ...

  7. 天猫整站SSM-后台分类管理-增加(做个人学习笔记整理用)

    天猫整站SSM-后台分类管理-增加(做个人学习笔记整理用) CategoryController: request.getSession().getServletContext()// 获取的是pag ...

  8. 天猫整站SSM-分页-总结(做个人学习笔记整理用)

    天猫整站SSM-分页-herf(做个人学习笔记整理用) 先写Page.java package com.how2java.tmall.util;public class Page {private i ...

  9. 天猫整站SSM-分页-herf(做个人学习笔记整理用)

    天猫整站SSM-分页-(做个人学习笔记整理用) <li ><a href="?start=${page.start-page.count}" aria-label ...

最新文章

  1. 打造属于自己的underscore系列 ( 一 )
  2. 68-95-99规则–以普通英语解释正态分布
  3. 操作系统:小和尚打水+老和尚喝水经典同步问题实现 菜鸟的解题全过程(附具体代码)
  4. python冒泡排序_5种python方法实现冒泡排序可视化:Bubble Sort Visualizer
  5. python连接数据库示例(东西写得很详细,剽过来了)
  6. 在CentOS上安装FFMPEG和Gstream-ffmpeg
  7. mysql的从节点能否执行事务_MySQL执行事务的语法与流程详解
  8. ant引入html页面,antdesign 中 使用 iconfont symbol方式引入图标不展示
  9. scala 获取数组中元素_从Scala中的元素列表中获取随机元素
  10. 高效向前“零延迟” 数据中心IT自动化势在必行
  11. eclipse 字体设置 Courier New字
  12. oracle delphi唱盘,经典再升级 Oracle Delphi MK VI Gen 2
  13. asp .net 多文件上传(二)
  14. netty 5 心跳
  15. 计算学习理论PAC模型
  16. 做数据分析很重要的思维模式!!!
  17. android 多媒体列表,android – 使用Exoplayer的流媒体视频列表
  18. 基于ESP8266的STM32物联网开发板
  19. JavaWeb Ajax的使用
  20. 国米w ndows错误,欧冠国米1:2巴萨!球迷一席话揭球队输球真因,一语中的

热门文章

  1. python多分枝结构
  2. 涛思数据与中天钢铁签署战略合作协议,加速钢铁行业的数字化发展
  3. 【深圳-招聘】全球领先的电路图 WebIDE 招募资深前端
  4. Shader山下(三)逐帧动画
  5. 监控过程组-项目管理
  6. xbox360游戏下载_是下载Xbox和PlayStation游戏还是通过光盘购买它们更好?
  7. 读书笔记:软件工程(12) - 传统方法学 – 软件建模-数据流图
  8. python 堆排序_堆排序用python
  9. 红外小目标检测的非对称上下文调制
  10. 括号匹配 | 2022.8.22