Bootstrap

SSM整合--笔记总结

1.概述

ssm(springmvc spring mybatis)这三个框架的整合。 spring和springmvc他们隶属于一家公司,他们无需整合。 spring和mybatis框架的整合。 spring把mybatis中的配置内容放到自己的配置文件中。因为我们可以让tomcat加载spring配置文件。

思考:mybatis配置文件中究竟有哪些?

<1>数据源

<2>引入映射文件

<3>别名

<4>插件

<5>引入属性文件


spring就是把上面12345放入spring配置文件中。

2.步骤

2.1创建一个Maven的web工程

2.2引入所有依赖

<properties>

<spring.version>5.2.10.RELEASE</spring.version>

<lombok.version>1.18.24</lombok.version>

</properties>

<dependencies>

<!--spring和mybatis整合的jar-->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>2.0.7</version>

</dependency>

<!--spring-jdbc-->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${spring.version}</version>

</dependency>

<!--spring和springmvc的核心依赖-->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${spring.version}</version>

</dependency>

<!--lombok-->

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>${lombok.version}</version>

</dependency>

<!--mysql-->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>8.0.28</version>

</dependency>

<!--servlet-->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>3.1.0</version>

</dependency>

<!--druid数据源-->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.2.8</version>

</dependency>

<!--mybatis-->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.5.10</version>

</dependency>

<!--junit单元测试-->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.13.2</version>

<scope>test</scope>

</dependency>

<!--jackson转化json-->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.13.3</version>

</dependency>

<!--pagehelper 分页-->

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper</artifactId>

<version>6.1.0</version>

</dependency>

</dependencies>

2.3spring的配置文件

1.springmvc的配置

①包扫描

②开启注解

③放行静态资源

④视图解析器

2.spring的配置

①加载数据库的属性文件

②Druid数据源

3.mybtais的配置

封装一个SqlSessionFactoryBean类

表示mapper映射文件的路径

指定数据源

为实体类起别名

4.为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"
       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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--1.springmvc的配置-->
   <!--包扫描-->
    <context:component-scan base-package="com.wjy"/>
   <!--开启注解-->
    <mvc:annotation-driven/>
    <!--放行静态资源-->
    <mvc:default-servlet-handler/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
<!--2.spring的配置-->
    <!--加载数据库的属性文件-->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--Druid数据源-->
    <bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClass}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
<!--3.加载mybtais配置  封装一个类SqlSessionFactoryBean-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--表示mapper映射文件的路径-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    <!--指定数据源-->
        <property name="dataSource" ref="ds"/>
    <!--为实体类起别名-->
        <property name="typeAliasesPackage" value="com.wjy.entity"/>
    </bean>
<!--4.为mybatis的dao接口生成代理实现类-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.wjy.dao"/>
    </bean>
</beans>

2.4web.xml加载spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
<!--过滤器-->
    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<!--    -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <!--tomcat启动时加载-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2.5生成实体类和dao接口以及映射文件

利用快速创建的方式

2.6EmpService业务层接口和实现类

package com.wjy.service;

import com.wjy.entity.Emp;

public interface EmpService {
    /**
     * 业务层接口
     * @param id
     * @return 根据id查询员工信息
     */
    public Emp getById(Integer id);

    /**
     * 根据id删除员工信息
     * @param id
     * @return
     */
    public Integer deleteById(Integer id);

    /**
     * 添加员工信息
     * @param emp
     * @return
     */
    public Integer add(Emp emp);

    /**
     * 根据id修改
     * @param emp
     * @return
     */
    public Integer update(Emp emp);
}
@Service//交给容器解决EmpServiceImp对象
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;
    public Emp getById(Integer id) {
        Emp emp = empMapper.selectByPrimaryKey(id);
        return emp;
    }

    public Integer deleteById(Integer id) {
        int i = empMapper.deleteByPrimaryKey(id);
        return i;
    }

    public Integer add(Emp emp) {
        int i = empMapper.insert(emp);
        return i;
    }

    public Integer update(Emp emp) {
        int i = empMapper.updateByPrimaryKey(emp);
        return i;
    }
}

