SpringBoot+Maven笔记

文章目录

  • 1、启动类
  • 2、mapper 接口
  • 3、控制类
  • 4、补充:返回数据时的封装
  • 5、补充
    • a、mybatisplus

1、启动类

在启动类上加入@MapperScan扫描自己所写的mapper接口

package com.example.bilili_springboot_study;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.bilili_springboot_study.mapper")
public class BililiSpringBootStudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(BililiSpringBootStudyApplication.class, args);
    }

}

2、mapper 接口


注意加上@Mapper注解

package com.example.bilili_springboot_study.mapper;

import com.example.bilili_springboot_study.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM user")
    public List<User> selectAll();
}

如果接口中的sql语句比较麻烦,也可在resources目录下,新建mapper/UserMapper.xml文件,通过该文件控制sql语句例如:

<mapper namespace="com.whd.system.mapper.SysUserMapper"> 对应所绑定的接口的位置

<?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="com.whd.system.mapper.SysUserMapper">
    <select id="getUserById" resultType="com.example.bilili_springboot_study.entity.User">
        select *
        from user
        where id = #{id}

    </select>	

</mapper>

  在该文件中,select语句要加上返回值的类型,使用resultType=" " 进行设置,他指定了返回的结果类型为什么,id为接口中的方法名

   insert update 一般都是int ,因为返回的是影响的结果数

   在接口的方法中,如果要进行传参,在sql中使用 #{ } 来进行引用,注意变量和形参一样


完整事例:
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="com.example.bilili_springboot_study.mapper.UserMapper">
<select id="getUserById" resultType="com.example.bilili_springboot_study.entity.User">
    select * from user where id = #{id}

</select>

</mapper>

mapper 接口
UserMapper.java

package com.example.bilili_springboot_study.mapper;

import com.example.bilili_springboot_study.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM user")
    public List<User> selectAll();

    User getUserById(int id);
}

控制器
UserController.java

package com.example.bilili_springboot_study.controller;

import com.example.bilili_springboot_study.entity.User;
import com.example.bilili_springboot_study.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

    @GetMapping("/select/userAll")
    public List<User> getAllUser() {
        return userMapper.selectAll();
    }

    @GetMapping("/find/user/{id}")
    public User findUserById(@PathVariable int id) {
        return userMapper.getUserById(id);
    }

}


3、控制类

注意要引入所写的接口

 @Autowired
    private UserMapper userMapper;

  在使用接口查询数据库中的信息后,直接return即可返回json格式的数据,也可以将查询到的数据在此进行处理然后再return给前端

package com.example.bilili_springboot_study.controller;

import com.example.bilili_springboot_study.entity.User;
import com.example.bilili_springboot_study.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;


    @GetMapping("/select/userAll")
    public List<User> getAllUser() {
        return userMapper.selectAll();
    }

<--   ---------   以上方法通过接口实现  -->

    @GetMapping("/user/{id}")
    public String getUserById(@PathVariable int id) {
        System.out.println(id);
        return " 根据用户id获取用户信息";
    }

    @PostMapping("/user")
    public String saveUser() {
        return "添加用户信息";
    }

    @PutMapping("/user")
    public String updateUser() {
        return "更新用户信息";
    }

    @DeleteMapping("/user/{id}")
    public String deleteUser(@PathVariable int id) {
        System.out.println(id);
        return "根据用户id删除用户";
    }

}

4、补充:返回数据时的封装

  创建有着泛型的类,和一个枚举类型(设置状态码),以后在返回数据的时候,不仅仅是直接返回接口返回的数据,而是通过AxiosResult<T>实现,

package com.whd.system.common;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class AxiosResult<T> {
    private int code;
    private String msg;
    private T data;

    private AxiosResult(CodeEnum codeEnum, T data) {
        this.code = codeEnum.getCode();
        this.msg = codeEnum.getMsg();
        this.data = data;
    }

    private AxiosResult(CodeEnum codeEnum) {
        this.code = codeEnum.getCode();
        this.msg = codeEnum.getMsg();
    }

    //方法重载
    //成功
    public static <T> AxiosResult<T> success(T data){
        return new AxiosResult<T>(CodeEnum.SUCCESS,data);
    }

    public static <T> AxiosResult<T> success(CodeEnum codeEnum,T data){
        return new AxiosResult<T>(codeEnum,data);
    }
    //失败
    public static <T> AxiosResult<T> error(){
        return new AxiosResult<T>(CodeEnum.ERROR);
    }

    public static <T> AxiosResult<T> error(CodeEnum codeEnum){
        return new AxiosResult<T>(codeEnum);
    }
}

