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.rhkb.cn/news/350678.html

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

相关文章

学习cel-go了解一下通用表达语言评估是什么

文章目录 1. 前言2. cel-go2.1 cel-go关键概念Applications(应用)Compilation(编译)Expressions(表达式)Environment环境解析表达式的三个阶段 3. cel-go的使用4. cel-go使用5. 说明6. 小结7. 参考 1. 前言 最近因为在项目里面实现的一个使用和||来组合获取字段值的功能有点儿…

增材制造引领模具创新之路

随着科技的快速发展和制造业的不断转型升级&#xff0c;增材制造&#xff08;也称为3D打印&#xff09;技术正逐渐展现出其在模具智造中的巨大潜力和优势。增材制造以其独特的加工方式和设计理念&#xff0c;为模具行业带来了革命性的变革&#xff0c;为传统制造业注入了新的活…

利用鱼骨图进行项目问题复盘与改进

一、引言 在项目管理中&#xff0c;问题复盘是一个至关重要的环节。它不仅能帮助我们识别项目执行过程中出现的问题&#xff0c;还能促使我们深入探究问题的根本原因&#xff0c;从而采取有效的改进措施。在这个过程中&#xff0c;鱼骨图作为一种强大的工具&#xff0c;为我们…

网络爬虫概述

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 网络爬虫&#xff08;又被称为网络蜘蛛、网络机器人&#xff0c;在某社区中经常被称为网页追逐者&#xff09;&#xff0c;可以按照指定的规则&#…

汽车IVI中控开发入门及进阶(二十八):视频SERDES芯片

前言: SerDes不是很常见,SerDes是将Ser和Des两种产品组合在一起的名称。Ser是Serializer或“并串转换器”的缩写,Des是Deserializer或“串并转换器”的简写。 Serdes是不是必须的?上一节介绍了camera,上上节也研究了video decoder,那么带摄像头的应用应该具体选哪个方案…

波卡近期活动一览| Polkadot Decoded 2024 重磅来袭,300 万 DOT 将用于 DeFi 增长

Polkadot 生态近期活动精彩纷呈&#xff0c;线上线下火热进行中&#xff01;此外&#xff0c;Polkadot 2.0 的关键升级即将到来&#xff0c;Gavin Wood 博士也将在最新访谈节目中分享更多关于波卡的未来发展蓝图。波卡 DAO 通过提案&#xff0c;分配 300 万 DOT 支持 DeFi 生态…

深度学习(PyTorch)批注理解,建议边学可以边看这个笔记

前言 动手学习深度学习&#xff0c;内容丰富&#xff0c;但是对于初学者有很多晦涩难懂的地方&#xff0c;我将日常更新这篇文章以截图的形式&#xff0c;每天高强度学习四五个小时&#xff0c;精力缺乏&#xff0c;我认为&#xff0c;如果想学习这个深度学习&#xff0c;你需…

堆栈溢出的攻击 -fno-stack-protector stack smash 检测

在程序返回的一条语句堆栈项目处&#xff0c;用新函数的起始地址覆盖&#xff0c;将会跳转到执行新函数。 现在系统对这个行为做了判断&#xff0c;已经无法实施这类攻击或技巧。 1&#xff0c;测试代码 #include <stdio.h> void cc() {printf("I am cc( )\n"…

Linux文本处理三剑客+正则表达式

Linux文本处理常用的3个命令&#xff0c;脚本或者文本处理任务中会用到。这里做个整理。 三者的功能都是处理文本&#xff0c;但侧重点各不相同&#xff0c;grep更适合单纯的查找或匹配文本&#xff0c;sed更适合编辑匹配到的文本&#xff0c;awk更适合格式化文本&#xff0c;对…

Android中的消息异步处理机制及实现方案

基本介绍 当我们需要执行复杂的计算逻辑&#xff0c;网络请求等耗时操作时&#xff0c;服务器可能不会立即响应请求&#xff0c;如果不将这类操作放在子线程中运行&#xff0c;就会导致主线程被阻塞住&#xff0c;从而影响用户的使用体验如果想要更新应用程序中的UI控件&#…

