SSM相关

news2024/9/24 19:25:25

文章目录

  • SSM
    • 导坐标
    • 相关类
      • config文件夹下
      • result文件夹下
      • 其他文件夹下
        • 自定义异常类
    • 拦截器相关
    • 分模块开发
      • 可选依赖(不透明)
      • 排除依赖(不需要)
      • 聚合
      • 继承
    • mvn命令

SSM

导坐标

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8080</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>
<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.16</version>
    </dependency>
    <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <version>8.0.31</version>
    </dependency>
    <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.9.0</version>
    </dependency>
  </dependencies>

相关类

config文件夹下

ServletConfig类

package com.demo.config;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

SpringMvcConfig类

package com.demo.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
@ComponentScan("com.demo.controller")
public class SpringMvcConfig {
}

SpringConfig类

package com.demo.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@ComponentScan("com.demo.service")
@EnableTransactionManagement
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {

}

JdbcConfig类

package com.demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;

public class JdbcConfig {

    private String driver = "com.mysql.cj.jdbc.Driver";
    private String url="jdbc:mysql://localhost:3306/mydatabase";
    private String username="root";
    private String password="root";

    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }
}

MybatisConfig类

package com.demo.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import javax.sql.DataSource;

public class MybatisConfig {

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.demo.entry");
        return factoryBean;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.demo.dao");
        return mapperScannerConfigurer;
    }
}

SpringMvcSupport类

package com.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pagpes/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }

	@Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(projectIntercepteor).addPathPatterns("/users","/users/*");//可添加其他路径用“,”隔开
    }
}

result文件夹下

Code类

package com.demo.result;

public class Code {
    public static final Integer SUCCESS=200;
    public static final Integer ERROR=999;
    //其他自定义Code值
}

Result类

package com.demo.result;

public class Result {
    private Integer code;
    private Object data;
    private String msg;
    //其他自定义属性值

    public Result() {}

    public Result(Integer code, Object data, String msg) {
        this.code = code;
        this.data = data;
        this.msg = msg;
    }

    public Result(Integer code, Object data) {
        this.code = code;
        this.data = data;
    }

    public Result(Object data) {
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

其他文件夹下

自定义异常类

BusinessException类

package com.demo.exception;

public class BusinessException extends RuntimeException{
    private Integer code;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public BusinessException(Integer code,String message) {
        super(message);
        this.code = code;
    }

    public BusinessException(Integer code,String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    public BusinessException(Integer code,Throwable cause) {
        super(cause);
        this.code = code;
    }
}

SystemException类

package com.demo.exception;

public class SystemException extends RuntimeException{
    private Integer code;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public SystemException(Integer code,String message) {
        super(message);
        this.code = code;
    }

    public SystemException(Integer code,String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    public SystemException(Integer code,Throwable cause) {
        super(cause);
        this.code = code;
    }
}

异常处理类

package com.demo.controller;

import com.demo.exception.BusinessException;
import com.demo.exception.SystemException;
import com.demo.result.Code;
import com.demo.result.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ProjectExceptionAdvice {

    @ExceptionHandler(Exception.class)
    public Result doException(Exception ex){
        System.out.println("1");
        return new Result(Code.SYSTEM_UNKONW_ERR,null,"其他未定义异常");
    }

    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException ex){
        System.out.println("2");
        return new Result(ex.getCode(),null,ex.getMessage());
    }

    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException ex){
        System.out.println("3");
        return new Result(ex.getCode(),null,ex.getMessage());
    }
}

拦截器相关

在这里插入图片描述

package com.demo.controller.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class ProjectIntercepteor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        //false终止原始操作。
        //true执行原始操作。
        return false;
    }
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

1、多拦截器时,执行顺序根据书写顺序执行。
2、三个拦截器的执行顺序为ABC

prepostafter
返回结果为都为true时A,B,C执行A,B,C执行A,B,C执行
C返回为false时A,B,C执行都不执行A,B执行
B返回为false时A,B执行都不执行A执行
A返回为false时A执行都不执行都不执行

分模块开发

可选依赖(不透明)

在dependency中加入<optional>true</optional>修饰
例:

<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
      <optional>true</optional>
    </dependency>

排除依赖(不需要)

在<dependency></dependency>中加入以下内容,设置要排除的依赖

<exclusions>
        <exclusion>
          <groupId></groupId>
          <artifactId></artifactId>
        </exclusion>
      </exclusions>

例:

<dependency>
      <groupId>com.demo</groupId>
      <artifactId>pro_entry</artifactId>
      <version>1.0-SNAPSHOT</version>
      <exclusions>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

聚合

1.打包方式

  <packaging>pom</packaging>

2.引入模块

<modules>
    <module>../pro_entry</module>
    <module></module>
    <!--  其他模块  -->
  </modules>

继承

1.在子工程中添加父工程的pom信息继承父工程中的jar包