package com.whd.system.common;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum CodeEnum {
    SUCCESS(200, "success"),
    ERROR(500, "error"),
    UNKNOWN_ERROR(100, "未知错误"),
    USER_LOGIN_ERROR(501, "用户名或者密码有误"),
    USER_INVALID_ERROR(502, "用户已被禁用");

    private final int code;
    private final String msg;
}



例如以下例子:

package com.whd.system.controller;

import com.whd.system.common.AxiosResult;
import com.whd.system.common.CodeEnum;
import com.whd.system.domain.SysUser;
import com.whd.system.domain.vo.SysRoleVo;
import com.whd.system.domain.vo.SysUserVo;
import com.whd.system.mapper.SysUserMapper;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/user")
//@CrossOrigin // 允许类跨域请求
public class SysUserController {

    private static final String PAO_PATH = "http://127.0.0.1:8080";
    @Autowired
    private SysUserMapper SysUserMapper;

    @PostMapping("/login")
    public AxiosResult<Integer> login(@RequestBody Map<String, String> params) {
        String username = params.get("username");
        String password = params.get("password");

        SysUser user = SysUserMapper.selectByUser(username, password);
        if (user == null) {
            return AxiosResult.error(CodeEnum.USER_LOGIN_ERROR);
        }
        return AxiosResult.success(user.getId());
    }
//查找用户信息
    @GetMapping("/find/{id}")
    public AxiosResult<Map<String, Object>> findUserAndRoleInfo(@PathVariable("id") Integer id) {
        Map<String, Object> map = SysUserMapper.findUserAndeRole(id);
        return AxiosResult.success(map);
    }

    // 查找角色信息
    @GetMapping("/find/getRoleList")
    public AxiosResult<List<SysRoleVo>> findRoleInfo() {
        List<SysRoleVo> list = SysUserMapper.findRoleInfo();
        return AxiosResult.success(list);
    }

// 修改管理/用户信息 状态 0/1
    @GetMapping("/update/status/{id}/{status}")
    public AxiosResult<Integer> updateStatus(@PathVariable("id") Integer id, @PathVariable("status") Integer status) {
        int i = SysUserMapper.updateStatus(id, status);
        return AxiosResult.success(i);
    }

// 修改管理员信息
    @PostMapping("/update/adminInfo")
    public AxiosResult<Integer> updateAdminInfo(@RequestBody Map<String, Object> params) {

        String id = (String) params.get("id");
        String username = (String) params.get("username");
        String phone = (String) params.get("phone");
        String sex = (String) params.get("sex");
        String password = (String) params.get("pass");
        int roleId = (int) params.get("role");

        Map<String, Object> map=new HashMap<>();
        map.put("id", id);
        map.put("username", username);
        map.put("phone", phone);
        map.put("sex", sex);
        map.put("password", password);
        map.put("roleId", roleId);

        int i = SysUserMapper.updateAdminInfo(map);

        return AxiosResult.success(1);
    }

}

注意本例子中的这个方法:他传进.xml中的是一个map类型的数据,那么在使用的时候,还要指定他的类型

// 修改管理员信息
    @PostMapping("/update/adminInfo")
    public AxiosResult<Integer> updateAdminInfo(@RequestBody Map<String, Object> params) {

        String id = (String) params.get("id");
        String username = (String) params.get("username");
        String phone = (String) params.get("phone");
        String sex = (String) params.get("sex");
        String password = (String) params.get("pass");
        int roleId = (int) params.get("role");

        Map<String, Object> map=new HashMap<>();
        map.put("id", id);
        map.put("username", username);
        map.put("phone", phone);
        map.put("sex", sex);
        map.put("password", password);
        map.put("roleId", roleId);

        int i = SysUserMapper.updateAdminInfo(map);

        return AxiosResult.success(1);
    }

    <update id="updateAdminInfo" parameterType="map">
        UPDATE sys_user
        SET
            username = #{username, jdbcType=VARCHAR},
            phone = #{phone, jdbcType=VARCHAR},
            gender = #{sex, jdbcType=VARCHAR},
            password = #{password, jdbcType=VARCHAR},
            role_uid = #{roleId, jdbcType=INTEGER}
        WHERE id = #{id, jdbcType=VARCHAR}
    </update>

