继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

MyBatis Plus项目实战:快速入门与初级应用

斯蒂芬大帝
关注TA
已关注
手记 230
粉丝 7
获赞 21
概述

本文将详细介绍如何在实际项目中使用MyBatis Plus进行数据库操作,包括快速搭建开发环境、基本的CRUD操作、条件构造器的使用、分页插件配置以及多数据源的支持,帮助你全面掌握MyBatis Plus项目实战。

MyBatis Plus简介
MyBatis Plus是什么

MyBatis Plus是一个MyBatis的增强工具,旨在简化MyBatis的开发过程。它提供了一系列简单易用的扩展方法,使得开发人员可以更高效地进行数据库操作。MyBatis Plus基于MyBatis的核心功能,对数据库的相关操作进行了封装,简化了开发者的操作流程,同时增加了许多便捷的功能,如条件构造器、分页插件等。它支持单表操作,同时支持多数据源配置,使得应用更加灵活。

MyBatis Plus的优势

MyBatis Plus相比MyBatis,主要优势体现在以下几个方面:

  1. 快速开发:MyBatis Plus提供了一系列的CRUD方法,简化了开发流程,使得开发者可以专注于业务逻辑的实现,而无需过多关注底层的数据库操作细节。
  2. 简化操作:MyBatis Plus提供了一系列的链式调用方法,使得数据库的查询、插入、更新和删除等操作变得简单且直观。例如,通过saveupdateById方法,可以直接对数据库中的记录进行增删改操作。
  3. 强大的条件构造器:MyBatis Plus提供了一个强大的条件构造器,可以方便地构造复杂的查询条件,支持链式调用,简化了复杂的SQL查询。
  4. 分页插件:MyBatis Plus内置了分页插件,支持自定义分页策略,简化了分页查询的操作,提高了开发效率。
  5. 多数据源支持:MyBatis Plus支持多数据源配置,可以灵活配置不同的数据源,满足复杂的项目需求。
环境搭建
开发环境准备

在开始使用MyBatis Plus之前,需要准备开发环境和相关配置。以下是开发环境的基本要求:

  • Java开发环境:确保已安装Java开发环境,Java版本建议使用Java 8及以上版本。
  • IDE:推荐使用IntelliJ IDEA或Eclipse等IDE,这些IDE提供了便捷的开发功能,如代码补全、调试等。
  • 数据库:安装并配置MySQL数据库,版本建议使用MySQL 5.7及以上。
  • Maven:Maven是Java项目的构建工具,用于管理项目依赖及构建流程。
Maven依赖配置

在项目的pom.xml文件中添加MyBatis Plus的相关依赖,示例如下:

<dependencies>
    <!-- Spring Boot Starter Data MyBatis -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>
    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
数据库连接配置

application.ymlapplication.properties文件中配置数据库连接信息,示例如下:

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mybatis_plus_db?useUnicode=true&characterEncoding=utf8&useSSL=false
    driver-class-name: com.mysql.cj.jdbc.Driver
实战第一步:基本CRUD操作
创建实体类

在项目中创建实体类,例如一个User实体类,定义idname两个属性,以及相应的getter和setter方法,示例如下:

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
创建Mapper接口

在项目中创建对应实体类的Mapper接口,示例如下:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
}
基本的增删改查操作

接下来,通过Mapper接口实现对数据库的基本CRUD操作。下面展示一些示例代码:

插入数据

插入一条新的用户记录:

User user = new User();
user.setName("John Doe");
user.setAge(30);
userMapper.insert(user);

查询数据

查询用户记录:

// 根据id查询用户
User user = userMapper.selectById(1L);

// 查询所有用户
List<User> users = userMapper.selectList(null);

更新数据

更新用户记录:

User user = new User();
user.setId(1L);
user.setName("Jane Doe");
user.setAge(25);
userMapper.updateById(user);

删除数据

删除用户记录:

userMapper.deleteById(1L);
实战第二步:条件构造器使用
条件构造器基本用法

