搭建ssm框架

搭建ssm框架+学习Spring,springMVC,MyBatis基础知识

先看一下项目结构:
在这里插入图片描述

  1. 创建一个maven项目
    如图所示创建一个maven项目,注意jdk版本,最好为1.8

在这里插入图片描述

修改下maven设置:
在这里插入图片描述

设置如图所示,maven下载和配置
在这里插入图片描述

否则可能得到我这样的c盘
在这里插入图片描述

更改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>org.example</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>

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

        <!-- 统一管理依赖版本-->
        <spring.version>5.3.1</spring.version>
    </properties>

    <!--打包方式-->
    <packaging>war</packaging>

    <dependencies>
        <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>
        <!--springmvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <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-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Mybatis核心 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!--mybatis和spring的整合包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>
        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.9</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version> 
        </dependency>
        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.2.0</version>
        </dependency>
        <!-- 日志 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.1</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>
</project>

更改后一片红,按那个即可,按完等它加载就ok啦
在这里插入图片描述

  1. 设置项目为web项目

在这里插入图片描述

依次点击,文件->项目设置->模块->web->加号
在这里插入图片描述
如果没有相应路径,点击…进入创建即可
在这里插入图片描述
进入右键即可新建文件夹
在这里插入图片描述
创建好后,点击确定

在这里插入图片描述

加上\web.xml,确定,最后点击应用就可以啦
在这里插入图片描述
最后,配置tomcat
此处编辑配置
在这里插入图片描述
添加tomcat本地

在这里插入图片描述
点击配置,选择本地安装好的tomcat

在这里插入图片描述
在部署中,配置工作
在这里插入图片描述
选择 war exploded,应用
最后我们可以检验一下是否配置成功:
(1)新建一个jsp文件,右键webappp,选择jsp/jspx

在这里插入图片描述
填入名字,选择jsp
在这里插入图片描述
在这里插入图片描述
点击运行

在这里插入图片描述
浏览器中输入这个http://localhost:8080/test.jsp
在这里插入图片描述
这样就代表服务器起起来啦

在这里插入图片描述

乱码看着不舒服,调一下tomcat的配置,打开本地下载好的tomcat安装目录,打开logging.properties

在这里插入图片描述
把所有UTF-8替换成GBK

在这里插入图片描述
重启一下,就没有乱码了
再右键运行
以上一个maven的webapp项目就创建好啦

如果访问不成功,可以考虑三点:
(1)这里路径有没有问题:

在这里插入图片描述
(2)先停止项目,打开cmd,输入netstat -aon|findstr “8080”
在这里插入图片描述
如此就说明端口未被占用
(3)查看tomcat配置,要先停止这个项目的运行,按住win+r,输入startup.bat,如图:

在这里插入图片描述

回车:
在这里插入图片描述
浏览器中输入http://localhost:8080/

在这里插入图片描述
这样说明tomcat配置成功哦

再看一下项目结构:
在这里插入图片描述

  1. 来开始几个配置文件吧
  • jdbc.properties—数据源连接信息文件

在这里插入图片描述
在这里插入图片描述
文件中配置如下数据库连接信息:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xx?useSSL=true&useUncode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
#useSSL=true: 安全连接
#useUncode=true&characterEncoding=UTF-8: 防止出现保存乱码问题
#serverTimezone=Asia/Shanghai: mysql8.0+ 需要增加时区的配置
jdbc.username=root
jdbc.password=123456
  • mybatis-config.xml-mybatis核心配置文件,依然在resources下
    在这里插入图片描述

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration>

    <!--settings:控制mybatis全局行为-->
    <settings>
        <!--设置mybatis输出日志-->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <!--设置别名-->
    <typeAliases>
<!--        配置别名,在写sql文件中的resultType中使用-->
        <typeAlias type="org.example.Main" alias="dept"/>
        <package name="实体类的包名"/>
    </typeAliases>

    <!--设置mapper文件夹的路径,mapper文件夹中,写.xml文件,sql语句,不配置默认mappers创建在resources文件夹中-->
<!--    映射器,告诉mybatis到哪去找.xml文件-->
    <mappers>
        <!--name是包名,包中所有mapper.xml一次都能加载,将包内的映射器接口实现全部注册为映射器-->
        <package name="mappers"/>
    </mappers>
    
</configuration>

  • 配置Spring

spring是一个很大范围的,包括SpringMVC,SpringBoot其实都属于它,而SpringFramework是其他一切分支的基础。
以Ioc(控制反转)和AOP(面向切面编程)为内核
这里的spring应该指的是SpringFramework。

这里也记一下IOC(控制反转)和AOP(面向切面编程)是什么:
IOC(控制反转):以前在代码中对对象的操作转移到了spring框架中,由框架来控制对象的生命周期和对象之间的关系,
降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。
AOP(面向切面编程):能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