5、补充

a、mybatisplus

  在mapper 接口中,通过继承BaseMapper<T>类,可以实现所有的增删改查,复杂的可能还是要手敲的
  1、由于我们写的实体类的名字可能和表的名字有很大差异,所以在继承后,所用的实体类添加@TableName("表名")注解,用户确定该实体类所对应的表的名字
  2、实体类的名字不一定要和表中字段的名字一致,但是,不一致的要添加@Result(column = "db_column_name", property = "propertyName")用于映射,不然怎么实现智能化对应了,但是还是建议直接用一样的就行了
  对于 mybatisplus 还有很多用法,自行查找吧 >_<

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

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

相关文章

【因果推断python】36_断点回归2

目录 RDD 估计 内核加权 RDD 估计 RDD 依赖的关键假设是阈值处潜在结果的平滑性。用比较正式地表述来说&#xff0c;当运行变量从右侧和左侧接近阈值时&#xff0c;潜在结果的极限应该是相同的。 如果这是真的&#xff0c;我们可以在阈值处找到因果关系 从其本身意义来说&…

统计信号处理基础 习题解答10-16

题目&#xff1a; 对于例10.1&#xff0c;证明由观察数据得到的信息是&#xff1a; 解答&#xff1a; 基于习题10-15的结论&#xff0c;&#xff0c;那么&#xff1a; 而根据习题10-15的结论&#xff1a; 此条件概率也是高斯分布&#xff0c;即&#xff1a; 根据相同的计算&a…

为什么都在避坑抖店?现阶段小白真的很难做起来吗?现状分析

我是王路飞。 如果有想做抖店的&#xff0c;你们可能都发现了一个现象。 那就是现在很多抖店商家都在劝告新手小白&#xff0c;不要入局抖店了&#xff0c;都在劝避坑。 难道现阶段新手小白入局抖音小店&#xff0c;真的很难做起来吗&#xff1f; 我给你们分析下抖店现状&a…

刷题训练之链表

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握链表算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题训…

【Quartus 13.0】EP1C3144I7 部署4*6矩阵键盘

仿照 正点原子 的 Sample 修改 V2手册 P266 没有用这个 给出的手动按键控制的矩阵模块 为 4*6 矩阵键盘外接模块 每一个按键自带led&#xff0c;所以对应的接口是合并在一起的一个引脚 按下后 LED 亮&#xff0c;vice versa 底部 LED*8 目前不清楚有什么用 或许可以变成 16进…

warning LNK4017: DESCRIPTION 语句不支持目标平台;已忽略

文章目录 warning LNK4017: DESCRIPTION 语句不支持目标平台&#xff1b;已忽略概述笔记备注END warning LNK4017: DESCRIPTION 语句不支持目标平台&#xff1b;已忽略 概述 基于ATL的COM DLL导出函数&#xff0c;无法用__declspec(dllexport)直接在函数上标记为导出函数。 只…

基础-01-计算机网络概论

一. 计算机网络的发展与分类 1.计算机网络的形成与发展 计算机网络&#xff1a;计算机技术与通信技术的结合 ICTITCT 2.计算机网络标准阶段 3.计算机网络分类1:通信子网和资源子网 通信子网:通信节点(集线器、交换机、路由器等)和通信链路(电话线、同轴电缆、无线电线路、卫…

省去烦恼!轻松实现一台电脑登录多个微信号的秘诀揭秘!

你知道如何在同一台电脑上登录多个微信号&#xff0c;并实现聚合聊天吗&#xff1f; 今天&#xff0c;我将分享一个多微管理神器——个微管理系统&#xff0c;帮助你解决这一问题&#xff01; 1、多号同时登录&#xff0c;聚合聊天 无论你有多少个微信号&#xff0c;都可以一…

Linux文件系统【真的很详细】

目录 一.认识磁盘 1.1磁盘的物理结构 1.2磁盘的存储结构 1.3磁盘的逻辑存储结构 二.理解文件系统 2.1如何管理磁盘 2.2如何在磁盘中找到文件 2.3关于文件名 哈喽&#xff0c;大家好。今天我们学习文件系统&#xff0c;我们之前在Linux基础IO中研究的是进程和被打开文件…

