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

前言:

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

正片

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

简单介绍一下Mybatis是什么?

一款java连接数据库的框架

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

分为三块区域

第一区:java区

第二区:mybatis区

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

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

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

mybaits如何发挥作用的

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

基础依赖:spring web

核心依赖:Mybatis Farmework,Mysql Driver

辅助依赖:Lombok

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

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

XML 复制代码
#优化版
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模板

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

java 复制代码
package org.example.mybatis.entity;

import lombok.Data;

@Data
public class UserEntity {

    String username;
    String password;
}

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

java 复制代码
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 复制代码
<?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>
java 复制代码
<?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模板中的业务层

java 复制代码
package org.example.mybatis.servlet;

import org.example.mybatis.entity.UserEntity;

public interface UserServlet {

    UserEntity UserByName(String username);

}

第五步:创建业务实现

java 复制代码
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);
    }
}

第六步:创建控制类

java 复制代码
@RestController
@RequestMapping("/user")
public class user {

    @Autowired
    UserServlet userServlet;

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

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

java 复制代码
@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

相关推荐
6190083363 分钟前
linux 安装jdk
java·linux·运维
懂得节能嘛.6 分钟前
【动态配置中心】Java+Redis构建动态配置中心
java·开发语言·redis
专注于大数据技术栈7 分钟前
Java中JDK、JRE、JVM概念
java·开发语言·jvm
YuanlongWang11 分钟前
C# 基础——值类型与引用类型的本质区别
java·jvm·c#
Kay_Liang36 分钟前
大语言模型如何精准调用函数—— Function Calling 系统笔记
java·大数据·spring boot·笔记·ai·langchain·tools
自由的疯1 小时前
Java 如何学习Docker
java·后端·架构
自由的疯1 小时前
Java Docker本地部署
java·后端·架构
007php0071 小时前
猿辅导Java面试真实经历与深度总结(二)
java·开发语言·python·计算机网络·面试·职场和发展·golang
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商机制 笔记34
java·spring boot·笔记·缓存
一勺菠萝丶1 小时前
在 macOS 上用 Docker 为 Java 后端 & 常见开发需求搭建完整服务(详尽教程)
java·macos·docker