SpringBoot+Mybatis学习杂记
1.postman发送的请求,报401,认证失败,无法访问系统资源:参考here,here
解决:前端服务配置中service的baseURL改成默认值,启动服务看前端登录请求,得到token。
2.idea中git独理分支的文档未commit的修改会触发force checkout和smart checkout两个选项,参考:here
注:commit是正式暂存于本地,具体每一步修改可以右键文档查看本地历史,右键git-显示历史会只显示commit的历史记录,传输到公用仓库还需要push操作。
3.学习了一下传统验证方式JWT(JsonWebToken),代码在E:/PersonManagerSystem/ui/pm-ui/build/token_test.js,实操参考:here
学习参考:here,若依框架下的token用户认证机制学习参考:here
4.开启VCS版本控制,选择git,参考:here,idea_vcs内容参考:here
5.前后端分离项目联调接口报错:
Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long';
nested exception is java.lang.NumberFormatException: For input string: "xxx"
参考:here,
可能1:没写好对应参数或者参数名不对
可能2:如果使用的是vue+springboot的前后端分离项目,如果使用的是Vue+Springboot前后端分离,想要传递数据,传递的url可能是:http://localhost:8080/test/login?userName=xxx&passWord=xxx那么此时你使用的应当是@RequestParam,而不是@PathVariable

