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

天猫整站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
天猫整站SSM项目(三)后台demo---数据查询(一)_第1张图片
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{

    @Autowired
    CategoryMapper 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 {
    @Autowired
    CategoryService 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语句:




<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的配置文件


<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.xsd
     http://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">
        
        <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" />

        
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize"
                  value="20" />
    bean>

    
    <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"/>
        
    bean>

    
    <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


<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.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://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 />

    
    <bean
            class="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)视图定位
跳转目录的前缀和后缀


<bean
        class="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

<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">

  
  <context-param>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath:applicationContext.xmlparam-value>
  context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
  listener>

  
  <filter>
    <filter-name>CharacterEncodingFilterfilter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    <init-param>
      <param-name>encodingparam-name>
      <param-value>utf-8param-value>
    init-param>
  filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilterfilter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>

  
  <servlet>
    <servlet-name>mvc-dispatcherservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    
    <init-param>
      <param-name>contextConfigLocationparam-name>
      <param-value>classpath:springMVC.xmlparam-value>
    init-param>
    <load-on-startup>1load-on-startup>
  servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcherservlet-name>
    <url-pattern>/url-pattern>
  servlet-mapping>

web-app>

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

15、以上就完成了整个项目,接下来创建测试类创建数据,并启动tomcat测试。
天猫整站SSM项目(三)后台demo---数据查询(一)_第2张图片
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---数据查询(一)_第3张图片

你可能感兴趣的:(SSM项目)