(1)spring-dao.xml,Spring整合Mybatis的相关的配置文件和dao层
在这里插入图片描述

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

    <!-- 配置整合mybatis过程 -->
    <!-- 关联刚配置的数据库文件jdbc.properties-->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 2.数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!-- 配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 绑定mybatis文件:mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--设置类型别名所对应的包-->
        <property name="typeAliasesPackage" value="org.example.pojo"></property>
        <!--设置映射文件的路径,只有映射文件的包和mapper接口的包不一致时需要设置-->
        <property name="mapperLocations" value="classpath:mappers/*.xml"></property>
    </bean>

    <!-- 4.配置扫描mapper接口包,动态实现mapper接口,注入到spring容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!-- 给出需要扫描Dao接口包 -->
        <property name="basePackage" value="org.example.mapper"/>
    </bean>
</beans>

(2)配置spring-service.xml,管理service层

创建文件步骤同上

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

    <!-- 扫描service包下所有使用注解的类型 -->
    <context:component-scan base-package="org.example.service" />

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
</beans>

可能会出现无法解析的错误:

在这里插入图片描述
配置文件的上方会出现这个:
在这里插入图片描述
直接点击创建,出现这个,点击+号
在这里插入图片描述
全选即可,点击确定以后应用就ok啦
在这里插入图片描述

(3)配置spring-mvc.xml,主要配置注解扫描 controller、访问静态资源、视图解析器
创建文件步骤同上
配置SpringMvc

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

    <!--扫描控制层,让指定路径下的包注解(即@Controller)生效,统一交给IOC容器管理-->
    <context:component-scan base-package="org.example.controller"/>

    <!--静态资源默认servlet配置-->
    <mvc:default-servlet-handler/>

    <!--视图解析器,作用:prefix+视图名称+suffix 为最终要跳转的页面-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--支持注解驱动  annotation-driven帮助我们自动配置处理器映射器和处理器适配器-->
    <!--解决JSON乱码问题-->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!--拦截器-->
<!--    <mvc:interceptors>-->
<!--        <mvc:interceptor>-->
<!--            <mvc:mapping path="/log/**"/>-->
<!--            <bean class="org.example.interceptor.LoginInterceptor"/>-->
<!--        </mvc:interceptor>-->
<!--    </mvc:interceptors>-->
</beans>

(4)最后Spring配置整合文件,applicationContext.xml 将单独配置的文件引入在一起,形成整的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">

    <import resource="spring-dao.xml"/>
    <import resource="spring-service.xml"/>
    <import resource="spring-mvc.xml"/>

</beans>

好了,配置就到此结束了

  • 尝试写一个接口
    (1)controller层:controller文件夹下,右键->新建->java类;名为:CourseController选择class
package org.example.controller;

import org.example.pojo.Course;
import org.example.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping(value="a")
public class CourseController {
    @Autowired
    private CourseService courseService;
    @GetMapping("/find")
    public List<Course> findcourse(){
        return courseService.FindCourse();
    }
}

(2)这个里面是必须和数据库里字段一一对应的,字段名必须相同,pojo层:右键->新建->java类;名为:Course选择class

package org.example.pojo;

public class Course {
    private String CId;
    private String Cname;
    private String TId;

    public String getCId() {
        return CId;
    }

    public void setCId(String CId) {
        this.CId = CId;
    }

    public String getCname() {
        return Cname;
    }

    public void setCname(String cname) {
        Cname = cname;
    }

    public String getTId() {
        return TId;
    }

    public void setTId(String TId) {
        this.TId = TId;
    }
}

(3)mapper层,这个就是在spring-dao里配置的,扫描接口,现在在里面声明接口和下面的xml里写的是对应的。右键->新建->java类;名为:CourseFund选择接口

package org.example.mapper;

import org.example.pojo.Course;

import java.util.List;

public interface CourseFund {
    List<Course> FindCourse();
}

(4)xml文件写sql,对数据库的操作
resources的mappers,右键-》新建-》文件-》名为:Course.xml

看这句 select id=“FindCourse” resultType=“Course”,id=“FindCourse” 这个就是在mapper层里接口中的方法了resultType=“Course” 这个就是返回的结果,我用的是pojo层里的,因为这个返回的就是那几个字段,如果你想选定字段,也可以在创建类,只写你要返回的字段,这里的resultType就是你创建的类名

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.example.mapper.CourseFund">

    <!--获取list-->
    <select id="FindCourse" resultType="Course">
        select * from course
    </select>

</mapper>

表你可在你数据库里随便创建一个,搞几个数,后面就能显示出来了
(4)service层,此层是用来写处理的,此处可以不要,但是还是写个

在这里插入图片描述

先创建一个接口CourseService,里写方法:

package org.example.service;

import org.example.pojo.Course;

import java.util.List;

public interface CourseService {
    List<Course> FindCourse();
}

再在impl创建java类实现方法CourseServiceImpl,在这里可以进行处理,写逻辑:

package org.example.service.impl;

import org.example.mapper.CourseFund;
import org.example.pojo.Course;
import org.example.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class CourseServiceImpl implements CourseService {
   @Autowired
    private CourseFund courseFund;
    @Override
    public List<Course> FindCourse() {
        return courseFund.FindCourse();
    }
}

最后访问这个接口:
在这里插入图片描述
就可以啦

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值