IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)

目录

      • 写在前面的话
      • 一、环境描述
      • 二、Spring和SpringMVC环境搭建
        • 2.1 新建Maven项目
        • 2.2 建立项目结构
        • 2.3 搭建Spring框架
          • 2.3.1 引入Maven依赖
          • 2.3.2 添加Spring框架
          • 2.3.3 编写测试类,测试Spring
        • 2.4. 搭建SpringMVC
          • 2.4.1 添加SpringMVC框架及整合Spring和SpringMVC
          • 2.4.2 编写相关代码,测试SpringMVC
        • 2.5. 整合Spring、SpringMVC小结
          • 2.5.1 理解“整合Spring、Spring MVC”
          • 2.5.2 如何整合Spring、SpringMVC
      • 三、Mybatis框架
        • 搭建之前的话
        • 搭建之前的代码
        • 3.1 准备工作
          • 3.1.1 在idea中安装插件
          • 3.1.2 引入Maven依赖
        • 3.2 配置generatorConfig.xml
        • 3.3 执行generatorConfig.xml
        • 3.4 Spring整合Mybatis
          • 3.4.1 配置applicationContext.xml
          • 3.4.2 测试Mybatis
      • 写在后面的话

写在前面的话

  很久没有接触web了,重新开始写(PS:对于SSM应该是第一次写)遇到了一些问题,在这里记录下来整个SSM搭建的过程,留下些什么值得以后去回忆。

一、环境描述

  • OS:macOS Mojave 版本 10.14.6
  • 编译器:IntelliJ IDEA 2019.2.3 (Ultimate Edition)
  • Java版本:12
  • Maven版本:3.6.1
  • Tomcat版本:9.0.24
  • 数据库及其版本:mysql-8.0.17

二、Spring和SpringMVC环境搭建

2.1 新建Maven项目

IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第1张图片

IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第2张图片

注意:这里如果选择了Create from archetype,那么新建的项目里是没有src目录的,src目录里的东西都要自己手动建立。


下图中的GroupId和ArtifactId可以简单的理解为该项目所属的小组、项目名称。

IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第3张图片


此处的settings file和repository可以使用默认位置的,也可以使用自定义位置的,个人建议使用自定义位置的配置文件,如果这里有其他疑问可以去Maven的相关教程。本文中我选择了自己定义的配置文件位置。

IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第4张图片

  接下来一路next直到finish即可。

2.2 建立项目结构

  在接下来进行项目结构的建立之前,你看到的项目目录应该和下图差不多。如果不一样,说明你需要手动新建这些文件夹,其中webapp要在file->project structure->facests中新建一个Web
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第5张图片
新建Web:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第6张图片


  首先在/src/main下建立java和resources文件。其中java文件的作用是放置服务端文件,resources是放置一些配置文件。
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第7张图片
  接下来要赋予java和resources上述的职责。在file->project structure中分别给java和resources选择各自的“颜色”,结果如下:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第8张图片


  最后,在/src/main/java下建立相关的包,在/src/webapp/WEB-INF 下建立pages(放置jsp页面用),最终的项目结构如下图:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第9张图片

2.3 搭建Spring框架

2.3.1 引入Maven依赖

  在未引入依赖之前,pom.xml内容如下:



<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.0modelVersion>

  <groupId>com.web.ssm.yygroupId>
  <artifactId>RegistrationSystemartifactId>
  <version>1.0-SNAPSHOTversion>
  <packaging>warpackaging>

  <name>RegistrationSystem Maven Webappname>
  
  <url>http://www.example.comurl>

  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.7maven.compiler.source>
    <maven.compiler.target>1.7maven.compiler.target>
  properties>

  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.11version>
      <scope>testscope>
    dependency>
  dependencies>

  <build>
    <finalName>RegistrationSystemfinalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-clean-pluginartifactId>
          <version>3.1.0version>
        plugin>
        
        <plugin>
          <artifactId>maven-resources-pluginartifactId>
          <version>3.0.2version>
        plugin>
        <plugin>
          <artifactId>maven-compiler-pluginartifactId>
          <version>3.8.0version>
        plugin>
        <plugin>
          <artifactId>maven-surefire-pluginartifactId>
          <version>2.22.1version>
        plugin>
        <plugin>
          <artifactId>maven-war-pluginartifactId>
          <version>3.2.2version>
        plugin>
        <plugin>
          <artifactId>maven-install-pluginartifactId>
          <version>2.5.2version>
        plugin>
        <plugin>
          <artifactId>maven-deploy-pluginartifactId>
          <version>2.8.2version>
        plugin>
      plugins>
    pluginManagement>
  build>
