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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

240710_昇思学习打卡-Day22-条件随机场

240710_昇思学习打卡-Day22-条件随机场 在正式开始LSTMCRF序列标注之前&#xff0c;我们先来了解一下条件随机场&#xff0c;以下仅做简单介绍。 CRF全称Conditional Random Field&#xff0c;按照名字来理解&#xff0c;条件随机&#xff0c;随机输入&#xff0c;条件输出。…

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点

在数字技术的浪潮下&#xff0c;3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间&#xff0c;还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性&#xff0c;让艺术不再是单一的视觉享受。在这里&#x…

计算机网络之网络互连

1.什么是网络互连 1.1网络互连的目的 将两个或者两个以上具有独立自治能力的计算机网络连接起来&#xff0c;实现数据流通&#xff0c;扩大资源共享范围&#xff0c;或者容纳更多用户。 网络互连包括&#xff1a; 同构网络、异构网络的互连&#xff0c; 局域网与局域网&…

JMX脚本组成分析

JMX脚本组成分析 前言 在前两集&#xff0c;我们已经完成了项目与环境管理开发的实战。 通过观察E-R图&#xff0c;我们下一步的内容就是要去完成压测模块的内容&#xff0c;那么在完成压测模块的内容之前&#xff0c;我们要计划一下如何压测&#xff0c;以及要从哪个角度切…

今天我们来聊Java IO模型,BIO、NIO、AIO三种常见IO模型

一、写在开头 很久没更新喽&#xff0c;最近build哥一直在忙着工作&#xff0c;忙着写小说&#xff0c;都忘记学习自己的本职了&#xff0c;哈哈&#xff0c;不过现在正式回归&#xff01; 我们继续学习Java的IO相关内容&#xff0c;之前我们了解到&#xff0c;所谓的IO&#…

Study--Oracle-07-ASM自动存储管理(一)

一、ASM实例和数据库实例对应关系 1、ASM是Oracle 10g R2中为了简化Oracle数据库的管理而推出来的一项新功能&#xff0c;这是Oracle自己提供的卷管理器&#xff0c;主要用于替代操作系统所提供的LVM&#xff0c;它不仅支持单实例&#xff0c;同时对RAC的支持也是非常好。ASM可…

thinkphp 生成邀请推广二维码,保存到服务器并接口返回给前端

