从0开始学习项目开发-DAY5-MYBATIS实现数据库查询

从0开始学习项目开发-DAY5-MYBATIS实现数据库查询

精选文章moguli202025-05-02 18:31:566A+A-

1、前言

记录从零基础学习编写 SpringBoot 项目的笔记,以防遗忘时可回溯温习。此文乃是笔者在开展从无到有编写 SpringBoot 项目的学习进程中所留存的笔记,同时涵盖了记录期间遭遇的部分问题及其解决之法,亦包含了些许个人的思考与见解。

2、MYBATIS实现数据库查询

在Spring Boot中使用MyBatis进行数据库操作是一种非常常见且高效的方式。MyBatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。

功能描述

通过接口上传phoneNum,从phone_area表查询数据运营商和归属地信息。

创建phone_area表

CREATE TABLE phone_area (
    id INT AUTO_INCREMENT PRIMARY KEY,
    phone_num VARCHAR(11) NOT NULL,
    phone_area VARCHAR(200) NOT NULL,
    phone_operator VARCHAR(20) NOT NULL
);

添加依赖项

在Spring Boot项目的pom.xml文件中添加MyBatis和数据库相关的依赖。

<!-- MyBatis Spring Boot Starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
    <scope>runtime</scope>
</dependency>

配置application.properties

在application.properties中添加数据库连接配置和mybatis相关配置。

spring.datasource.url=jdbc:mysql://localhost:3306/juziTemplate?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=admin123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.type-aliases-package=com.test.juzi.model
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true

创建实体类

package com.test.juzi.model;

public class PhoneArea {
    private int id;
    private String phoneNum;
    private String phoneArea;
    private String phoneOperator;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }

    public String getPhoneArea() {
        return phoneArea;
    }

    public void setPhoneArea(String phoneArea) {
        this.phoneArea = phoneArea;
    }

    public String getPhoneOperator() {
        return phoneOperator;
    }

    public void setPhoneOperator(String phoneOperator) {
        this.phoneOperator = phoneOperator;
    }
}

创建Mapper接口

@Mapper
public interface PhoneAreaMapper {
    PhoneArea getPhoneArea(@Param("phoneNum") String phoneNum);
}

创建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="com.test.juzi.mapper.PhoneAreaMapper">
    <select id="getPhoneArea" resultType="com.test.juzi.model.PhoneArea">
        SELECT * FROM phone_area where phone_num= #{phoneNum};
    </select>
</mapper>

测试结果


过程中遇到的问题

问题1:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

解决方案:Mapper interface和xml文件的定义对应不上(需要检查包名,namespace)

问题2:Invalid bean definition with name ‘userMapper‘ defined in file

解决方案:mybatis版本问题,spring-boot使用的是3.3.10版本,mybatis使用的为2.2.0版本。替换为3.0.3版本解决。

问题3: mybatis 数据库表字段和mapper字段不一致,例如:数据库为phone_num,mapper字段定义为phoneNum

解决方案:增加mybatis配置,支持phone_num转换为驼峰形式

mybatis.configuration.map-underscore-to-camel-case=true



点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2