project>

现在添加了相关的依赖:

  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.7maven.compiler.source>
    <maven.compiler.target>1.7maven.compiler.target>
    <spring.version>5.0.2.RELEASEspring.version>
    <slf4j.version>1.6.6slf4j.version>
    <log4j.version>1.2.12log4j.version>
    <mysql.version>5.1.6mysql.version>
    <mybatis.version>3.4.5mybatis.version>
  properties>

<dependencies>
      <dependency>
        <groupId>org.aspectjgroupId>
        <artifactId>aspectjweaverartifactId>
        <version>1.6.8version>
      dependency>
      <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-aopartifactId>
        <version>${spring.version}version>
      dependency>
      <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>${spring.version}version>
      dependency>
      <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-webartifactId>
        <version>${spring.version}version>
      dependency>
      <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-webmvcartifactId>
        <version>${spring.version}version>
      dependency>
      <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-testartifactId>
        <version>${spring.version}version>
      dependency>
      <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-txartifactId>
        <version>${spring.version}version>
      dependency>
      <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-jdbcartifactId>
        <version>${spring.version}version>
      dependency>
      <dependency>
        <groupId>junitgroupId>
        <artifactId>junitartifactId>
        <version>4.12version>
        <scope>compilescope>
      dependency>
      <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>${mysql.version}version>
      dependency>
      <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>servlet-apiartifactId>
        <version>2.5version>
        <scope>providedscope>
      dependency>
      <dependency>
        <groupId>javax.servlet.jspgroupId>
        <artifactId>jsp-apiartifactId>
        <version>2.0version>
        <scope>providedscope>
      dependency>
      <dependency>
        <groupId>jstlgroupId>
        <artifactId>jstlartifactId>
        <version>1.2version>
      dependency> 
      <dependency>
        <groupId>log4jgroupId>
        <artifactId>log4jartifactId>
        <version>${log4j.version}version>
      dependency>
      <dependency>
        <groupId>org.slf4jgroupId>
        <artifactId>slf4j-apiartifactId>
        <version>${slf4j.version}version>
      dependency>
      <dependency>
        <groupId>org.slf4jgroupId>
        <artifactId>slf4j-log4j12artifactId>
        <version>${slf4j.version}version>
      dependency> 
      <dependency>
        <groupId>org.mybatisgroupId>
        <artifactId>mybatisartifactId>
        <version>${mybatis.version}version>
      dependency>
      <dependency>
        <groupId>org.mybatisgroupId>
        <artifactId>mybatis-springartifactId>
        <version>1.3.0version>
      dependency>
      <dependency>
        <groupId>c3p0groupId>
        <artifactId>c3p0artifactId>
        <version>0.9.1.2version>
        <type>jartype>
        <scope>compilescope>
      dependency>
    dependencies>

注意在这里加入依赖,加入后可能会飘红,只需要点击右下角的Import Changes或在侧边栏刷新一下Maven即可自动导入依赖。

解决方法一:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第10张图片

解决方法二:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第11张图片
引入依赖之后就不会变成红色了:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第12张图片

2.3.2 添加Spring框架

  首先添加Spring的applicationContext.xml,位于/src/resources下:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第13张图片

接下来文件内部就会提示你,并没有配置相关的上下文,所以按照提示一步一步去配置即可:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第14张图片

选择刚才建立的xml文件
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第15张图片

2.3.3 编写测试类,测试Spring

test类:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第16张图片
Test.java:

package com.yy.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test{

    @org.junit.Test
    public void TestSpring(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        System.out.println(applicationContext.hashCode());
    }
}

点击左侧的小三角+圆形即可运行:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第17张图片
结果:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第18张图片

输出了ApplicationContext对象的哈希值,如果想要测试注入的话,可以添加以下代码,再次运行testSpring方法即可


以下内容为测试Spring注入是否成功

  首先在service包下建立如下接口
在这里插入图片描述

UserService.java:

package com.yy.service;

