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 userwhere 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 {@Autowiredprivate 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、控制类

注意要引入所写的接口

 @Autowiredprivate 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 {@Autowiredprivate 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";@Autowiredprivate 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_userSETusername = #{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 还有很多用法,自行查找吧 >_<

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CorelDraw 2024软件安装包下载 丨不限速下载丨亲测好用

​简介&#xff1a; CorelDRAW Graphics Suite 订阅版拥有配备齐全的专业设计工具包&#xff0c;可以通过非常高的效率提供令人惊艳的矢量插图、布局、照片编辑和排版项目。价格实惠的订阅就能获得令人难以置信的持续价值&#xff0c;即时、有保障地获得独家的新功能和内容、…

生产中的 RAG:使你的生成式 AI 项目投入运营

作者&#xff1a;来自 Elastic Tim Brophy 检索增强生成 (RAG) 为组织提供了一个采用大型语言模型 (LLM) 的机会&#xff0c;即通过将生成式人工智能 (GenAI) 功能应用于其自己的专有数据。使用 RAG 可以降低固有风险&#xff0c;因为我们依赖受控数据集作为模型答案的基础&…

【菜狗学前端】uniapp(vue3|微信小程序)实现外卖点餐的左右联动功能

记录&#xff0c;避免之后忘记...... 一、目的&#xff1a;实现左右联动 右->左 滚动&#xff08;上拉/下拉&#xff09;右侧&#xff0c;左侧对应品类选中左->右 点击左侧品类&#xff0c;右侧显示对应品类 二、实现右->左 滚动&#xff08;上拉/下拉&#xff09;右…

什么是深拷贝;深拷贝和浅拷贝有什么区别;深拷贝和浅拷贝有哪些方法(详解)

目录 一、为什么要区别深拷贝和浅拷贝 二、浅拷贝 2.1、什么是浅拷贝 2.2、浅拷贝的方法 使用Object.assign() 使用展开运算符(...) 使用数组的slice()方法&#xff08;仅适用于数组&#xff09; 2.3、关于赋值运算符&#xff08;&#xff09; 三、深拷贝 3.1、什么是…

leetcode第709题:转换成小写字母

注意字符不仅有26个英文字母&#xff0c;还有特殊字符。特殊字符的话&#xff0c;原样输出。 public class Solution {public char toLowChar(char c){if(c>a&&c<z){return c;}else if(c>A&&c<Z){int n(int)c32;return (char)n;}return c;}publi…

Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)

前言&#xff1a;ArrayList是Java中最常用的动态数组实现之一&#xff0c;它提供了便捷的操作接口和灵活的扩展能力&#xff0c;使得在处理动态数据集合时非常方便。本文将深入探讨Java中ArrayList的实现原理、常用操作以及一些使用场景。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨…

useEffect的概念以及使用(对接口)

// useEffect的概念以及使用 import {useEffect, useState} from reactconst Url"http://geek.itheima.net/v1_0/channels"function App() {// 创建状态变量const [lustGet,setLustGet]useState([]);// 渲染完了之后执行这个useEffect(() > {// 额外的操作&#x…

【TypeScript】泛型工具

跟着 小满zs 学 ts&#xff1a;学习TypeScript24&#xff08;TS进阶用法-泛型工具&#xff09;_ts泛型工具-CSDN博客 Partial 所有属性可选的意思Required 所有属性必选的意思Pick 提取部分属性Exclude 排除部分属性emit 排除部分属性并且返回新的类型 Partial 属性变为可选。…

Qt-Advanced-Docking-System的学习

Qt5.12实现Visual Studio 2019 拖拽式Dock面板-Qt-Advanced-Docking-System_c_saide6000-GitCode 开源社区 (csdn.net) 我使用的是Qt5.5.0 开始&#xff0c;我下载的是最新版的源码&#xff1a;4.1版本 但是&#xff0c;打开ads.pro工程文件&#xff0c;无法编译成功。 然后…

RERCS系统开发实战案例-Part02 创建BOPF对应的业务对象(Business Object)

1、通过事务码 BOBF创建业务对象 2、输入debug&#xff0c;进入编辑模式新建BO对象&#xff1b; 选择对应的BO对象属性类别&#xff1a; 3、激活BO对象 接口页签&#xff1a; 属性页签&#xff1a;自动带出标准的常量 改接口类部分源码&#xff1a; 4、BO对象Node Elemen…

Golang的Gin框架

目录 功能以及简单使用 gin.Engine数据结构 RouterGroup methodTrees gin.context 功能以及简单使用 功能: • 支持中间件操作&#xff08; handlersChain 机制 &#xff09; • 更方便的使用&#xff08; gin.Context &#xff09; • 更强大的路由解析能力&#xff08…

windows下的eclipse按Ctrl+Shift+F格式化代码不起作用的处理

1、先上张图&#xff1a; 上面Format&#xff1a;CtrlShiftF&#xff0c;按了以后不起作用。 2、这个快捷键不起作用的原因&#xff1a;可能是快捷键冲突了。 机器上装了Sougou输入法&#xff0c;将输入法切换为英文模式是起作用的。 那么应该就是这个原因了。 3、解决方法…

【Ardiuno】使用ESP32单片机创建web服务通过网页控制小灯开关的实验(图文)

经过实验测试ESP32单片机的网络连接还是很方便的&#xff0c;这里小飞鱼按照程序实例的代码亲自实验一下使用Esp32生成的网页服务来实现远程无线控制小灯开关功能&#xff0c;这样真的是离物联网开发越来越近了&#xff0c;哈哈&#xff01; 连接好开发板和电路&#xff0c;将…

React入门教程:构建你的第一个React应用

在当今快速发展的Web开发领域&#xff0c;前端技术日新月异&#xff0c;而React作为一款强大的JavaScript库&#xff0c;已经成为众多开发者的首选。React以其组件化、高效的性能和灵活的数据处理机制闻名于世&#xff0c;被广泛用于构建动态且复杂的用户界面。在本教程中&…

Elixir学习笔记——输入输出和文件系统

本章介绍输入/输出机制、文件系统相关任务以及相关模块&#xff08;如 IO、File 和 Path&#xff09;。IO 系统提供了一个很好的机会来阐明 Elixir 和 Erlang VM 的一些思维模式和新奇思想。 输入输出模块 输入输出模块是 Elixir 中读写标准输入/输出 (:stdio)、标准错误 (:s…

Python中关于电商商品数据的采集【taobao/JD/商品详情数据返回】

在Python中采集电商商品数据&#xff08;如淘宝、京东等&#xff09;通常涉及到网络爬虫&#xff08;web scraping&#xff09;或称为网络数据抓取&#xff08;web data scraping&#xff09;。由于电商平台通常会有反爬虫机制&#xff0c;因此直接抓取数据可能会遇到各种挑战&…

基于51单片机的智能水表

一.硬件方案 本设计主要以51单片机作为主控处理器的智能水表&#xff0c;该水表能够记录总的用水量和单次用水量&#xff0c;当用水量超出设定值时系统发出声光报警提醒&#xff0c;水量报警值能够通过按键进行自行设置&#xff0c;并且存储于AT24C02中&#xff0c;并且可以测…

C++11默认成员函数控制

默认成员函数有 如果自己不显示声明&#xff0c;那么默认编译器会自己生成一个 如果有一个构造函数被声明了&#xff0c;那其他的默认函数编译器就不会再生成 这样的有时又不生成&#xff0c;容易造成混乱&#xff0c;于是C11让程序员可以控制是否需要编译器生成。 显式缺省函…

(虚拟机)VMware软件的安装及Ubuntu系统安装

一、VMware软件的安装 软件下载&#xff0c;可以自己找或者百度网盘下载&#xff1a; 通过百度网盘分享的文件&#xff1a;ubuntu16…等2个文件 链接:https://pan.baidu.com/s/1VEnZKY9DJ1T1vC3ae20gKQ 提取码:11b6 复制这段内容打开「百度网盘APP 即可获取」 1、解压VMwar…

06--jenkins构建CI_CD

前言&#xff1a;上一篇文章整理了git的部署和使用&#xff0c;这章主要复习持续集成软件Jenkins&#xff0c;这个技术现在在云计算方面也是有应用的&#xff0c;同时也是越高级越智能的软件代表。 1、概念简介 1&#xff09;jenkins是什么 Jenkins是一个开源的、可扩展的持…