JAVA Spring MVC+Mybatis Spring MVC的工作流程*,多表连查

目录

注解总结

将传送到客户端的数据转成json数据

[**描述一下Spring MVC的工作流程**](#描述一下Spring MVC的工作流程)


1。属性赋值

BeanUtils.copyProperties(addUserDTO,user);

添加依赖:

spring web、mybatis framework、mysql driver

@Controller和@ResponseBody优化

直接改成@RestController,每个方法上,就不需要加@ResponseBody

@RestController是组合注解,就等于:@Controller + @ResponseBody

@RequestMapping作用在类上,(value = "/v1/users/"),表示公共路径

添加该注解后,所有的接口上,不用再添加@Mapper注解了

防止自动装配@Autowired UserMapper userMapper;报错,可以添加value=false,表示不管是否装配成功,都不会不错

注解总结

@Controller 注解

标注一个类;

表示该类是一个控制器,负责处理用户的请求,并将处理结果生成响应返回给客户端。

@RequestMapping 注解

请求注解;

添加在控制器类或控制器方法上;

将HTTP请求映射到控制器中的方法,指定处理请求的路径

控制器类上:为整个控制器指定一个基础路径

控制器方法上:指定相对于基础路径的具体路径

@ResponseBody 注解

响应注解;

添加在控制器方法上;

可以使控制器方法通过返回值的方式将响应返回给客户端。

@RestController 注解

作用于类上;

作用是将类中的方法返回值直接作为HTTP响应的内容;

在控制器类中加入该注解后,无需在每个方法上添加 @ResponseBody 注解;

可以让Spring框架自动将方法的返回值序列化并填充到HTTP响应中,实现Web服务端点的快速

开发。

@MapperScan 注解说明

添加在 Spring配置类 上;

用于告诉 Spring 扫描 MyBatis Mapper 接口并创建对应的 Mapper 实现;

可以指定扫描 MyBatis 映射器接口的包名。

将传送到客户端的数据转成json数据,使用@ResponseBody或@RestController

**描述一下Spring MVC的工作流程**

  1. 客户端发送请求至前端控制器DispatcherServlet

  2. DispatcherServlet收到请求后,调用处理器映射器HandlerMapping

  3. HandlerMapping根据请求URL找到具体的Controller。

  4. Controller处理请求,并返回ModelAndView,其中的View只是视图名,并不指向具体的视图

组件

  1. DispatcherServlet通过ViewReslover(视图解析器)确定负责显示数据的具体View

  2. DispatcherServlet对View进行渲染视图(即将Model填充至视图组件中),并将完整的视图

响应到客户端

指定post请求方法:

复制代码
    @RequestMapping(value = "insert",method = RequestMethod.POST)
//    @ResponseBody
    public String addUser(AddUserDTO addUserDTO){

        User user=new User();
        BeanUtils.copyProperties(addUserDTO,user);
        user.setCreated(new Date());

        userMapper.insertUser(user);
        return "添加成功";
    }

或者:@PostMapping(value = "insert"),是一样的效果,只接受post请求

@PathVariable表示路径参数

复制代码
uid 
@GetMapping("/v1/users/{uid}")
public void xxx(@PathVarable Integer uid){

}

1、MyBatisConfig

//@Configuration :设置自动扫描 标识此类为配置类,工程启动时,会自动加载此类 //@MapperScan: 1、自动扫描注解,一旦添加该注解,会为指定包路径及子孙中所有接口添加@Mapper注解 // 2、添加该注解后,所有的接口上,不用再添加@Mapper注解了

复制代码
package cn.tedu._05mvcboot02.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

//@Configuration :设置自动扫描 标识此类为配置类,工程启动时,会自动加载此类
//@MapperScan: 1、自动扫描注解,一旦添加该注解,会为指定包路径及子孙中所有接口添加@Mapper注解
//             2、添加该注解后,所有的接口上,不用再添加@Mapper注解了
@Configuration
@MapperScan(value = "cn.tedu._05mvcboot02")
public class MyBatisConfig {
}

UserController

复制代码
package cn.tedu._05mvcboot02.controller;

import cn.tedu._05mvcboot02.mapper.UserMapper;
import cn.tedu._05mvcboot02.pojo.dto.AddUserDTO;
import cn.tedu._05mvcboot02.pojo.entity.User;
import cn.tedu._05mvcboot02.pojo.vo.UserListVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

//@Controller
@RestController
@RequestMapping(value = "/v1/users/")
public class UserController {

    @Autowired UserMapper userMapper;

    @RequestMapping(value = "insert")
//    @ResponseBody
    public String addUser(AddUserDTO addUserDTO){

        User user=new User();
        BeanUtils.copyProperties(addUserDTO,user);
        user.setCreated(new Date());

        userMapper.insertUser(user);
        return "添加成功";
    }

    @RequestMapping(value = "userList")
//    @ResponseBody
    public List<UserListVO> getUserList(){
        return userMapper.getUserList();
    }

    @RequestMapping(value = "deleteUser")
//    @ResponseBody
    public String deleteUserById(Integer id){

        return "删除成功"+userMapper.deleteUserById(id);
    }

    @RequestMapping(value = "update")
//    @ResponseBody
    public String updateUser(User user){


        return "更新成功:"+userMapper.updateUser(user);
    }

}

UserMapper

复制代码
package cn.tedu._05mvcboot02.mapper;

import cn.tedu._05mvcboot02.pojo.entity.User;
import cn.tedu._05mvcboot02.pojo.vo.UserListVO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Controller;

import java.util.List;

@Mapper
public interface UserMapper {

    int insertUser(User user);

    List<UserListVO> getUserList();

    int deleteUserById(Integer id);

    int updateUser(User user);

}

UserMapper.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="cn.tedu._05mvcboot02.mapper.UserMapper">

    <insert id="insertUser">
        INSERT INTO mvcdb.user(username, password, nickname, created)
        VALUES (#{username}, #{password}, #{nickname}, #{created})
    </insert>

    <select id="getUserList" resultType="cn.tedu._05mvcboot02.pojo.vo.UserListVO">
        SELECT username, password
        FROM mvcdb.user
    </select>

    <delete id="deleteUserById">
        DELETE
        FROM mvcdb.user
        WHERE id = #{id}
    </delete>

    <update id="updateUser" >
        UPDATE mvcdb.user
        <set>
            <if test="username!=null">username=#{username}</if>,
            <if test="password!=null">password=#{password}</if>,
            <if test="nickname!=null">nickname=#{nickname}</if>,
            <if test="created!=null">created=#{created}</if>
        </set>
        WHERE id=#{id}
    </update>



</mapper>





<?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="cn.tedu._05weibo.mapper.WeiboMapper">

    <insert id="insert">
        INSERT INTO blog.weibo(content, created, user_id)
        VALUES (#{content}, #{created}, #{userId})
    </insert>

获取微博
    <select id="selectIndex" resultType="cn.tedu._05weibo.pojo.vo.WeiboIndexVO">
        SELECT w.id,
               w.content,
               u.nickname
        FROM blog.user u
                 JOIN blog.weibo w on u.id = w.user_id
    </select>


根据id获取详情
 <select id="selectById" resultType="cn.tedu._05weibo.pojo.vo.WeiboIndexVO">
        SELECT w.id,
               w.content,
               w.created,
               u.nickname
        FROM blog.user u
                 JOIN blog.weibo w on u.id = w.user_id

        WHERE w.id=#{id}
</mapper>

application.properties

java 复制代码
server.port=8080

#???????
spring.datasource.url=jdbc:mysql://localhost:3306/mvcdb?characterEncodeing=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123zhang
#xml????
mybatis.mapper-locations=classpath:mappers/*.xml
相关推荐
青云交3 小时前
Java 大视界 -- 基于 Java 的大数据机器学习模型在图像识别中的迁移学习与模型优化
java·大数据·迁移学习·图像识别·模型优化·deeplearning4j·机器学习模型
2501_909800814 小时前
Java 集合框架之 Set 接口
java·set接口
断剑zou天涯4 小时前
【算法笔记】暴力递归尝试
java·笔记·算法
Nobody_Cares5 小时前
JWT令牌
java
沐浴露z5 小时前
Kafka入门:基础架构讲解,安装与使用
java·分布式·kafka
神秘的土鸡5 小时前
从数据仓库到数据中台再到数据飞轮:我的数据技术成长之路
java·服务器·aigc·数据库架构·1024程序员节
vir025 小时前
P1928 外星密码(dfs)
java·数据结构·算法·深度优先·1024程序员节
摇滚侠5 小时前
全面掌握PostgreSQL关系型数据库,备份和恢复,笔记46和笔记47
java·数据库·笔记·postgresql·1024程序员节
eguid_17 小时前
【开源项目分享】JNSM1.2.0,支持批量管理的jar包安装成Windows服务可视化工具,基于Java实现的支持批量管理已经安装服务的可视化工具
java·开源·jar·1024程序员节·windows服务·jar包安装成服务·exe安装成服务
杯莫停丶7 小时前
设计模式之:享元模式
java·设计模式·享元模式