import java.util.List;

public interface UserService {
    public List<Object> findAllUsers();
}

UserServiceImpl.java:

package com.yy.service.Impl;

import com.yy.service.UserService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Override
    public List<Object> findAllUsers() {
        System.out.println("service层实现被调用");
        return null;
    }
}

applicationContext.xml:


<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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:component-scan base-package="com.yy" >
        
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    context:component-scan>
beans>

Test.java内修改为:

package com.yy.test;

import com.yy.service.Impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test{

    @org.junit.Test
    public void TestSpring(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        UserServiceImpl userService = (UserServiceImpl) applicationContext.getBean("userServiceImpl");
        userService.findAllUsers();
    }
}

执行TestSpring()方法之后可以看到:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第19张图片
就此,说明我们的Spring框架已经成功添加。

2.4. 搭建SpringMVC

2.4.1 添加SpringMVC框架及整合Spring和SpringMVC

  首先,在/src/main/resources下添加Spring MVC框架的配置文件SpringMVC.xml,并添加如下内容:
SpringMVC.xml:


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:component-scan base-package="com.yy">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    context:component-scan>

    
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    bean>
    
    

    
    <mvc:annotation-driven/>
beans>

/src/main/resources/内容:
在这里插入图片描述
  接下来,在/src/main/webapp/WEB-INF/web.xml中添加SpringMVC相关的配置。
web.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_3_0.xsd"
         version="3.0">
  <display-name>Archetype Created Web Applicationdisplay-name>
  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
  listener>
  
  <context-param>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath:applicationContext.xmlparam-value>
  context-param>
  
  <servlet>
    <servlet-name>dispatcherServletservlet-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>dispatcherServletservlet-name>
    <url-pattern>/url-pattern>
  servlet-mapping>

  
  <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>
web-app>

2.4.2 编写相关代码,测试SpringMVC

  在/src/webapp/WEB-INF/pages下建立list.jsp页面
list.jsp:

<%--
  Created by IntelliJ IDEA.
  User: yangyang
  Date: 2019/10/10
  Time: 14:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>List页面title>
head>
<body>
<h1>${tag}h1>
body>
html>

  在controller包下添加PublicController.java类
PublicController.java:

package com.yy.controller;

import com.yy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
public class PublicController {

    @Autowired
    private UserService userService;

    @RequestMapping("/public/findAllUsers")
    public String findAllUsers(Model model){
        System.out.println("controller层被调用");
        // 因为还未配置Mybatis,所以这里只是模拟查询查询操作,没有结果也不要担心~
        List<Object>objectList = userService.findAllUsers();
        model.addAttribute("tag", "成功!");
        return "list";
    }
}

  接下来部署到Tomcat上,新建一个Tomcat Server:

IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第20张图片
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第21张图片
点击ok之后,会看到下边有一个Warning: No artifacts marked for deployment,点击Fix,选择war exploed,然后将Application context一栏设置为"/"
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第22张图片
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第23张图片

在这里解释一下war和war exploded的区别:

  • war : Web application ARchive,一种JAR文件,其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源;
  • war exploded : 在这里可以理解为展开,不压缩的意思。也就是war、jar等产出物没压缩前的目录结构。建议在开发的时候使用这种模式,便于修改了文件的效果立刻显现出来。

  最后点击右上角的绿色启动按钮即可得到如下的界面:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第24张图片
  访问:localhost:8080/public/findAllUsers,如果浏览器出现如下界面,则说明SpringMVC添加成功!
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第25张图片
  同样,查看idea的log窗口,可以看到:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第26张图片

2.5. 整合Spring、SpringMVC小结

2.5.1 理解“整合Spring、Spring MVC”

  在添加SpringMVC过程中,我们已经将Spring和SpringMVC给整合到了一起,在这里简单总结一下,什么时候整合的,什么样子才叫整合成功。

  首先要理解哪部分是Spring,哪部分是SpringMVC。SpringMVC简单的按照字面意思来理解就是Spring M(Model)V(View)C(Controller),而Spring主要用到的就是注入。
  也就是说,Spring和SpringMVC整合好的结果就是:成功的在SpringMVC中调用Spring的注入;换句话说,就是在controller(SpringMVC)中调用注入的service实现的对象(Spring)
  既然讲清楚了,那么就可以非常迅速的定位到代码部分了。在PublicController.java中成功的注入了UserService对象,同时成功使用UserService对象的findAllUsers()方法。

