http://how2j.cn/k/tmall_ssm/tmall_ssm-1516/1516.html

总体思路

使用springMVC+spring+mybatis的方式打通表现层/业务层/持久层。从浏览器接收访问路径开始,经过数据库调取数据(只做查询),最后从浏览器显示视图的全部简易流程。

开发环境

  • Eclipse oxygen
  • tomcat 8.5
  • Apache maven 3.5.3
  • mysql

实现步骤

  1. 环境配置完成后,启动Maven新建webapp项目
  2. 在pom.xml中添加依赖(依赖来源:Maven Repository

依赖清单:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<properties>
<spring.version>4.1.3.RELEASE</spring.version>
<pagehelper.version>5.1.2-beta</pagehelper.version>
<mysql.version>5.1.6</mysql.version>
<mybatis.spring.version>1.2.3</mybatis.spring.version>
<mybatis.version>3.1.1</mybatis.version>
<junit.version>4.12</junit.version>
<jstl.version>1.2</jstl.version>
<jsqlparser.version>1.0</jsqlparser.version>
<jackson.version>1.2.7</jackson.version>
<servlet-api.version>3.1.0</servlet-api.version>
<druid.version>1.0.18</druid.version>
<log4j.version>1.2.16</log4j.version>
<commons-logging.version>1.2</commons-logging.version>
<commons-fileupload.version>1.2.1</commons-fileupload.version>
<commons-io.version>1.3.2</commons-io.version>
<commons-lang.version>2.6</commons-lang.version>
<aopalliance.version>1.0</aopalliance.version>
<mybatis-generator.version>1.3.5</mybatis-generator.version>
</properties>

  1. 创建实体类Category,定义了private的id和name,以及getter/setter方法

    1
    2
    3
    4
    5
    6
    7
    8
    public class  {
    private Integer id;
    private String name;
    public Integer () { return id; }
    public void setId(Integer id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    }
  1. 创建接口CategoryMapper,申明list方法,未来可以添加增删改查等操作

    1
    2
    3
    public interface CategoryMapper {
    List<Category> list();
    }
  2. 创建接口CategoryService,申明list方法

    1
    2
    3
    public interface CategoryService {
    List<Category> list();
    }
  3. 创建类CategoryServiceImpl实现CategoryService接

    1
    2
    3
    4
    5
    6
    7

    public class CategoryServiceImpl implements CategoryService {

    CategoryMapper categoryMapper;
    @Override
    public List<Category> list() { return categoryMapper.list(); }
    }

@Service 表示将CategoryServiceImpl类交给spring来管理,并申明为Service类
@Autowired 表示由spring自动装配注入categoryMapper

  1. 创建类CategoryController,处理请求,跳转视图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @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";
    }
    }
  2. 创建CategoryMapper.xml配置文档,实现id倒排序查询所有分类

    1
    2
    3
    4
    5
    6
    <mapper namespace="com.ihappy.lee.mapper.CategoryMapper">

    <select id="list" resultType="Category">
    select * from category order by id desc
    </select>
    </mapper>
  3. 创建核心文档applicationContext.xml–对注解的识别;对jdbc.properties的引用;指定数据库连接池;配置Mybatis的SessionFactory;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <context:component-scan base-package="com.ihappy.lee.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}" />
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="typeAliasesPackage" value="com.ihappy.lee.pojo" />
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>
  4. 创建springMVC.xml

    1
    2
    3
    大专栏  javaweb_forQuerypan class="line">4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <!--springMVC的注解配置-->
    <context:annotation-config/>
    <!-- base-package后跟要扫描的包 expression是注解类的全名 -->
    <context:component-scan base-package="com.ihappy.lee.controller">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <mvc:annotation-driven />

    <!--开通静态资源的访问-->
    <mvc:default-servlet-handler />

    <!-- 视图定位到/WEB-INF/jsp目录下 -->
    <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"/>
  5. 配置web.xml–指定spring核心配置文档applicationContext.xml;设置中文过滤器;分发servlet,指定springMVC配置文档springMVC.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <!-- 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>
  6. 其他配置(日志文档log4j.properties;数据库配置文档jdbc.properties),略

  7. 使用的静态资源,略
  8. 创建listCategory.jsp文档

    1
    2
    3
    <!--  关键代码:
    遍历cs里的内容,然后挨个显示出来 -->
    <c:forEach items="${cs}" var="c">
  9. 简易测试类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static void main(String args[]) {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    try (Connection c = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/tmall_ssm?useUnicode=true&characterEncoding=utf8", "root", "admin");
    Statement s = c.createStatement();) {
    for(int i=0;i<=10;i++) {
    String sqlFormat="insert into category values (null,'测试分类%d')";
    String sql=String.format(sqlFormat, i);
    s.execute(sql);
    }
    }catch(SQLException e) {
    e.printStackTrace();
    }
    }