PathVariable和RequestParam的使用举例: 地址1:http://localhost:8080/test/login?userName=xiaohua&passWord=dwad 地址2:http://localhost:8080/test/login/userName=xiaohua/passWord=dwad 如果想获取地址1中的 pageNo的值 ‘userName’ ,则使用 @RequestParam , 如果想获取地址2中的 emp/7 中的 ‘userName ’ 则使用 @PathVariable @PathVariable 从路径中获取变量,也就是把路径当做变量。 使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId},这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。 @RequestParam 从请求中获取参数 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String–> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值
6.Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 来始终保持同步。Swagger 让部署管理和使用功能强大的 API 变得简单,传送学习。
7.简单学习了一下bat脚本的指令,一键启动redis,每次都要单独找redis去启动有点麻烦,学习参考:here
8.Redis学习——RedisTemplate实体类方法参考:here,Redis配置和简单测试参考:here,Redis序列化方式详解参考:here。
9.token验证拦截器——简单使用参考:here,标准获取token参考:here,基础Filter拦截器学习参考:here,FilterChain详解参考:here
10.Druid数据源配置详解:here
11.Lombok的@Data爆红,Idea缺少Lombok插件,去File——setting——plugins——搜索Lombok——install即可,参考:here
12.Sql处理语句,在("1,12,123")中准确取值判断出"1","12","123",有find_in_set()方法,参考:here
13.配置类@ConfigurationProPerties注解(同时需要@Component注解来启动)参考:here
【“在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在SpringBoot项目中,为满足以上要求,我们将大量的参数配置在application.properties或application.yml文件中,通过该注解,我们可以方便地获取这些参数值。”】
【注意1:配置类的参数默认会有static,其set方法不能static修饰,否则参数无效为null。注意2:application有".yml"后缀文件,就不能用".properties"后缀文件,Springboot读取yml优先级更高】
需要提供依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>1.5.16.RELEASE</version> </dependency>
14.File.getParentFile():返回包含File文件的文件夹路径,参考:here
15.requestbody注解,适用于post请求中复杂对象,前台ajax写法会有区别,参考:here,简概:here
16.MybatisPlus的Mapper和Service层接口使用,参考:here,进阶——动态查询QueryWrapper的使用,参考:here
17.MybatisPlus的实体类最好直接与数据库数据字段名相同,但是注意下划线,在MybatisPlus中,可能会默认开启驼峰转换,导致接口操作实际查询到了数据但是返回为空(不能转换)。
参考配置如下(关闭):
# mybatis-plus相关配置
mybatis-plus:
configuration:
# 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
map-underscore-to-camel-case: false
18.创建Springboot+MybatisPlus项目,参考:here,详解:here
19.MybatisPlus的实体类上常用注解:
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("xxx")//@TableName中的值对应着表名
20.MybatisPlus的实体类数据字段上常用注解:
//如果数据库中没有此字段 使用@TableField(exist = false)注解后查询时可以忽略此字段
//设置主键id的格式,如自动递增:@TableId(type = IdType.AUTO)【需要数据库同步设置自动递增】
21.由于MybatisPlus通常不使用xml配置文件,所以在启动项目的时候会遇到
Property ‘mapperLocations‘ was not specified & Invalid bound statement
这样的提示语句,解决办法(可以参考:here):在resource文件目录下新建mapper包,里面创建实体类对应的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="com.mg.mapper.UserMapper">
</mapper>
因为不需要,所以写个空文件骗一下Idea就是了,如果复杂的Sql语句要写也确实会用到。
另外还要写上两个路径映射:
mybatis:
mapper-locations: # 所有的mapper映射文件
- classpath:mapper/*.xml
# mybatis-plus相关配置
mybatis-plus:
# xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
mapper-locations: classpath:mapper/*.xml
22.Springboot+MybatisPlus配置文件常用备份内容如下:

server: port: 10100 # 配置启动端口号 mybatis: config-location: classpath:mybatis.cfg.xml # mybatis主配置文件所在路径 type-aliases-package: com.demo.drools.entity # 定义所有操作类的别名所在包 mapper-locations: # 所有的mapper映射文件 - classpath:mapper/*.xml spring: #springboot的配置 datasource: #定义数据源 #127.0.0.1为本机测试的ip,3306是mysql的端口号。serverTimezone是定义时区,照抄就好,mysql高版本需要定义这些东西 #useSSL也是某些高版本mysql需要问有没有用SSL连接 url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useSSL=FALSE username: root #数据库用户名,root为管理员 password: root #该数据库用户的密码 # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource # mybatis-plus相关配置 mybatis-plus: # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置) mapper-locations: classpath:mapper/*.xml # 以下配置均有默认值,可以不设置 global-config: db-config: #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID"; id-type: auto #字段策略 IGNORED:"忽略判断" NOT_NULL:"非 NULL 判断") NOT_EMPTY:"非空判断" field-strategy: NOT_EMPTY #数据库类型 db-type: MYSQL configuration: # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射 map-underscore-to-camel-case: false # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段 call-setters-on-nulls: true # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.</groupId> <artifactId>mg</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mg</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- lombok 简化set get toString --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <scope>test</scope> <version>3.4.0</version> </dependency> <!--导入 JDBC 场景启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> <!--导入数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--采用自定义方式整合 druid 数据源--> <!--自定义整合需要编写一个与之相关的配置类--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> <!-- 作用暂时未知的包--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <scope>test</scope> <version>2.3.31</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> <!-- 不需要--> <!-- <resources>--> <!-- <resource>--> <!-- <!– xml放在java目录下–>--> <!-- <directory>src/main/java</directory>--> <!-- <includes>--> <!-- <include>**/*.xml</include>--> <!-- <include>*.properties</include>--> <!-- </includes>--> <!-- </resource>--> <!-- <!–指定资源的位置(xml放在resources下,可以不用指定)–>--> <!-- <resource>--> <!-- <directory>src/main/resources</directory>--> <!-- </resource>--> <!-- </resources>--> </build> </project>
23.写的上传图片接口可以上传到服务器,也能通过服务器下载,但是就是不能使用浏览器通过服务器访问图片,原因可能是编码问题,在接口上的RequestMapping注解添加内容:【produces="application/json;charset=UTF-8"】即可。详细参考下面这么写:
@RequestMapping(value = "/img", produces = "application/json;charset=UTF-8")
24.项目启动报错:
Public Key Retrieval is not allowed
问题解决方案参考:here+here,连接数据库的url中,加上allowPublicKeyRetrieval=true参数。
25.Mybatis-plus的复合条件查询:
学习参考:here+B站视频
参考模板:

@RequestMapping("/findlike") public User findUser(User user) { System.out.println("查找user条件: "+user); // 只查找单个用户 QueryWrapper<User> wrapper = new QueryWrapper<>(); Integer user_id = user.getUser_id(); String user_name = user.getUser_name(); String user_password = user.getUser_password(); String email = user.getEmail(); //这里选用或条件 if (user_id != null) wrapper.eq("user_id", user_id); if((user_name != null && user_name != "")&&(email != null && email != "")) wrapper.and(per->per.eq("user_name", user_name) .or().eq("email", email)); else{ if (user_name != null && user_name != "") wrapper.eq("user_name", user_name); if (email != null && email != "") wrapper.eq("email", email); } if (user_password != null && user_password != "") wrapper.eq("user_password", user_password); List<User> users = userMapper.selectList(wrapper); System.out.println("查找" + (users.size() == 1 ? "成功" : "失败!")); if (users.size() == 1) return users.get(0); return null; }
【Over】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南