PS:因为尚未配置Mybatis,在此处执行userService.findAllUsers()时并没有报出空指针异常的错误,所以我们认为已经整合成功!

PublicController.java:

@Controller
public class PublicController {

    @Autowired
    private UserService userService;

    @RequestMapping("/public/findAllUsers")
    public String findAllUsers(Model model){
        System.out.println("controller层被调用");
        // 因为还未配置Mybatis,所以这里只是模拟查询查询操作,没有结果也不要担心~
        List<Object>objectList = userService.findAllUsers();
        model.addAttribute("tag", "成功!");
        return "list";
    }
}
2.5.2 如何整合Spring、SpringMVC

  可以看到web.xml中下边这部分的代码,注释中写了,他是默认加载WEB-INF下的applicationContext.xml文件,但是因为我们有较多的配置文件(包括后来的Mybatis配置的文件),于是我们新建了/src/main/resoiurces这个文件,来存放我们的配置文件。因此在设置listener时候,需要设置配置文件的路径。
  而这个监听器的作用就是在服务器启动的时候,去加载Spring的配置文件。加载了applicationContext.xml之后,就可以成功的使用Spring了。
web.xml:

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

  至此,Spring和Spring MVC基础部分就已经配置完成了。

三、Mybatis框架

搭建之前的话

  使用Mybatis的方法主要有两种,第一种是开发者自己写sql语句,第二种是Mybatis官方提供的逆向工程,也就是Mybatis Generator,MBG(Mybatis Generator)是专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件、接口、以及实体类。支持基本的增删改查,以及QBC风格的条件查询。
  但是金无足赤,人无完人,MGB也存在自己的缺点(个人借鉴),即:表连接、 存储过程等这些复杂sql的定义需要我们手工编写。同时,逆向工程方法只能执行一次, 如果再次执行就会继续映射文件, 除非我们把之前生成的全都删除。

搭建之前的代码

  搭建Mybatis工作之前,我们需要建立一个属于这个项目的数据库以及一张用户表。

