springboot使用Mybatis(xml和注解)过程全解析

以下是对"springboot使用Mybatis(xml和注解)过程全解析"的详细讲解:

一、前言

Mybatis是一款优秀的基于Java的持久化框架,它拥有非常高灵活性,除了能够适配各种传统的数据库,还能够适应各种数据源甚至于比较小众的数据存储方式。而SpringBoot则是近些年最火热的Web框架之一,它的主打特点在于快速集成,可以让Java项目开发人员更加专注于业务开发而将底层框架的细节和繁琐配置让SpringBoot帮忙处理。

这份攻略旨在让初学者通过简明易懂的方式了解如何使用Mybatis来完成数据库的操作,同时,结合SpringBoot特点给出一些方便易用的解决方案。

二、环境搭建

  • 开发工具:IntelliJ IDEA
  • SpringBoot版本:2.xx
  • Mybatis版本:3.xx
  • 数据库:MySQL

在开始之前,建议事先创建好数据库表,并配置好数据库的连接信息。

  1. 使用SpringBoot的Initializr来创建一个项目
  2. 在项目的pom.xml引入以下依赖:
<!--引入Spring相关依赖-->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--引入MyBatis相关依赖-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>

    <!--引入数据库连接池相关依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!--引入测试相关依赖-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
  1. 配置数据源和MyBatis的基本信息
# 数据源配置
spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver

# MyBatis 配置
mybatis.mapper-locations=classpath:mapper/*.xml # xml文件存放路径,可以不需要
mybatis.type-aliases-package=com.example.demo.entity # 实体类所在包路径
  1. 配置Mapper扫描路径

在启动类中增加如下配置:

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

在本例中,mapper接口存放的陆地为com.example.demo.mapper,这里的注解就是告诉SpringBoot将这个包下与Mapper有关的bean的注入交给Mybatis来处理。

三、使用Mybatis注解方式完成数据库查询

Mybatis的注解方式相较于XML方式,更加简洁,易于使用,也比较容易理解。

以查询user表中userId=1的所有数据为例,我们可以这样做:

  1. 先创建一个UserMapper接口,并在里面定义一个查询操作方法:
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {

    /**
     * 查询所有用户信息
     * @return
     */
    @Select("SELECT * FROM user WHERE userId = 1")
    List<User> selectUserByUserId();
}
  1. 在UserMapper所在包路径下,创建一个User类来封装查询之后获得的数据:
public class User {
    private Integer userId;
    private String userName;
    private Integer userAge;
    private Integer userGender;
    //省略setter和getter方法
}
  1. 在controller层调用Mapper中的方法并返回结果
@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

    @GetMapping("/user")
    public List<User> getUser() {
        return userMapper.selectUserByUserId();
    }
}

完成上述步骤之后,启动应用,访问地址http://localhost:8080/user,可以成功从数据库中查询到相应的数据并返回。

四、使用Mybatis xml方式完成数据库操作

Mybatis最早版本的持久化方法是使用xml的方式定义SQL语句,这种方式相较于注解方式,更加稳定,适用于复杂场景。

还是以User表为例,查询所有数据,我们可以这样做:

  1. 在resources目录下创建一个文件夹mapper,并创建UserMapper.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="com.example.demo.mapper.UserMapper">
    <select id="selectUserAll" resultType="com.example.demo.entity.User">
        SELECT * FROM user
    </select>
</mapper>
  1. 修改UserMapper接口,并将操作方法对应的SQL语句定义在xml文件中:
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {

    /**
     * 查询所有用户信息
     * @return
     */
    List<User> selectUserAll();
}
  1. 在application.properties中增加mapper文件的相对路径:
