Spring boot(maven) - Mybatis 超级入门版

发布于:2025-02-14 ⋅ 阅读:(14) ⋅ 点赞:(0)
前言:

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。

正片

不要问我为什么这么做,复制粘贴并可知

简单介绍一下Mybatis是什么?

一款java连接数据库的框架

简单介绍一下Mybatis的起到的作用!

分为三块区域

第一区:java区

第二区:mybatis区

第三区:数据库区(简称Sql区)

mybatis是连接两端的桥梁,起到了翻译的作用,将java语言翻译成Sql可运行的语言,将Sql运行的结果返回经过处理,返回至java语言环境中

将两个不相关的语言联系在一起,就是mybatis的作用

mybaits如何发挥作用的

首先,需要添加两款核心依赖,一款辅助依赖和基础依赖

基础依赖:spring web

核心依赖:Mybatis Farmework,Mysql Driver

辅助依赖:Lombok

添加完依赖,启动,成功报错!

这个报错是良性的报错,没错,在这里你能看见良性报错和恶性报错,你能清晰看它为什么报错

#优化版
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    # url 选择对应的数据库映射
    url: jdbc:mysql://localhost:3306/romachen #最后一位为数据库名
    username: root    # 数据库账号
    password: 123456  # 数据库密码

server:
  port: 8084

我们在springboot自带的配置文件中添加上面模板,修改数据库名即可

有人说,我没有自带的配置文件怎么版?新建一个application.yaml(不要打错了,打错会出bug)

添加依赖,注册mybatis,运行,一气合成

无报错

完整的代码目录

这是一个经典的CRUD模板

第一步:我们先创建一个实体类,用于接收数据库运行后返回的内容

package org.example.mybatis.entity;

import lombok.Data;

@Data
public class UserEntity {

    String username;
    String password;
}

第二步:创建mapper接口,用于mybatis对接sql

package org.example.mybatis.Mapper;

import org.apache.ibatis.annotations.Mapper;
import org.example.mybatis.entity.UserEntity;


@Mapper
public interface UserMapper {

    UserEntity UserByName(String username);

}

第三步:创建Mybatis载体,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="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="org.example.mybatis.Mapper.UserMapper">

    <select id="selectByUsername" resultType="org.example.mybatis.entity.UserEntity">
        SELECT * from steel.user_test where username = #{username}
    </select>
</mapper>

id需要对应mapper层中的方法名UserByName,resulType的参数即实体类的路径

第四步:创建CRUD模板中的业务层

package org.example.mybatis.servlet;

import org.example.mybatis.entity.UserEntity;

public interface UserServlet {

    UserEntity UserByName(String username);

}

第五步:创建业务实现

package org.example.mybatis.servlet.Imp;

import jakarta.annotation.Resource;
import org.example.mybatis.Mapper.UserMapper;
import org.example.mybatis.entity.UserEntity;
import org.example.mybatis.servlet.UserServlet;
import org.springframework.stereotype.Service;

@Service
public class userServletImp implements UserServlet {

    @Resource
    UserMapper userMapper;

    @Override
    public UserEntity UserByName(String username) {
        return userMapper.UserByName(username);
    }
}

第六步:创建控制类

@RestController
@RequestMapping("/user")
public class user {

    @Autowired
    UserServlet userServlet;

    @GetMapping("/username")
    public String UserName(){
        UserEntity user = userServlet.UserByName("user");
        return "打印成功" + user;
    }
}

第七步:注册Mapper,在启动类中添加

@SpringBootApplication
@MapperScan(basePackages = "org.example.mybatis.Mapper")
public class MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }
}

mapper层路径,不需要具体到每个文件

第八步:运行!!!!!!!!!!!

然后我们就会报错

Invalid bound statement (not found): org.example.mybatis.Mapper.UserMapper.UserByName

我很讨厌这个报错,但是我知道这个报错是因为什么

是因为你的xml文件和javaMapper层没有对接成功,在SpringBoot这里多半是因为路径写错了

所以我们需要在配置文件中添加这么一句,让SpringBoot在启动的时自动扫描

classpath会自动扫描resource里的文件,然后我们只需要将以*.xml的形式全部导入,再运行

成功

这个报错我找了半天,最后也算是知道它为什么报错了

作者通过对

mapper-locations的认识

发现了问题所在,因为文件路径不一样导致的XML无法对接javaMApper

我们要确保Mapper的路径和Mapper.xml路径完全相同,包括名字

这个报错,妥妥的恶性报错

总结:想要避免

Invalid bound statement (not found):xxxx

第一个方法:保证Mapper路径和xml路径完全相同

第二个方法:通过yaml配置mapper-locations: classpath:xx/xxxx/mapper/*.xml