/*删掉存在的表*/
DROP TABLE IF EXISTS `users`;
/*建表*/
CREATE TABLE `users` (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `USERNAME` varchar(128) DEFAULT NULL,
  `PASSWORD` varchar(128) DEFAULT NULL,
  `TYPE` varchar(128) DEFAULT NULL,
  `AK` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
/*插入数据*/
INSERT INTO `USERS` VALUES (1, 'test', '123456', '2', NULL);

3.1 准备工作

3.1.1 在idea中安装插件

  因为使用的是逆向工程,我们需要idea中的一个插件来支援。Preferences->Plugins中的Marketplace中搜索Free Mybatis plugin,安装好之后应该会重启idea,注意做好代码保存工作。
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第27张图片

3.1.2 引入Maven依赖

  在pom.xml中添加依赖,注意代码中的注释,这个插件必须和pluginManagement同级
pom.xml:



<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.0modelVersion>

  <groupId>com.web.ssm.yygroupId>
  <artifactId>RegistrationSystemartifactId>
  <version>1.0-SNAPSHOTversion>
  <packaging>warpackaging>

  <name>RegistrationSystem Maven Webappname>
  
  <url>http://www.example.comurl>

  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.7maven.compiler.source>
    <maven.compiler.target>1.7maven.compiler.target>
    <spring.version>5.0.2.RELEASEspring.version>
    <slf4j.version>1.6.6slf4j.version>
    <log4j.version>1.2.12log4j.version>
    <mysql.version>5.1.6mysql.version>
    <mybatis.version>3.4.5mybatis.version>
  properties>

  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.11version>
      <scope>testscope>
    dependency>
    <dependency>
      <groupId>org.aspectjgroupId>
      <artifactId>aspectjweaverartifactId>
      <version>1.6.8version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-aopartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-contextartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webmvcartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-testartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-txartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-jdbcartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.12version>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>mysqlgroupId>
      <artifactId>mysql-connector-javaartifactId>
      <version>${mysql.version}version>
    dependency>
    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>servlet-apiartifactId>
      <version>2.5version>
      <scope>providedscope>
    dependency>
    <dependency>
      <groupId>javax.servlet.jspgroupId>
      <artifactId>jsp-apiartifactId>
      <version>2.0version>
      <scope>providedscope>
    dependency>
    <dependency>
      <groupId>jstlgroupId>
      <artifactId>jstlartifactId>
      <version>1.2version>
    dependency> 
    <dependency>
      <groupId>log4jgroupId>
      <artifactId>log4jartifactId>
      <version>${log4j.version}version>
    dependency>
    <dependency>
      <groupId>org.slf4jgroupId>
      <artifactId>slf4j-apiartifactId>
      <version>${slf4j.version}version>
    dependency>
    <dependency>
      <groupId>org.slf4jgroupId>
      <artifactId>slf4j-log4j12artifactId>
      <version>${slf4j.version}version>
    dependency> 
    <dependency>
      <groupId>org.mybatisgroupId>
      <artifactId>mybatisartifactId>
      <version>${mybatis.version}version>
    dependency>
    <dependency>
      <groupId>org.mybatisgroupId>
      <artifactId>mybatis-springartifactId>
      <version>1.3.0version>
    dependency>
    <dependency>
      <groupId>c3p0groupId>
      <artifactId>c3p0artifactId>
      <version>0.9.1.2version>
      <type>jartype>
      <scope>compilescope>
    dependency>
  dependencies>

  <build>
    <finalName>RegistrationSystemfinalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-clean-pluginartifactId>
          <version>3.1.0version>
        plugin>
        
        <plugin>
          <artifactId>maven-resources-pluginartifactId>
          <version>3.0.2version>
        plugin>
        <plugin>
          <artifactId>maven-compiler-pluginartifactId>
          <version>3.8.0version>
        plugin>
        <plugin>
          <artifactId>maven-surefire-pluginartifactId>
          <version>2.22.1version>
        plugin>
        <plugin>
          <artifactId>maven-war-pluginartifactId>
          <version>3.2.2version>
        plugin>
        <plugin>
          <artifactId>maven-install-pluginartifactId>
          <version>2.5.2version>
        plugin>
        <plugin>
          <artifactId>maven-deploy-pluginartifactId>
          <version>2.8.2version>
        plugin>
      plugins>
    pluginManagement>
    
    <plugins>
      <plugin>
        <groupId>org.mybatis.generatorgroupId>
        <artifactId>mybatis-generator-maven-pluginartifactId>
        <version>1.3.2version>
      plugin>
    plugins>
  build>
project>

3.2 配置generatorConfig.xml

  在/src/main/resources下新建generatorConfig.xml。这个文件是为了定义数据源、实体类、Mapper和SQL生成规则。
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第28张图片
generatorConfig.xml:




<generatorConfiguration>

    <properties resource="generator.properties"/>

    <classPathEntry location="/Users/yangyang/IdeaProjects/Twossm/lib/mysql-connector-java-5.1.48-bin.jar" />

    <context id="contex1">
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
            <property name="suppressDate" value="true" /> 
        commentGenerator>

        <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}" />

        <javaTypeResolver>
            
            <property name="forceBigDecimals" value="false" />
        javaTypeResolver>

        <javaModelGenerator targetPackage="${modelPackage}" targetProject="${modelProject}" />
        <sqlMapGenerator targetPackage="${sqlPackage}" targetProject="${sqlProject}" />
        <javaClientGenerator targetPackage="${mapperPackage}" targetProject="${mapperProject}" type="XMLMAPPER"/>

        <table schema="" tableName="${table}" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    context>
generatorConfiguration>

  在/src/main/resources 下新建generator.properties。这个文件是为了存储generatorConfig.xml中的配置信息。注意修改generator.properties中的数据库用户名和密码。

IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第29张图片
generator.properties:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

# domain
modelPackage = com.yy.model
modelProject = src/main/java

sqlPackage = sqlmap
sqlProject = src/main/resources

mapperPackage = com.yy.mapper
mapperProject = src/main/java

table = users

3.3 执行generatorConfig.xml

在右上角的edit configurations
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第30张图片
点击加号,选择添加maven
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第31张图片
在commond line中输入:mybatis-generator:generate -e,点击apply之后,运行这个xml文件。
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第32张图片