Java中List流式转换为Map的终极指南

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Java编程中&#xff0c;经常需要将一个List对象转换为另一个Map对象。这可能是因为需要根据List中的元素的某些属性来创建一个新的键值对集合。在本文中&#xff0c;我将向您展示如何使用Java 中的流式API轻松地实…

神经网络学习2

张量&#xff08;Tensor&#xff09;是深度学习和科学计算中的基本数据结构&#xff0c;用于表示多维数组。张量可以看作是一个更广义的概念&#xff0c;涵盖了标量、向量、矩阵以及更高维度的数据结构。具体来说&#xff0c;张量的维度可以是以下几种形式&#xff1a; 标量&am…

借助ChatGPT撰写学术论文,如何设定有效的角色提示词指

大家好&#xff0c;感谢关注。这个给大家提供关于论文写作方面专业的讲解&#xff0c;以及借助ChatGPT等AI工具如何有效辅助的攻略技巧。有兴趣的朋友可以添加我&#xff08;yida985&#xff09;交流学术写作或ChatGPT等AI领域相关问题&#xff0c;多多交流&#xff0c;相互成就…

Javaweb8 数据库Mybatis+JDBC

Mybatis Dao层&#xff0c;用于简化JDBC开发 1步中的实体类 int类型一般用Integer &#xff1a;如果用int类型 默认值为0,会影响数据的判断,用Integer默认值是null,不会给数据的判断造成干扰 2.在application .properties里配置数据库的链接信息-四要素 #驱动类名称 #URL #用…

高考志愿填报,选专业应该考虑哪些因素?

这是一个复杂的社会&#xff0c;各种影响就业的因素层出不穷&#xff0c;也从未断绝。对于高考生而言&#xff0c;高考刚结束&#xff0c;短暂的放松后&#xff0c;就必须考虑自身以后应该就读什么专业&#xff0c;如果不对就读专业进行评估&#xff0c;仔细挑选&#xff0c;毕…

微服务链路追踪ELK

微服务链路追踪&ELK 链路追踪概述链路追踪sluthzipkinelk日志管理平台 一 链路追踪 1 概述 1.1 为什么需要链路追踪 ​ 微服务架构是一个分布式架构&#xff0c;它按业务划分服务单元&#xff0c;一个分布式系统往往有很多个服务单元。由于服务单元数量众多&#xff0…

swiftui中使用icon图标时,让中间部分不透明显示

在使用了Image(systemName: "plus.circle.fill")这个视图组件后&#xff0c;发现中间的加号竟然是透明的&#xff0c;但是我们想要的是不让它透明&#xff0c;该怎么做呢&#xff1f; 最简单的方式就是给这个图片设置一个白色的背景是不是就好了&#xff1f;我们可以…

基于深度学习的红外船舶检测识别分类完整实现数据集8000+张

随着遥感技术的快速发展&#xff0c;包括无人机、卫星等&#xff0c;红外图像在船舶检测识别中的作用日益凸显。相对于可见光图像&#xff0c;红外图像具有在夜晚和恶劣天气条件下高效检测识别船舶的天然优势。近年来&#xff0c;深度学习作为一种强大的图像处理技术&#xff0…

网络通信的两大支柱:TCP与UDP协议详解(非常详细)零基础入门到精通,收藏这一篇就够了

在构建现代互联网通信的基石中&#xff0c;TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;起着至关重要的作用。本文将深入探讨两者的区别及应用场景。 1 TCP和UDP的共同点 传输层协议&#xff1a; TCP和UDP都是传输层协议&#xff…

算法day32

第一题 207. 课程表 步骤一&#xff1a; 通过下图的课程数组,首先画出DAG图&#xff08;有向无环图&#xff09; 步骤二&#xff1a; 其次我们按照DAG图&#xff0c;来构建该图的拓扑排序&#xff0c;等有效的点都按照规则排完序后&#xff0c;观察是否有剩下的点的入度不为0&…