SpringBoot+Mybatis学习杂记

1.postman发送的请求,报401,认证失败,无法访问系统资源:参考herehere

解决:前端服务配置中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的值
PathVariable和RequestParam的使用
复制代码

 

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>
View Code 
复制代码

 

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
application.yml
复制代码
复制代码
<?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>-->
        <!--                &lt;!&ndash; xml放在java目录下&ndash;&gt;-->
        <!--                <directory>src/main/java</directory>-->
        <!--                <includes>-->
        <!--                    <include>**/*.xml</include>-->
        <!--                    <include>*.properties</include>-->
        <!--                </includes>-->
        <!--            </resource>-->
        <!--            &lt;!&ndash;指定资源的位置(xml放在resources下,可以不用指定)&ndash;&gt;-->
        <!--            <resource>-->
        <!--                <directory>src/main/resources</directory>-->
        <!--            </resource>-->
        <!--        </resources>-->
    </build>
</project>
pom.xml
复制代码

 

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;
    }
User表中的模糊搜索
复制代码

 

 

 

【Over】

posted @   Renhr  阅读(160)  评论(1编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示