根据每个人生成自己的二维码图片,接口返回二维码图片地址 生成在服务器的二维码图片 控制器 public function createUserQRcode(){$uid = input(uid);if

Redis实践经验

优雅的Key结构 Key实践约定&#xff1a; 遵循基本格式&#xff1a;[业务名称]:[数据名]:id例&#xff1a;login:user:10长度步超过44字节&#xff08;版本不同&#xff0c;上限不同&#xff09;不包含特殊字符 优点&#xff1a; 可读性强避免key冲突方便管理节省内存&#x…

Java02--基础概念

一、注释 注释是在程序指定位置添加的说明性信息 简单理解&#xff0c;就是对代码的一种解释 1.单行注释 格式: //注释信息 2.多行注释 格式: /*注释信息*/ 3.文档注释 格式: /**注释信息*/ 注释使用的细节: 注释内容不会参与编译和运…

向量数据库:faiss的常用三种数据索引方式(IndexFlatL2,IndexIVFFlat,IndexIVFPQ)的使用和持久化+索引融合的实现及库函数解读

常用的三种索引方式 Faiss 中有常用的三种索引方式&#xff1a;IndexFlatL2、IndexIVFFlat 和 IndexIVFPQ。 1.IndexFlatL2 - 暴力检索L2&#xff1a; 使用欧氏距离&#xff08;L2&#xff09;进行精确检索。适用于较小规模的数据集&#xff0c;采用暴力检索的方式&#xff0…

【可视化大屏系列】Echarts之折线图绘制

本文为个人近期学习总结&#xff0c;若有错误之处&#xff0c;欢迎指出&#xff01; Echarts之折线图绘制 前言1.需求2.实现效果3.大概思路4.代码实现子组件写法父组件写法 前言 在前文页面布局、DataV 的使用、Echarts 的基础使用的基础上&#xff0c;开始绘制大屏中的折线图…

C++——二叉搜索树的实现

1、二叉搜索树的概念 二叉搜索树又叫做二叉排序树&#xff0c;他或者是一棵空树&#xff0c;或者具有以下性质&#xff1a; 若他的左子树不为空&#xff0c;则左子树的所有节点的值都小于根节点的值&#xff0c; 若他的右子树不为空&#xff0c;则右子树的所有节点的值都大于…

论文翻译:Rethinking Interpretability in the Era of Large Language Models

https://arxiv.org/abs/2402.01761 在大型语言模型时代的可解释性再思考 摘要 在过去十年中&#xff0c;随着越来越大的数据集和深度神经网络的兴起&#xff0c;可解释机器学习领域的兴趣迅速增长。同时&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在广泛的任务中…

JavaScript 中 await 永远不会 resolve 的 Promise 会导致内存泄露吗?

前言 在 JavaScript 中&#xff0c;await 关键字用于等待一个 Promise 完成&#xff0c;它只能在异步函数&#xff08;async function&#xff09;内部使用。当 await 一个永远不会 resolve 的 Promise 时&#xff0c;它确实会阻塞异步函数的进一步执行&#xff0c;但不会直接…

数据结构和算法(0-1)----递归

定义​ 递归是一种在程序设计中常用的技术&#xff0c;它允许一个函数调用自身来解决问题。递归通常用于解决那些可以被分解为相似的子问题的问题&#xff0c;这些问题的解决方式具有自相似性。在数据结构和算法中&#xff0c;递归是一种重要的解决问题的方法&#xff0c;尤其是…

从实时监控到风险智能预警:EasyCVR视频AI智能监控技术在工业制造中的应用

随着科技的不断进步和工业制造领域的持续发展&#xff0c;传统的生产管理方式正逐渐转型&#xff0c;迈向更加智能、高效和安全的新阶段。在这个变革过程中&#xff0c;视频智能监控技术凭借其独特的优势&#xff0c;成为工业制造领域的管理新引擎&#xff0c;推动着从“制造”…

前端直连小票打印机,前端静默打印,js静默打印解决方案

最近公司开发了一个vue3收银系统&#xff0c;需要使用小票打印机打印小票&#xff0c;但是又不想结账的时候弹出打印预览&#xff0c;找了很多方案&#xff0c;解决不了js打印弹出的打印预览窗口&#xff01; 没办法&#xff0c;自己写了一个winform版本的静默打印软件&#xf…

我的智能辅助大师-办公小浣熊

一、基本介绍 随着2022年ChatGPT为代表的AI工具对互联网领域进行第一次冲击后&#xff0c;作为一名对编程领域涉足不算特别深的一名程序员&#xff0c;对AI大模型的接触也真的不能算少了&#xff0c;这是时代的必然趋势。在此之前也曾接触过很多的AI工具&#xff0c;他们都能在…

神经网络以及简单的神经网络模型实现

神经网络基本概念&#xff1a; 神经元&#xff08;Neuron&#xff09;&#xff1a; 神经网络的基本单元&#xff0c;接收输入&#xff0c;应用权重并通过激活函数生成输出。 层&#xff08;Layer&#xff09;&#xff1a; 神经网络由多层神经元组成。常见的层包括输入层、隐藏层…

React18+Redux+antd 项目实战 JS

React18Reduxantd 项目实战 js Ant Design插件官网 Axios官网 (可配置请求拦截器和响应拦截器) JavaScript官网 Echarts官网 一、项目前期准备 1.创建新项目 hotel-manager npx create-react-app hotel-manager2.安装依赖 //安装路由 npm i react-router-domnpm i aixos /…