当前位置: 首页 > article >正文

Springboot3.3 + Mybatis / Mybatis-plus

Java17,  Springboot 3.3.5,  项目一启动就报错:

Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

我知道问题出现在pom依赖的版本上。但网上对于Springboot3.3的配置资料并不多,且在我代码上实测还是会报错。搞了一天终于解决了,希望能对同样问题的人有帮助。

Springboot + Mybatis

项目结构

我的pom文件

依赖配置是成功的一半。。。其中 mybatis-plus-spring-boot3-starter 是最重要的!

<?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>3.3.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>demo</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>

        <!-- mysql驱动依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

        <!-- MyBatisPlus依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>3.5.5</version>
        </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>
    </build>

</project>

我的application.properties

spring.application.name=demo
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?useSSL=false
spring.datasource.username=root
spring.datasource.password=密码
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
server.port=8080

才知道这种格式和下面这种是不通用的..

spring:
    application.name:demo
    datasource:
        driver-class-name:com.mysql.jdbc.Driver
        url:jdbc:mysql://localhost:3306/数据库名?useSSL=false
        ......

我的数据库

navicat里创建表,随便填几个数据

测试一下

配置完这些,可以在测试类里测一下,是否连接成功。这里成功了再接着往下做。

package com.example.demo;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.SQLException;

@SpringBootTest
class DemoApplicationTests {
    @Resource
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        System.out.println("获取的数据库连接为:"+ dataSource.getConnection());
    }
}

我的entity

@Data
// 这里亲测不需要写表名
public class User {
    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public void setId(int id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

我的Mapper

package com.example.demo.mapper;
import com.example.demo.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import java.util.List;

@Mapper
public interface UserMapper{
    
    // 在sql语句中指定表名即可
    @Select("select * from user0")
    List<User> find();

    @Select("select * from user0 where id=#{id}")
    User selectById(int id);
}

我的Controller

package com.example.demo.controller;
import com.example.demo.mapper.UserMapper;
import com.example.demo.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/user")
    public void query(){
        List<User> list = userMapper.find();
        System.out.println(list);

        User user = userMapper.selectById(1);
        System.out.println(user);
    }
}

我的Application

package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.demo.mapper")    //不要忘记
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }
}

OK,可以运行Application了!结果如下:

Springboot + Mybatis-plus

pom,properties配置,数据库都不用改动。

改动1:entity

如果你的表名和类名不同(不区分大小写),比如我的表名是user0,类名为User。那么需要新增注解。

@Data
@TableName("user0")
public class User {
    private int id;
    private String name;
    ......
}

改动2:Mapper

继承BaseMapper以后,不需要我们再去定义方法了,只需要调用BaseMapper里的方法即可。

@Mapper
public interface UserMapper extends BaseMapper<User>{
    // 空
}

改动3:Controller

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/user")
    public void query(){
        // 查询,selectList括号内写条件
        List<User> list = userMapper.selectList(null);
        System.out.println(list);

        // 条件查询
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("name","zhangsan");
        List<User> user = userMapper.selectList(queryWrapper);
        System.out.println(user);
    }
}

再次运行Application即可成功。


http://www.kler.cn/a/373000.html

相关文章:

  • 第二十章 Vue组件通信之父子通信
  • WebSocket简单使用
  • 大数据挖掘和数据挖掘有什么不一样?
  • MS01SF1 精准测距UWB模组助力露天采矿中的人车定位安全和作业效率提升
  • 问题记录01
  • Java 中 String str = new String(“hello“); 里面创建了几个对象?
  • 2024年10月23日Github流行趋势
  • Invalid version: ‘4.0.0-unsupported‘ - cmd 报错解决方案
  • Django入门教程——数据模型建立
  • SCSS在Vue中切换主题颜色示例(mixin + scss方式,简单高效)
  • 基于Spring Cloud Alibaba开源微服务框架:构建智能化用户审核流程
  • Python基于TensorFlow实现简单循环神经网络回归模型(SimpleRNN回归算法)项目实战
  • 《JVM第3课》运行时数据区
  • AIX、Linux和Windows三种操作系统区别以及应用场景.
  • NavVis LX系列产品典型应用—现有住宅装修改造-沪敖3D
  • MFC七段码显示实例
  • metasploit/modules/auxiliary 有哪些模块,以及具体使用案例
  • 瀚海微SD NAND存储功能描述(20)内部分区和命令响应
  • 【LeetCode】每日一题 2024_10_30 交换后字典序最小的字符串(字符串、贪心)
  • C#语言:从入门到精通
  • el-select、el-autocomplete的选项内容过长显示完整内容
  • 【Linux】动态库、静态库
  • 学习笔记:黑马程序员JavaWeb开发教程(2024.10.30)
  • 《模拟电子技术基础》第六版PDF课后题答案详解
  • 2024年道路运输安全员考试题库及答案
  • 海外云手机是什么?对外贸电商有什么帮助?