# mybatis相关配置
mybatis.mapper-locations=classpath:mapper/*.xml
  1. 在controller层调用Mapper中的方法并返回结果
@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

    @GetMapping("/user")
    public List<User> getUserAll() {
        return userMapper.selectUserAll();
    }
}

这里需要注意,因为UserMapper中包含了两种定义方式,我们将查询所有数据的方法名修改了一下,以保证不与之前冲突。

完成上述步骤之后,启动应用,访问地址http://localhost:8080/user,即可成功从数据库中查询到所有数据并返回。

五、总结

Mybatis作为持久层框架之一,具有非常广泛的使用场景。SpringBoot则是当前最受欢迎的Java Web框架之一,它能够让我们更加专注于项目的业务逻辑,而将底层框架的细节看作是自己代码中的一部分。结合二者的优势,我们能够快速开发出健壮、高性能的Web应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot使用Mybatis(xml和注解)过程全解析 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • dnf2014盛世狂欢称号礼盒有什么奖励?怎么获得?

    DNF2014盛世狂欢称号礼盒奖励及获取攻略 DNF2014盛世狂欢称号礼盒是DNF游戏中的一种礼盒,其中包含了多种奖励,以下是详细的攻略: 礼盒奖励 DNF2014盛世狂欢称号礼盒包含以下奖励: 狂欢称号:获得狂欢称号,可增加角色属性。 狂欢头像:获得狂欢头像,可在游戏中展示。 狂欢表情:获得狂欢表情,可在游戏中使用。 狂欢背景:获得狂欢背景,可在游戏中使…

    html 2023年5月17日
    00
  • Flash怎么使用代码绘制矩形和椭圆?

    Flash怎么使用代码绘制矩形和椭圆? 在Flash中,您可以使用ActionScript 3.0代码绘制矩形和椭圆。以下是关于如何使用代码绘制矩形和椭圆的攻略,包括以下几个步骤: 步骤1:创建新的Flash文件 在使用代码绘制矩形和椭圆之前,您需要创建一个新的Flash文件。以下是创建新的Flash文件的步骤: 打开Flash软件。 单击“文件”菜单。 选…

    html 2023年5月17日
    00
  • HTML5 常用语法一览(列举不支持的属性)

    HTML5常用语法一览 概述 HTML5是一种基于XML的标记语言,用于创建和呈现结构化内容在互联网上的网页。本文将列举HTML5中常用的语法和不支持的属性。 常用语法 文档声明 HTML5文档申明如下: <!DOCTYPE html> 标题 HTML5中,标题通过<h1>~<h6>标签表示: <h1>这是HT…

    html 2023年5月30日
    00
  • Java日志框架之logback使用详解

    Java日志框架之logback使用详解 1. 什么是logback logback是一个优秀的Java日志框架,是log4j框架的继任者,具有与log4j相同的特性,通用性广、性能高、配置简单等优点,是目前Java项目中最常用的日志框架之一。 2. logback的基本使用方式 2.1 引入依赖 使用logback框架首先需要引入相应的依赖,通常情况下我们…

    html 2023年5月30日
    00
  • HTML嵌入CSS样式(四种方法)

    HTML嵌入CSS样式的方法有以下四种: style标签嵌入CSS样式 在HTML文档的头部或body部分中通过style标签嵌入CSS样式。可以在style标签中添加任意数量的CSS样式规则。 代码示例: <!DOCTYPE html> <html> <head> <title>HTML嵌入CSS样式示例&l…

    Web开发基础 2023年3月15日
    00
  • Android XML数据的三种解析方式

    Android XML数据的三种解析方式 XML简介 XML(Extended Markup Language),是一种用于传输与存储数据的标记语言。它类似于 HTML,但 XML 的设计宗旨是传输数据,而非展示数据。由于其语义明确、结构清晰,被广泛运用于各种编程语言中,逐渐成为了数据传输和存储的重要手段。 在 Android 开发中,XML 作为 Andr…

    html 2023年5月30日
    00
  • PHP aes (ecb)解密后乱码问题

    以下是 “PHP aes(ecb)解密后乱码问题”的完整攻略。 首先梳理问题 “PHP aes(ecb)解密后乱码问题” 是指,在使用 PHP 进行 aes-ecb 解密时,解密出来的数据出现乱码的问题。 排查问题原因 检查密钥是否正确。 aes 解密需要密钥,如果密钥错误,会导致解密后的数据与原数据不同,从而出现乱码。 检查解密模式是否正确。 aes 有多…

    html 2023年5月31日
    00
  • vscode怎么导入图片? vscode把图片放进程序的技巧

    以下是关于VSCode导入图片的详细攻略: VSCode如何导入图片? 在VSCode中打开您的项目文件夹。 在项目文件夹中创建一个名为“images”的文件夹,用于存放您的图片。 将您的图片文件拖放到“images”文件夹中。 在您的HTML或CSS文件中,使用相对路径引用您的图片文件。例如,如果您的图片文件名为“example.jpg”,则可以使用以下代…

    html 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部