 <parent>
        <version></version>
        <artifactId></artifactId>
        <groupId></groupId>
        <relativePath></relativePath><!-- 父工程路径-->
    </parent>

2.可选依赖父工程中配置的

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId></groupId>
        <artifactId></artifactId>
        <version></version>
      </dependency>
    </dependencies>
  </dependencyManagement>

配置多环境开发

   <profiles>
        <profile>
            <id>env_dep</id>
<!--            设定是否为默认启动环境-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

设置跳过测试

<build>
<!--    设置跳过测试的内容    -->
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
                <configuration>
<!--                   true:跳过测试;false:不跳过测试,可用excludes设置不进测试的内容 -->
                    <skipTests>false</skipTests>
<!--           排除掉不参与测试的内容         -->
                    <excludes>
                        <exclude>**/UserTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
</build>

mvn命令

跳过测试:

mvn 指令 -D skipTests
例:mvn install -D skipTests

多环境开发执行:

mvn 指令 -P 定义的id
例:mvn install -P env_pro

设置资源目录,并能够解析${}

<build>
<!--    设置资源目录,并设置能够解析${}-->
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
 </build>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1981723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【方法】如何给7Z压缩包添加密码?

在日常工作中&#xff0c;我们经常需要将文件或文件夹压缩成7Z压缩文件&#xff0c;这样可以节省空间或方便传输。对于重要而敏感的压缩文件&#xff0c;往往还需要设置密码保护。下面一起来看看如何给7Z压缩包添加密码。 我们可以使用7-ZIP解压缩软件&#xff0c;按以下步骤来…

Linux常用命令------文件管理

1.新建目录 mkdir是创建目录的命令 mkdir text mkdir 创建多个目录 mkdir -p a/b/c2.创建文件夹 touch是创建文件夹的命令 touch 文件名 touch 创建多个文件夹 touch a.txt b.txt c.txt3.删除文件 rm 是删除文件的目录删除一个文件&#xff1a; rm example.txt 强制删除一…

【EI稳定检索】第二届计算机技术与建模国际会议(ICCTM 2024)

第二届计算机技术与建模国际会议 2024 International Conference on Computer Technology and Modeling 【1】会议简介 第二届计算机技术与建模国际会议&#xff08;以下简称“该会议”&#xff09;是一个汇聚了全球科学家、学者、工程师及学生的重要学术盛会。会议旨在展示当前…

易捷OA协同办公软件 ShowPic 任意文件读取漏洞复现

0x01 产品简介 易捷OA协同办公软件是在“让管理更简单”和“实时协同”的理念的指导下&#xff0c;”本着“简约、实时、快捷、省钱”的产品定位&#xff0c;结合数千家客户的管理实践和当前最先进的IT技术开发出来的全新一代协同产品&#xff0c;在云计算、全文检索、手机应用…

打造零碳工厂,引领绿色发展新潮流

随着全球气候变化的加剧&#xff0c;我国政府提出了“双碳”战略&#xff0c;即力争在2030年前实现碳达峰、2060年前实现碳中和。企业作为国家经济的支柱&#xff0c;积极响应国家政策&#xff0c;推进自身可持续发展&#xff0c;是实现“双碳”目标的重要环节。国内多家头部新…

springboot 博客交流平台-计算机毕业设计源码56406

摘要 博客交流平台 作为一种重要的网络平台&#xff0c;为用户提供了展示自我、分享经验和与他人互动的空间。在国内外&#xff0c;研究者们关注博客交流平台 的各个方面&#xff0c;并取得了显著的进展。研究内容主要包括用户体验和界面设计、社交化和互动性、多媒体内容支持、…

EasyCVR视频转码:T3视频平台不支持GB28181协议,应该如何实现与视频联网平台的对接与视频共享呢?

EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力&#xff0c;为各行各业的视频监控需求提供了优秀的解决方案。 T3视频为公网HTTP-FLV或HLS格式的视频流&#xff0c;目前T3平台暂不支持国标GB28181协议&#xff0c;因此也无法直接接…

【练习】使用DevEco Studio编写点赞案例

效果展示 效果说明 如果当前处于未点赞状态&#xff0c;那么点击将点赞数1&#xff0c;并且颜色变为粉色&#xff1b;如果当前已经处于点赞状态&#xff0c;那么点击点赞按钮&#xff0c;点赞数-1&#xff0c;并且颜色恢复为最初的颜色。 知识点 点击交互事件onClick http:…

海博思创HyperBlock II液冷储能系统荣获AS/NZS 3000国际认证

近日&#xff0c;海博思创的HyperBlock II液冷储能系统凭借卓越性能&#xff0c;荣获TV莱茵颁发的AS/NZS 3000认证证书。这标志着海博思创产品成功通过了澳大利亚和新西兰的产品检测认证&#xff0c;成为全球领先的储能产品之一。 AS/NZS 3000是全球领先的电工行业标准之一&…

重装系统之必装神器!错过它们?你的电脑将失去灵魂!

重装系统之必装神器&#xff01;错过它们&#xff1f;你的电脑将失去灵魂&#xff01; 致读者: 点击上方 “雪之梦技术驿站” → 点击右上角“ … ”→ 点选“设为星标★ ” 加上星标&#xff0c;就不会找不到我啦&#xff01; 偷偷溜进文章的小广告&#xff0c;别害羞&#xf…

普华-PowerPMS APPGetUser SQL注入致RCE漏洞复现

0x01 产品简介 PowerPMS是上海普华科技自主研发的移动端工程项目管理产品。支持中英文切换,可与普华PowerOn、PowerPiP系列产品配套使用。产品与工程项目为核心,为项目各参建方提供包括任务管理、文档管理、质量检查、安全检查、施工日志、进度反馈、即时消息等功能在内的服…

词云图大师(WordCloudMaster)上线Web端!

我们非常激动地宣布&#xff0c;词云图大师&#xff08;WordCloudMaster&#xff09;现已正式上线Web端&#xff01;这一全新版本为用户带来了更多的便捷和功能&#xff0c;让创建和分享词云变得更加轻松。无论是企业、教育机构还是个人用户&#xff0c;都可以通过Web端实现快速…

Linux进程 (冯诺依曼体结构 管理 PCB 进程状态 僵尸进程 孤儿进程 运行阻塞挂起状态 进程优先级)

文章目录 一.冯诺依曼体系结构冯诺依曼结构能干什么&#xff1f; 二.操作系统概念结构图(不完整)为什么要有操作系统&#xff1f; 尝试理解操作系统管理结构图(完整)总结&#xff1a; 三.进程进程是什么&#xff1f;PCB为什么要有PCB&#xff1f; Linux中的PCB进程的task_struc…

电销机器人有哪些优势?

首先&#xff0c;电话销售机器人的最大优势在于&#xff0c;它们可以与顾客进行自然对话&#xff0c;这在每个人对机器人的看法上都是一个突破。在每个人的心目中&#xff0c;机器人是不可改变的。冰冷的机械声音会让顾客感到更加厌恶&#xff0c;但事实上并非如此。这种电话售…

Modbus RTU与Modbus TCP协议区别详解

工业自动化领域中&#xff0c;设备之间的数据传输至关重要&#xff0c;而Modbus协议作为一种通信标准&#xff0c;被广泛应用于各类自动化系统。而Modbus协议有两种常见的变体&#xff1a;Modbus RTU和Modbus TCP&#xff0c;下面本文将详细探讨这两种协议的区别。 物理层 Mo…

西安国际数字影像产业园正式落地,开启数字影像产业新篇

随着全球数字经济的蓬勃发展&#xff0c;数字影像产业作为其中的重要组成部分&#xff0c;正吸引着越来越多的企业关注和投入。西安国际数字影像产业园自启动以来&#xff0c;便以独特的魅力正吸引着众多企业争相入驻。作为西安最好的数字产业园&#xff0c;它究竟有何独特魅力…

【电商API接口项目实战分享】项目实战案例一:电商平台零售数据分析

本文以真实案例&#xff0c;带领大家一起学习如何搭建电商零售的用户画像。 “项目介绍” 此次项目数据来自Kaggle&#xff0c;包含了2010年12月1日至2011年12月9日在英国注册的非实体网上零售发生的所有交易。 字段如下: Invoice: 订单编号&#xff0c;每笔交易有6个整数。 …

在IoT中的TCP增强

本文内容节选自一篇系统性文献综述&#xff08;Systematic Literature Review, SLR&#xff09;&#xff0c;标题为“TCP Performance Enhancement in IoT and MANET”&#xff0c;由 Sultana Parween 和 Syed Zeeshan Hussain 撰写&#xff0c;发表在《International Journal …

F4Pan网盘解析获取下载链接的工具系统源码

F4Pan网盘解析获取下载链接的工具系统源码&#xff0c;F4Pan(下称本项目)使用的接口全部来自于官方&#xff0c;无任何破坏接口的行为&#xff0c;本项目所有代码全部开源&#xff0c;仅供学习参考使用&#xff0c;请遵守相关的法律法规&#xff0c;禁止商用&#xff0c;若无视…

【网络安全】本地文件包含及远程文件包含漏洞详解

一、文件包含漏洞概述 1.1 什么是文件包含 开发人员将需要重复调用的函数写入一个文件&#xff0c;对该文件进行包含时产生的操作。这样编写代码能减少冗余&#xff0c;降低代码后期维护难度。 保证网站整体风格统一&#xff1a;导航栏、底部footer栏等&#xff0c;把这些不…