log文件里输出如下则表示生成成功:
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第33张图片
在执行xml之后,项目结构如下图所示,多了sqlmap、UserMapper和Users,sqlmap里是对应的映射文件,mapper是接口文件,Users是实体类,这三者都是自动生成的。
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第34张图片

3.4 Spring整合Mybatis

  能看到这里的同学,也是有大毅力者。不错,距离“成功”只有一步之遥了,加油。

  如本小节题,Spring整合Mybatis,那么和Spring整合SpringMVC一样,如果Mybatis的Mapper对象能够成功注入,则说明整合成功了。

3.4.1 配置applicationContext.xml

  添加相关的连接池以及扫描包的配置。注意配置文件中的标签顺序。
applicationContext.xml:


<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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:component-scan base-package="com.yy" >
        
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    context:component-scan>
    
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="typeAliasesPackage" value="com.yy.model" />
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:sqlmap/*.xml"/>
    bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.yy.mapper"/>
    bean>
beans>
3.4.2 测试Mybatis

  首先在UserService里添加findUserById(Integer id)方法
UserService.java:

package com.yy.service;

import com.yy.model.Users;

import java.util.List;

public interface UserService {
    public List<Object> findAllUsers();
    public Users findUserById(Integer id);
}

  然后在实现类中实现相关的方法,同时在该类中添加UserMapper的对象
UserServiceImpl.java:

package com.yy.service.Impl;

import com.yy.mapper.UsersMapper;
import com.yy.model.Users;
import com.yy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UsersMapper usersMapper;

    @Override
    public List<Object> findAllUsers() {
        System.out.println("service层实现被调用");
        Users users = usersMapper.selectByPrimaryKey(1);
        System.out.println(users.getUsername());
        return null;
    }

    @Override
    public Users findUserById(Integer id) {
        System.out.println("service层findUserById被调用");
        Users users = usersMapper.selectByPrimaryKey(id);
        return users;
    }
}

  接着在Controller中添加相关的代码。
PublicController.java:

package com.yy.controller;

import com.yy.model.Users;
import com.yy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
public class PublicController {

    @Autowired
    private UserService userService;

    @RequestMapping("/public/findAllUsers")
    public String findAllUsers(Model model){
        System.out.println("controller层被调用");
        // 因为还未配置Mybatis,所以这里只是模拟查询查询操作,没有结果也不要担心~
        List<Object>usersList = userService.findAllUsers();
        model.addAttribute("tag", "成功!");
        return "list";
    }

    @RequestMapping("/public/findUserById")
    public String findUserById(Model model){
        System.out.println("controller层findUserById被调用");
        Users users = userService.findUserById(1);
        model.addAttribute("username", users.getUsername());
        return "user_info";
    }

}

  最后在pages下添加显示界面。
user_info.jsp:

<%--
  Created by IntelliJ IDEA.
  User: yangyang
  Date: 2019/10/10
  Time: 18:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>User Infotitle>
head>
<body>
<h1>用户名:${username}h1>
body>
html>

  点击运行之后访问localhost:8080/public/findUserById,如果界面显示如下图,则说明成功。
IDEA搭建Spring + SrpingMVC + Mybatis(逆向工程)_第35张图片

写在后面的话

  至此,我们的SSM框架搭建完成,接下来就是要开心的完成业务逻辑部分了,这也就是大家自己的工作了。
  现在网上有各种关于CSDN的言论,无论是吹捧还是贬低,内容都离不开博客这个东西。虽然SSM的教程网上比比皆是,但是我觉得自己写一次,无论是编译器版本还是框架的版本都是在一直更新迭代的,那么教程也不能固步自封,只保留在不流行的编译器和古老的版本之中。
  另外,我认为,如果自己一步一步写一篇博客,这样会有很清晰的思路,同时也会给自己留下很深刻的印象,也算是一种纪念吧。
  这篇博客大体框架是按照之前看过的一篇SSM的教程走下来的,但是与之不同的是我在这里用了Mybatis Generator,所以这也是另一个我觉得需要记录下来的原因。
  最后,关于开源的事情,我是一个忠实的开源粉丝,所以此次项目的源码我会上传到百度网盘,欢迎大家下载学习。还有什么问题咱们评论区见~

链接:https://pan.baidu.com/s/1gg7F9chx6BNA_p1M2h0MiA
密码:zvyd

你可能感兴趣的:(Web开发)