06.VisionMaster 机器视觉找直线

VisionMaster 机器视觉找直线 直线查找主要用于查找图像中具有某些特征的直线&#xff0c;利用已知特征点形成特征点集&#xff0c;然后拟合成直线。 工具栏&#xff1a;定位-》直线查找 参数设置 海康的这些工具使用上大部分参数是差不多了&#xff0c;以前说过的说不多说了…

Elixir学习笔记——别名、需要、导入和使用

为了便于软件重用&#xff0c;Elixir 提供了三个指令&#xff08;alias、require 和 import&#xff09;以及一个名为 use 的宏&#xff0c;总结如下&#xff1a; # 为模块添加别名&#xff0c;以便可以将其称为 Bar 而不是 Foo.Bar alias Foo.Bar, as: Bar # 需要模块才能使…

2024 年最新使用 Node 搭建QQ开放平台官方 QQ 频道机器人详细教程(更新中)

注册 QQ 开放平台账号 QQ 开放平台是腾讯应用综合开放类平台&#xff0c;包含 QQ 机器人、QQ 小程序、QQ 小游戏 等集成化管理&#xff0c;也就是说你注册了QQ 开放平台&#xff0c;你开发 QQ 机器人还是 QQ 小程序都是在这个平台进行部署上线和管理。 如何注册 QQ 开放平台账…

Internet Download Manager ( 极速下载器 ) 序列号注册码 IDM下载器注册机中文激活破解版

IDM下载器(Internet Download Manager)是一款专业的下载管理软件&#xff0c;它通过多线程技术和智能文件分段技术&#xff0c;有效提升下载速度&#xff0c;并支持断点续传&#xff0c;还具有计划下载功能&#xff0c;用户可以设置特定的下载时间&#xff0c;非常适合需要在特…

C#批量设置海康和大华录像机NVR,GB28181的通道编码.

我经常要把小区海康或者大华的硬盘录像机推送到自己搭建的gb28181监控平台,每次几百个摄像头编码,有点头大,就用了1个多周写了个批量设置海康和大华硬盘录像机的通道编码的程序,海康和大华的SDK简直不是人看的. 太乱了. 大华读取通道编码的代码 /// <summary>/// 获取通道…

虚拟机上安装centos7

目录 1&#xff0c;下载centos镜像2&#xff0c;在VMware中新建虚拟机3&#xff0c;为新创建的虚拟机挂载镜像4&#xff0c;安装centos75&#xff0c;配置网络 1&#xff0c;下载centos镜像 直接下载地址 https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.8.2003/isos/x8…

干部选拔任用的六条原则

在干部选拔任用的过程中&#xff0c;为确保选拔出的干部能够真正符合党和人民的期望&#xff0c;必须遵循以下六条原则&#xff1a; 一、党管干部原则 党管干部原则是指在整个干部选拔任用过程中&#xff0c;党要发挥总揽全局、协调各方的领导作用&#xff0c;确保选拔出的干…

[渗透测试学习] Runner-HackTheBox

Runner-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -v 10.10.11.13扫描结果如下 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.18.0 (Ubuntu) 8000…

Echarts图表:地图都有哪些配置项,一文告诉你

地图是可视化大屏中最常见的组件&#xff0c;echart图表中关于地图的组件非常多&#xff0c;那么该如何进行配置&#xff0c;让地图和自己的设计稿保持一致。贝格前端工场为大家列举一下。 charts地图图表在配置项中有以下常用的配置选项&#xff1a; title&#xff1a;图表标…

TCP协议报头详解

目录 前言 TCP特点 TCP报头 1.源端口和目的端口 2.序号 3.确认号 4.数据偏移 5.保留 6.控制位 ① 紧急URG&#xff08;URGent&#xff09; ② 确认ACK&#xff08;ACKnowledgment&#xff09; ③ 推送PSH&#xff08;PuSH&#xff09; ④复位RST&#xff08;ReSeT&…

【二】【动态规划NEW】91. 解码方法,62. 不同路径,63. 不同路径 II

91. 解码方法 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; ‘A’ -> “1” ‘B’ -> “2” … ‘Z’ -> “26” 要 解码 已编码的消息&#xff0c;所有数字必须基于上述映射的方法&#xff0c;反向映射回字母&#xff08;可能有多种方法&#xff…