MyBatis Plus提供了一个强大的条件构造器QueryWrapper,可以方便地构建复杂的查询条件。以下是一些基本示例:

简单查询

查询所有用户:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
List<User> users = userMapper.selectList(queryWrapper);

按条件查询

查询年龄大于30岁的用户:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 30);
List<User> users = userMapper.selectList(queryWrapper);

复杂查询条件构建

动态构建查询条件:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John Doe").and(wrapper -> 
    wrapper.gt("age", 30).or().lt("age", 18)
);
List<User> users = userMapper.selectList(queryWrapper);
实战第三步:分页插件与自定义SQL
分页插件配置与使用

MyBatis Plus内置了分页插件,支持自定义分页策略。以下是配置和使用示例:

分页插件配置

application.ymlapplication.properties中配置分页插件:

mybatis-plus:
  pagination:
    enabled: true

分页查询

进行分页查询:

Page<User> page = new Page<>(1, 10); // 从第一页开始,每页10条记录
IPage<User> users = userMapper.selectPage(page, null);
long total = users.getTotal(); // 获取总记录数
List<User> records = users.getRecords(); // 获取当前页的记录列表
手动编写与执行自定义SQL

MyBatis Plus支持自定义SQL语句的执行,以下是示例代码:

创建自定义SQL

定义自定义的SQL:

public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT * FROM user WHERE age > #{age}")
    List<User> selectByAge(@Param("age") int age);
}

执行自定义SQL

执行自定义的SQL查询:

List<User> users = userMapper.selectByAge(30);
实战第四步:MyBatis Plus多数据源配置
多数据源配置详解

MyBatis Plus支持多数据源配置,可以灵活配置不同的数据源。以下是配置示例:

application.yml配置多个数据源

spring:
  multiple-datasources:
    datasource1:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/db1
      username: root
      password: 123456
    datasource2:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/db2
      username: root
      password: 123456

配置多数据源的MyBatis Plus

@Configuration
public class DataSourceConfig {
    @Bean(name = "ds1")
    @ConfigurationProperties(prefix = "spring.multiple-datasources.datasource1")
    public DataSource ds1() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "ds2")
    @ConfigurationProperties(prefix = "spring.multiple-datasources.datasource2")
    public DataSource ds2() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "masterSqlSessionFactory")
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("ds1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("ds2") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean
    public AbstractRoutingDataSource routingDataSource() {
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        dynamicDataSource.setMasterDataSource(masterSqlSessionFactory().getConfiguration().getDataSource());
        dynamicDataSource.setTargetDataSources(createDataSourceMap());
        return dynamicDataSource;
    }

    private Map<Object, Object> createDataSourceMap() {
        Map<Object, Object> map = new HashMap<>();
        map.put("ds1", masterSqlSessionFactory().getConfiguration().getDataSource());
        map.put("ds2", slaveSqlSessionFactory().getConfiguration().getDataSource());
        return map;
    }
}
多数据源环境下MyBatis Plus的使用

在多数据源环境下使用MyBatis Plus,需要配置动态数据源,并在Mapper接口中指定数据源。以下是示例代码:

动态选择数据源

定义一个动态选择数据源的类:

public class DynamicDataSourceContextHolder {
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();

    public static void setDataSourceType(String dataSourceType) {
        contextHolder.set(dataSourceType);
    }

    public static String getDataSourceType() {
        return contextHolder.get();
    }

    public static void clearDataSourceType() {
        contextHolder.remove();
    }
}

使用动态数据源的Mapper

在Mapper接口中指定数据源:

public interface UserMapper extends BaseMapper<User> {
    @DataSource("ds1")
    List<User> selectFromDs1(@Param("name") String name);
}

查询指定数据源的数据

执行查询操作时指定数据源:


DynamicDataSourceContextHolder.setDataSourceType("ds1");
List<User> users = userMapper.selectFromDs1("John Doe");
DynamicDataSourceContextHolder.clearDataSourceType();
``

通过以上步骤,可以在多数据源环境下灵活使用MyBatis Plus,提高应用的灵活性和可扩展性。
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP