Spring SSM详解(学习总结)

本文章都不讲基础知识,是从我写一个项目中摘录部分的代码来进行讲解,这里面的知识希望说能帮助到大家,然后也顺便可以给我复习一下

一、创建项目

1.1 maven

Maven是我们使用IDEA写项目导入依赖的时候的最好伙伴,创建项目最重要的工具

1.2 项目创建

1.选择Meavn

2.勾上Create from archetype,选择maven-archetype-webapp,记住不要选成上面那个cocoon-archetype-webapp(我第一次写的时候一直过不去就这个原因)

3.这里配置maven的配置

4.第一次加载可能有点慢,但是要记住上面必须有这几个包,不然就说明你网络不好或者maven没有配置好,网上教配置maven的文章很多,大家自己查阅

二、依赖导入

1.1 此处提供全部依赖,在后面的每个章节里面都会出现让大家认识

  <dependencies>
    <!-- Junit测试 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- Spring基本组件 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.11.RELEASE</version>
    </dependency>

    <!-- SpringMVC基本组件 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.11.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.1.11.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.6</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
      <scope>provided</scope>
    </dependency>

    <!-- Mybatis组件 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.6</version>
    </dependency>

    <!-- MySQL基本组件 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.11.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.27</version>
    </dependency>

    <!-- Spring整合ORM -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>5.3.3</version>
    </dependency>

    <!-- 日志测试 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>

    <!-- 偷懒神器lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.22</version>
    </dependency>

    <!-- fastJSON -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.79</version>
    </dependency>

  </dependencies>

三、文件配置

此处提供整个项目需要的一些基础xml跟properties的配置文件,使用方法跟镜像配置都会在文章后面进行阐述

1.1 web.xml

此处需要修改的仅有<param-value>classpath:xxxxxxx</param-value>,根据实际的springmvc.xml文件名称进行修改

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!-- 配置spring mvc的核心控制器 -->
  <servlet>
    <servlet-name>SpringMVCDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置初始化参数,用于读取SpringMVC的配置文件 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!-- 配置servlet的对象创建的时间点:应用加载时创建。
    如果该元素的值为负数或者没有设置,则容器会当servlet被请求的时候加载。
    如果值为正整数时或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,越先被加载-->
    <load-on-startup>1</load-on-startup>

  </servlet>
  <!-- 所有的请求都会执行对应的这个方法 -->
  <servlet-mapping>
    <servlet-name>SpringMVCDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

1.2 springmvc.xml

mvc的包同时包含了spring IOC的sring.xml的作用,也可以直接扫描包,然后根据注释添加成bean

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

    <!-- 配置创建 spring 容器要扫描的包 -->
    <context:component-scan base-package="com.company"></context:component-scan>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

1.3 mybatis-config.xml

<?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>
    <!-- mybatis环境 -->
    <environments default="mysql">
        <environment id="mysql">
            <!-- 配置事务的类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/数据库名称?userSSL=false&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="帐号"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    <!-- mybatis映射配置位置 -->
    <!-- 按模块映射不同的配置文件,让配置文件看起来更简洁 -->
    <mappers>
        <mapper resource="映射配置文件全路径"></mapper>
    </mappers>
</configuration>

1.4 映射.xml

<?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="dao接口全路径">

</mapper>

1.5 log4j.properties

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=D://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

1.6 包配置

创建完整个项目的包如下,后续有补充会提到

四、Spring IOC介绍

偏向实际开发需要的一些东西,其他知识请搜索专门的博主应该有进行介绍,我这里直接通过注释,自动扫描包来进行容器的配置

1.1 依赖导入

<!-- Spring IOC容器 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.6</version>
</dependency>

1.2 Sring IOC作用介绍

主要是将所有的对象储存在统一的一个容器中进行管理,可以通过容器对一个对象进行获取跟修改,大大地将程序中地对象之间联系起来,增加了耦合性跟可维护性

1.3 注释

        1.3.1 创建对象的注解

        1. @Compoent

        2. @Service

        3. @Controller

        4. @Repository

  • 这四个注解是一样的作用,使我们的架构更加清晰

  • 一般我们的实体层不用注入对象

  • @component用于控制层(controller)、持久层(dao)、业务逻辑层(service)之外的类

        1.3.2 注入对象的注解

        1. @Autowired

         作用:按照类型自动注入对应对象的全部方法跟属性

@Repository
public class ClassDao1 extends ClassDao{}
@Repository
public class ClassDao2 extends ClassDao{}

@Autowired
private ClassDao classDao;

public void queryAll() {
    dao.queryAll();
    System.out.println(classDao);
}

        2. @Qualifier

        作用:在自动注入的前提下,根据不同的bean名称来指定哪一个对象的自动注入

@Autowired
@Qualifier("classDao1")
private ClassDao classDao;

public void queryAll() {
    dao.queryAll();
    System.out.println(classDao);
}

        3. @Resource

        直接根据bean的id进行注入

@Resource(name = "studentDao1")
StudentDao dao;

        4. @Value

        作用:直接对对象进行赋值

@Value("王五")
private String name;

        5. @Scope

        作用:指定Bean的作用范围(单例,多例,……)

@Scope("prototype")

1.3.3 其他注解

1. @Configuration

作用:用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用

@Configuration // 指定当前类是一个配置类
@ComponentScan("com.company") // 指定要扫描的包
public class SpringConfig {}
​
ApplicationContext ctx =new AnnotationConfigApplicationContext(有@Configuration注解的类.class)

2. @ComponentScan

作用:用于指定spring在初始化容器要扫描的包,作用和spring的xml配置文件中<context:component-scan base-package="包名">一样

属性:basePackages:用于指定要扫描的包,和该注解的value属性一样

3. @Import

作用:用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解,当然,写上也可以

属性:value,用于指定其他配置类的字节码

// 可以写多个 使用,隔开
@Import(SpringConfig.class,xxx)
public class SpringConfig2 {}

4. @PropertySource

作用:用于加载.properties文件中的配置。例如我们配置数据源时,可以把连续数据库信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置

属性:value,用于指定properties文件位置,如果是在类路径下,需要写上classpath

@PropertySource("classpath:配置文件.properties")

获取配置中的值

5. @Value("$(配置文件中的Key)")

这个在后面的springboot中配置对应的yml文件有所作用

@Component
@PropertySource("classpath:druid.properties")
public class JDBCUtil {
    @Value("${driverClassName}")
    private String driverClassName;
    @Value("${username}")
    private String username;
    @Value("${password}")
    private String password;
​
    public void getConnection(){
        System.out.println(driverClassName);
        System.out.println(username);
        System.out.println(password);
    }
}
​
JDBCUtil jdbcUtil = ctx.getBean(JDBCUtil.class);
jdbcUtil.getConnection();

6. @Bean

作用:只能写在方法上,表明此方法创建一个对象,并且放入spring容器中

属性:name,给当前@Bean注解方法创建的对象指定一个名称(即Bean的id)。不写时,默认就是当前方法的名称。

五、Spring MVC介绍

1.1 依赖导入

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.1.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
</dependency>

1.2 Spring MVC作用介绍

代替JavaWeb中的servlet完成对应的任务,详细的去搜索对应的JavaWeb文章查找

1.3 注释

1.3.1 @RequestMapping

写在类的上面,声明一级路径,并且让tomcat进行对应的web操作

1.3.2 GET请求

@GetMapping("/路径“)  Or  @RequestMapping(value = "/路径" , method = RequestMethod.GET )

@RequestMapping(value = "/update", method = RequestMethod.GET)
public void update() {
    System.out.println(getClass().getName() + " update");
}

@GetMapping("/delete")

1.3.3 POST请求,PUT请求,Delete请求

全部同上GET请求的用法,根据实际项目要求的对应接口,来进行不同的业务操作。

实际上不同的请求一般用于不同的业务需求,大致如下:

  • GET: 获取指定资源的信息。
  • POST: 向指定资源提交要被处理的数据或更新数据。
  • PUT: 从客户端向服务器传送的数据取代指定文档的内容。
  • DELETE: 删除指定资源。

六、Mybatis介绍

这里只有简单的介绍,主要是展示代码的使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值