2.7控制层controller

调用service业务层

@RestController//作用:Controller+ResponseBody--自动转换为json类型
@RequestMapping("/emp")
public class EmpController {
    @Autowired//按照类型匹配,找不到按照名字匹配
    private EmpService empService;

    /**
     * 根据id查询员工信息
     * @param id
     * @return
     */
    @GetMapping("byId")//API接口(功能接口)
    public Emp byId(Integer id){
        Emp emp = empService.getById(id);
        return emp;
    }

    @DeleteMapping("deleteById")
    public Integer deleteById(Integer id){
        Integer row = empService.deleteById(id);
        return row;
    }
    @PostMapping("add")
    public Integer insert(@RequestBody Emp emp){
        Integer add = empService.add(emp);
        return add;
    }
    @PutMapping("update")
    public Integer update(@RequestBody Emp emp){
        Integer update = empService.update(emp);
        return update;
    }
}

2.8启动tomcat并测试

浏览器只能测试get请求的接口

测试工具---Postman---apifox--apipost等

查询(get请求)

删除(delete请求)

增加(post请求)、修改(put请求),都是json传输

3.返回统一的json格式数据

controller层接口中他们的返回类型各式各样的,未来前后端交互时,要求接口返回的类型必须统一。

{

code:"状态码";--前端可以用按照你的状态码判断操作成功和失败

msg:"消息";--前端根据后端返回的消息弹出不同的内容

data:"数据";--前端可以拿出数据并进行展示

}

@RestController//作用:Controller+ResponseBody--自动转换为json类型
@RequestMapping("/emp")
public class EmpController {
    @Autowired//按照类型匹配,找不到按照名字匹配
    private EmpService empService;
   
    @GetMapping("byId")//API接口(功能接口)
    public R byId(Integer id){
        Emp emp = empService.getById(id);
        return new R(200,"查询员工信息成功",emp);
    }

    @DeleteMapping("deleteById")
    public R deleteById(Integer id){
        Integer row = empService.deleteById(id);
        if (row>0){
            return new R(200,"删除成功",null);
        }
        return new R(500,"删除失败",null);
    }
    @PostMapping("add")
    public R insert(@RequestBody Emp emp){
        Integer add = empService.add(emp);
        if (add >0) {
            return new R(200,"添加员工成功",null);
        }
        return new R(200,"添加员工失败",null);
    }
    @PutMapping("update")
    public R update(@RequestBody Emp emp){
        Integer update = empService.update(emp);
        if (update >0) {
            return new R(200,"修改成功",null);
        }
        return new R(200,"修改成功",null);
    }
}

4.设置一个统一页面跳转的controller层

5.前端搜索框

 <%--搜索表单的开始--%>
    <el-form :inline="true" :model="empSearchForm" class="demo-form-inline">
        <el-form-item label="姓名">
            <el-input v-model="empSearchForm.name" placeholder="员工名称"></el-input>
        </el-form-item>
        <el-form-item label="入职时间">
            <el-date-picker
                    v-model="empSearchForm.daterange"
                    type="daterange"
                    range-separator="至"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期">
            </el-date-picker>
        </el-form-item>
        <el-form-item label="所在部门">
            <el-select v-model="empSearchForm.deptId" placeholder="所在部门">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
            </el-select>
        </el-form-item>
        <el-form-item>
            <el-button type="primary" >查询</el-button>
        </el-form-item>
    </el-form>
    <%--搜索表单的结束--%>

5.1搜索框下拉所有的部门信息

DeptController

@RestController
@RequestMapping("/dept")
public class DeptController {

    @Autowired
    private DeptService deptService;
    @GetMapping("/list")
    public R list(){
      List<Dept> depts = deptService.selectAll();
      return new R(200,"查询部门成功",depts);
    }
}

DeptServiceImpl

@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;
    public List<Dept> selectAll() {
       return deptMapper.selectAll();
    }
}

DeptMapper

;