SSM框架整合详细过程

整合思路

由于SpringMVC是Spring框架中的一个模块,SSM框架的整合只涉及Spring与MyBatis的整合及Spring MVC与MyBatis的整合。如下图所示
在这里插入图片描述

整合环境

SSM框架整合需要使用Spring、SpringMVC、Mybaits依赖的jar包。项目创建后,需要将这些jar导入。如果是maven工程,只需在pom文件中添加以下依赖包,具体内容如下:

 <!--spring核心依赖包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.2.5.RELEASE</version>
      <scope>test</scope>
    </dependency>

    <!--spring AOP-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjtools</artifactId>
      <version>1.8.9</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.5.4</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.5</version>
      <scope>runtime</scope>
    </dependency>

    <!--spring 的事物管理-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>

    <!--第三方数据源依赖-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>2.5.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-dbcp2</artifactId>
      <version>2.5.0</version>
    </dependency>

    <!-- mybatis与spring整合的jar包-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>

    <!--spring管理的 jdbc ,以及事务相关的-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.17.RELEASE</version>
    </dependency>

    <!--mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>

    <!--mySQL数据库连接依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>

    <!--springmvc依赖包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <!--json与java对象转换依赖包-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.8</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.8</version>
    </dependency>

    <!--文件上传与下载依赖包-->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.8.0</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>

项目结构

在这里插入图片描述

配置文件

SSM配置文件包括数据库配置、Spring配置、mybaits配置、spring-mvc配置、日志配置及web.xml配置等。
数据库连接配置(db.properties):

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://xx.xx.xxx.xxx:3306/sl?serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=xxxxxx
jdbc.maxTotal=30
jdbc.maxIdle=10
jdbc.initialSize=5

日志配置(log4j.properties):

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.bjwl=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

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"
       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-4.3.xsd">
    <!-- 开启扫描 -->
    <context:annotation-config/>
    <!--读取db.properties -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 配置数据源 -->
    <bean id="dataSource"
          class="org.apache.commons.dbcp2.BasicDataSource">
        <!--数据库驱动 -->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <!--连接数据库的url -->
        <property name="url" value="${jdbc.url}"/>
        <!--连接数据库的用户名 -->
        <property name="username" value="${jdbc.username}"/>
        <!--连接数据库的密码 -->
        <property name="password" value="${jdbc.password}"/>
        <!--最大连接数 -->
        <property name="maxTotal" value="${jdbc.maxTotal}"/>
        <!--最大空闲连接  -->
        <property name="maxIdle" value="${jdbc.maxIdle}"/>
        <!--初始化连接数  -->
        <property name="initialSize" value="${jdbc.initialSize}"/>
    </bean>

    <!-- 事务管理器,依赖于数据源 -->
    <bean id="transactionManager" class=
            "org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置MyBatis工厂 -->
    <bean id="sqlSessionFactory"
          class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源 -->
        <property name="dataSource" ref="dataSource"/>
        <!--指定核心配置文件位置 -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!-- Mapper代理开发(基于MapperScannerConfigurer) -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.bjwl.dao"/>
    </bean>
    
    <!--自动扫描-->
    <context:component-scan base-package="com.bjwl.**"/>
</beans>

springmvc.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"
       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-4.3.xsd
	   http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-4.3.xsd
  http://www.springframework.org/schema/mvc
  http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 指定需要扫描的包 -->
    <context:component-scan base-package="com.bjwl.controller" />
    <!-- 配置注解驱动 -->
    <mvc:annotation-driven />
    <!--配置静态资源的访问映射,此配置中的文件,将不被前端控制器拦截 -->
    <mvc:resources location="/js/" mapping="/js/**" />
    <!-- 定义视图解析器 -->
    <bean id="viewResolver" class=
            "org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 设置前缀 -->
        <property name="prefix" value="/" />
        <!-- 设置后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 配置文件上传解析器 MultipartResolver -->
    <bean id="multipartResolver" class=
            "org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置请求编码格式-->
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
</beans>

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>
    <!--配置Mapper的位置 -->
    <mappers>
        <mapper resource="mapper/UserDao.xml"/>
    </mappers>
</configuration>

测试代码

pojo目录下实体类代码

public class UserEntity {
    private Integer id;
    private String username;
    private String address;
    //省略get set方法
}

dao目录下代码

@Mapper
public interface UserDao {
    List<UserEntity> getAll();
    UserEntity findUserById(Integer id);
    int addUser(UserEntity user);
    int updateData(UserEntity user);
    int deleteData(Integer id);
}

不要忘了@Mapper或@Repository注解符
services目录下,服务接口与实现

public interface UserService  {
    List<UserEntity> getAll();
    UserEntity getUserById(int id);
    int save(UserEntity userEntity);
    int remove(int id);
}

@Service("userService")
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public List<UserEntity> getAll() {
        return userDao.getAll();
    }

    @Override
    public UserEntity getUserById(int id) {
        return userDao.findUserById(id);
    }

    @Override
    public int save(UserEntity userEntity) {
        int num=0;
        if (userEntity.getId() == null) {
            num =  userDao.addUser(userEntity);
        } else {
            num = userDao.updateData(userEntity);
        }
        return num;
    }
    @Override
    public int remove(int id) {
        return userDao.deleteData(id);
    }
}

不要忘了在具体的实现类上加注解符@Service

controller目录下写控制类

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public List<UserEntity> getAll(){
        return userService.getAll();
    }

    @RequestMapping("/getUserById")
    public UserEntity getUserById(Integer id){
        return userService.getUserById(id);
    }

    @RequestMapping("/save")
    public Map saveData(@RequestBody UserEntity userEntity ){
        Map<String,String> map = new HashMap<>();
        int num= userService.save(userEntity);
        System.out.println("保存数据返回参数!");
        if(num>-1) {
            map.put("msg", "保存成功!");
        }else{
            map.put("msg", "保存失败!");
        }
        return map;
    }

    @RequestMapping("/delete")
    public Map delData(Integer id){
        Map<String,String> map = new HashMap<>();
        int num= userService.remove(id);

        if(num>-1) {
            map.put("msg", "删除成功!");
        }else{
            map.put("msg", "删除失败!");
        }
        return map;
    }
}

全部返回json数据,注意注解赋@RestController、@RequestMapping、@RequestBody的使用

使用postman进行测试:
在这里插入图片描述

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值