运行思路

  1. 从浏览器上访问路径/admin_category_list
  2. 根据web.xml中的配置(分发servlet),将拦截到的/admin_category_list,交给DispatcherServlet来处理

    1
    2
    3
    4
    <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>

【注】“url-pattern”使用的’/‘将会覆盖到容器的default servlet,凡是web.xml中找不到匹配的URL,访问请求都将交给该servlet,即DispatcherServlet来处理

  1. DispatcherServlet根据springMVC的配置(扫描注解),将这次请求交由CategoryController类来处理,映射到该类的list方法上(list方法带有@RequestMapping(“admin_category_list”)注解)
  2. CategoryController自动注入CategoryService,在访问了categoryService.list()方法时,再自动注入CategoryMapper
  3. 根据applicationContext.xml配置的会话工厂SessionFactory,使用mapperLocations属性来指定resources/mapper下的xml文档,将读取的CategoryMapper.xml与CategoryMapper关联起来
  4. 通过步骤4、5完成CategoryController的实例化,使用CategoryController.list()处理查询请求,id为‘list’的sql语句被执行,将查询结果封装到Category对象,并存入List类型的cs中
  5. 把集合cs放入model中传递给jsp,之后跳转到admin/listCategory.jsp页面,经过foreach把List项逐个显示出来

javaweb_forQuery的更多相关文章

随机推荐

  1. 2019年春PAT甲级考试

    这次考试不是很理想,一道题目没能做完. 自己原因差不多三条: 1.自己实力不够,准备时间也有点仓促,自己没能做到每道题目都有清晰的思路. 2.考试的心理素质不行,因为设备原因东奔西跑浪费了挺多时间,自 ...

  2. 因子分析和PCA总结

    因子分析和PCA 定义 因子分析就是数据降维工具.从一组相关变量中删除冗余或重复,把相关的变量放在一个因子中,实在不相关的因子有可能被删掉.用一组较小的“派生”变量表示相关变量,这个派生就是新的因子. ...

  3. 深入分析Java反射(六)-反射调用异常处理

    前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...

  4. php抓取网站图片源码

    <?php /*完成网页内容捕获功能*/ function get_img_url($site_name){     $site_fd = fopen($site_name, "r&q ...

  5. 熟练使用WebApi开发

    在建立WebApi框架的时候,要想自己的业务需求是什么.例如PC端(前端),APP端都要使用的同一接口,就得考虑Webapi来提供接口支持了.最近公司刚好让我整合一下公司的接口项目(有WebServi ...

  6. idea使用Maven创建的JavaWeb项目新建文件时没有打包到target目录报错

    背景:在使用tomcat发布这个项目时,浏览网页,js没有效果. 问题:发现打包之后没有同步到target里 解决办法:点击最右侧的Maven栏->所建项目->Lifecycle-> ...

  7. 吴裕雄--天生自然Linux操作系统:Linux vi/vim

    Linux vi/vim 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主 ...

  8. Web API接口

    Web API接口 一.什么是Web API接口 通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介 Web API接口和一般的url链接还是有区别的,Web API接口简单概 ...

  9. mongo客户端升级导致pymongo中使用聚合函数时出现异常

    一.异常信息 The 'cursor' option is required, except for aggregate with the explain argument 二.解决办法 #部分源代码 ...

  10. LeetCode——15. 三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...