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

yizhihongxing

以下是对"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日

相关文章

  • CentOS8出现-bash:乱码问题及解决方法

    当在CentOS 8系统中使用终端时,可能会出现命令行界面的乱码问题,这是由于系统默认的字符集不匹配所导致的。这个问题可以通过设置正确的字符集来解决。 以下是解决这个问题的详细步骤: 问题描述 当在终端中输入命令时,可能会看到一些奇奇怪怪的字符,例如: $ -bash: ls: 未找到命令 或者 $ -bash: \nn: 未找到命令 这个问题可能会导致命令…

    html 2023年5月31日
    00
  • python中urllib.unquote乱码的原因与解决方法

    下面我将详细讲解“Python 中 urllib.unquote 乱码的原因与解决方法”的攻略。 问题描述 在 Python 中使用 urllib.unquote 对 URL 解码时,有时会出现乱码的问题,如下所示: import urllib url = ‘https://www.example.com/%E6%88%91%E6%98%AF%E4%B8%A…

    html 2023年5月31日
    00
  • 详解Android studio实现语音转文字功能

    详解Android studio实现语音转文字功能 当今,语音转文字已经成为很多App的基础功能之一。本篇攻略将为大家介绍如何使用Android Studio实现此功能。 Step 1.配置环境依赖 在做任何事之前,我们需要为我们的工程添加依赖关系。在 build.gradle 文件中加入以下代码,引入 com.google.cloud:google-clo…

    html 2023年5月31日
    00
  • 华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧

    以下是“华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧”的完整攻略: 华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧 华为一镜到底是一款非常受欢迎的相机应用,它可以实现一镜到底的效果,让用户可以轻松拍摄高质量的照片。以下是关于华为一镜到底支持机型和主题设置技巧的详细攻略。 华为一镜到底支持机型 华为一镜到底支持的机型如下: 华为P30 Pro…

    html 2023年5月18日
    00
  • 利用ascii码传输xml转义字符示例

    利用ASCII码传输XML转义字符是一种常见的网络编程技巧,可以在XML文本中传输一些特殊的字符。本攻略将介绍如何使用ASCII码传输XML转义字符,下面是详细的步骤: 前置条件 为了理解本攻略,您需要对以下概念有一些了解: ASCII码 XML中的转义字符 步骤 步骤一:选择需要传输的转义字符 在XML中,有一些字符需要使用转义字符来表示。例如,<需…

    html 2023年5月30日
    00
  • win10修改hosts文件需要管理员权限怎么办

    Win10修改hosts文件需要管理员权限怎么办? 在Windows 10中,如果您想修改hosts文件,您需要以管理员身份运行文本编辑器。以下是关于如何以管理员身份运行文本编辑器并修改hosts文件的攻略,包括以下几个步骤: 步骤1:打开文本编辑器 首先,您需要打开文本编辑器,例如记事本或Notepad++。 步骤2:以管理员身份运行文本编辑器 在打开文本…

    html 2023年5月17日
    00
  • HTML name、id、class 的(格式/应用场景/特性)等区别介绍

    接下来是关于HTML name、id、class 的区别介绍。 HTML name、id、class 的格式 name name 属性需要在被命名的 HTML 元素中定义,其语法格式为: <tag name="value">…</tag> 其中,tag 为标签名,name 为属性名,value 为属性值。 id…

    html 2023年5月30日
    00
  • JSP开发导引

    JSP开发导引 JSP(Java Server Pages)是一种动态网页技术,使用JSP技术可以生成动态网页。下面是JSP开发的完整攻略: 步骤1:安装和配置Java环境 JSP需要在Java环境下运行,因此需要安装Java并配置Java环境变量。安装Java请参考官方文档。 步骤2:选择JSP开发工具 选择一款适合自己的JSP开发工具,常见的有Eclip…

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