第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

MyBatis Plus資料:新手入門教程與實(shí)用指南

概述

本文全面介绍了MyBatis Plus资料,包括其功能、优势以及与MyBatis的区别。文章详细讲解了MyBatis Plus的快速开始、基础操作和高级功能,并提供了实战案例分享。通过本文,读者可以深入了解并掌握MyBatis Plus的使用方法。

MyBatis Plus简介

MyBatis Plus是什么

MyBatis Plus 是一款基于 MyBatis 的增强工具,旨在简化开发、提升效率。它提供了一系列开箱即用的功能,如分页、动态 SQL 构造、逻辑删除、自动填充等。MyBatis Plus 通过继承 MyBatis 的基本功能,添加了许多便捷的方法来处理数据库操作,使得开发者可以更专注于业务逻辑的实现,而无需过多关注底层数据库操作的细节。

MyBatis Plus与MyBatis的区别

MyBatis 和 MyBatis Plus 都是用于数据库操作的框架,但它们在设计和使用上有所不同:

  • MyBatis:MyBatis 是一个持久层框架,提供了一种动态地生成 SQL 语句的方式,通过 XML 映射文件或注解来定义 SQL 语句的执行。开发者需要手动编写 SQL 语句和相应的 XML 映射文件,或者使用注解来配置 SQL 语句。

  • MyBatis Plus:MyBatis Plus 是 MyBatis 的增强工具,它在 MyBatis 的基础上提供了更多的便捷方法和功能。例如,MyBatis Plus 提供了针对 CRUD 操作的简化方法,支持自动生成 SQL 语句,简化了分页操作,并提供了一些高级功能,如自动填充、逻辑删除等。

MyBatis Plus的核心优势

MyBatis Plus 的核心优势在于其提供的便捷方法和功能,使得数据库操作更加简化和高效。以下是 MyBatis Plus 的一些核心优势:

  • 简化 CRUD 操作:MyBatis Plus 提供了便捷的方法来执行 CRUD(创建、读取、更新、删除)操作,例如 saveupdatedelete 等方法,使得操作数据库更加简单。

  • 分页支持:MyBatis Plus 自带分页插件,支持多种分页方式,如 MyBatis 的 RowBounds、Spring Data 的 PageHelper 等,简化了分页操作。

  • 动态 SQL 构造:MyBatis Plus 提供了条件构造器 QueryWrapperUpdateWrapper,可以动态构建 SQL 语句,使得查询和更新操作更加灵活。

  • 逻辑删除:MyBatis Plus 支持逻辑删除,可以通过配置来实现数据的软删除,避免了物理删除操作对数据完整性的破坏。

  • 自动填充:MyBatis Plus 支持自动填充字段的功能,可以自动填充创建时间和更新时间等字段,减轻了开发者的负担。

  • 数据库字段映射:MyBatis Plus 支持数据库字段与实体类字段之间的映射,简化了数据库表与实体类之间的映射关系。

  • 插件支持:MyBatis Plus 提供了插件机制,允许开发者自定义插件来扩展框架的功能,满足特定业务需求。
快速开始

环境搭建与依赖配置

在开始使用 MyBatis Plus 之前,需要搭建开发环境并配置相关依赖。这里以 Maven 项目为例,展示如何在项目中引入 MyBatis Plus 的依赖。

  1. 创建 Maven 项目:首先创建一个新的 Maven 项目。可以通过 IntelliJ IDEA 或 Eclipse 等 IDE 创建。
  2. 配置 pom.xml 文件:在 pom.xml 文件中添加 MyBatis Plus 的依赖。以下是一个示例配置:
<dependencies>
    <!-- MyBatis Plus 依赖 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.2</version>
    </dependency>
    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
    <!-- Spring Boot Starter JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>
  1. 配置数据库连接:在 application.properties 文件中配置数据库连接信息,例如:
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

创建MyBatis Plus的Entity类

在 MyBatis Plus 中,实体类主要用于映射数据库表中的数据。以下是创建一个简单的实体类 User 的示例:

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

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

    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;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

在这个示例中,使用了 @TableName 注解来指定与实体类对应的数据库表名,以及 @TableId 注解来指定主键字段。

编写Mapper接口与配置

在 MyBatis Plus 中,Mapper 接口用于定义数据库操作的方法。以下是创建一个简单的 Mapper 接口 UserMapper 的示例:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;

public interface UserMapper extends BaseMapper<User> {
}

在上述代码中,UserMapper 继承了 BaseMapper 接口,BaseMapper 接口中定义了一些基本的 CRUD 操作方法,例如 insertupdatedelete 等,这些方法可以自动映射到对应的 SQL 语句。

基础操作详解

CRUD操作简介

MyBatis Plus 提供了简单易用的方法来执行 CRUD 操作。以下是 CRUD 操作的简要介绍及示例代码:

读取操作(Select)

  • 查询单个记录:使用 selectById 方法查询单个记录。
User user = userMapper.selectById(1);
System.out.println(user.getName());
  • 查询多条记录:使用 selectList 方法查询多条记录。
List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("age", 20));
for (User user : users) {
    System.out.println(user.getName());
}

创建操作(Create)

  • 插入一条记录:使用 insert 方法插入一条记录。
User user = new User();
user.setName("张三");
user.setAge(20);
user.setEmail("zhangsan@example.com");
int result = userMapper.insert(user);
System.out.println(result); // 输出受影响的行数

更新操作(Update)

  • 更新单条记录:使用 update 方法更新单条记录。
User user = new User();
user.setId(1);
user.setName("李四");
user.setAge(25);
int result = userMapper.updateById(user);
System.out.println(result); // 输出受影响的行数
  • 更新多条记录:使用 update 方法和 QueryWrapper 更新多条记录。
User user = new User();
user.setAge(25);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");
int result = userMapper.update(user, queryWrapper);
System.out.println(result); // 输出受影响的行数

删除操作(Delete)

  • 删除单条记录:使用 deleteById 方法删除单条记录。
int result = userMapper.deleteById(1);
System.out.println(result); // 输出受影响的行数
  • 删除多条记录:使用 delete 方法和 QueryWrapper 删除多条记录。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");
int result = userMapper.delete(queryWrapper);
System.out.println(result); // 输出受影响的行数

分页查询

MyBatis Plus 提供了简单易用的分页功能,可以通过 Page 类来实现分页查询。以下是一个简单的分页查询代码示例:

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

Page<User> page = new Page<>(1, 5); // 设置当前页为 1,每页显示 5 条记录
IPage<User> result = userMapper.selectPage(page, new QueryWrapper<User>());
List<User> users = result.getRecords();
for (User user : users) {
    System.out.println(user.getName());
}
System.out.println("当前页:" + result.getCurrent());
System.out.println("每页条数:" + result.getSize());
System.out.println("总条数:" + result.getTotal());
System.out.println("总页数:" + result.getPages());

条件构造器使用

MyBatis Plus 提供了 QueryWrapperUpdateWrapper 两个条件构造器,用于构建动态的查询和更新条件。以下是一些常见的条件构造器用法示例:

简单条件

  • 等于:使用 eq 方法
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");
List<User> users = userMapper.selectList(queryWrapper);
  • 不等于:使用 ne 方法
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ne("age", 20);
List<User> users = userMapper.selectList(queryWrapper);
  • 大于:使用 gt 方法
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 20);
List<User> users = userMapper.selectList(queryWrapper);
  • 小于:使用 lt 方法
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 20);
List<User> users = userMapper.selectList(queryWrapper);

复杂条件

  • 链式调用:可以链式调用多个条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三").gt("age", 20);
List<User> users = userMapper.selectList(queryWrapper);
  • 逻辑连接:使用 andor 方法
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三").or().eq("email", "zhangsan@example.com");
List<User> users = userMapper.selectList(queryWrapper);
高级功能探索

自动填充与逻辑删除

自动生成填充和逻辑删除是 MyBatis Plus 提供的两个高级功能,可以大大简化数据库操作。

自动填充

  • 创建时间:自动填充创建时间字段
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.FieldFill;

@TableName("user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    // Getter 和 Setter 方法
}
  • 更新时间:自动填充更新时间字段
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;

@TableName("user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    // Getter 和 Setter 方法
}

逻辑删除

  • 配置逻辑删除字段
mybatis-plus.global-config.db-config.logic-delete-field-name="deleted"
  • 实体类配置逻辑删除
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableLogic;

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

    // Getter 和 Setter 方法
}

数据库字段映射与序列化

MyBatis Plus 支持数据库字段与实体类字段之间的映射,同时也支持字段的序列化。

字段映射

  • 字段注解
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;

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

    // Getter 和 Setter 方法
}

字段序列化

  • 序列化字段
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;

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

    // Getter 和 Setter 方法
}

插件开发与自定义逻辑

MyBatis Plus 提供了插件机制,允许开发者自定义插件来扩展框架的功能。

自定义插件

  • 实现插件接口
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;

public class MyPlugin implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 执行拦截逻辑
        return invocation.proceed();
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // 设置插件属性
    }
}
  • 配置插件
<bean id="myPlugin" class="com.example.demo.plugin.MyPlugin"/>
<bean id="mybatisPlusConfig" class="com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration">
    <property name="plugins" ref="myPlugin"/>
</bean>
实战案例分享

使用MyBatis Plus构建简单的CRUD应用

以下是一个简单的 CRUD 应用示例,展示了如何使用 MyBatis Plus 进行数据库操作。

创建实体类

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;
    private String email;

    // Getter 和 Setter 方法
}

创建 Mapper 接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;

public interface UserMapper extends BaseMapper<User> {
}

创建 Service 类

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;

public class UserService extends ServiceImpl<UserMapper, User> {
}

创建 Controller 类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping
    public void addUser(@RequestBody User user) {
        userService.save(user);
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getById(id);
    }

    @PutMapping("/{id}")
    public void updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        userService.updateById(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.removeById(id);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.list();
    }
}

配置应用主类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

MyBatis Plus与Spring Boot集成实例

以下是一个将 MyBatis Plus 与 Spring Boot 集成的实例,展示了如何在 Spring Boot 应用中使用 MyBatis Plus。

创建实体类

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;
    private String email;

    // Getter 和 Setter 方法
}

创建 Mapper 接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;

public interface UserMapper extends BaseMapper<User> {
}

创建 Service 类

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;

public class UserService extends ServiceImpl<UserMapper, User> {
}

创建 Controller 类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping
    public void addUser(@RequestBody User user) {
        userService.save(user);
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getById(id);
    }

    @PutMapping("/{id}")
    public void updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        userService.updateById(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.removeById(id);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.list();
    }
}

配置应用主类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
常见问题与解决

常见问题汇总

  • 连接数据库失败:检查 application.properties 文件中的数据库连接配置是否正确。
  • 找不到实体类对应的表名:检查实体类中是否正确使用了 @TableName 注解。
  • 找不到 Mapper 接口对应的实现类:检查 Mapper 接口是否继承了 BaseMapper 接口。
  • SQL 语句执行失败:检查 SQL 语句是否正确,可以通过 selectPage 方法的返回值来获取调试信息。
  • 分页查询结果为空:检查分页参数是否正确,可以通过控制台输出来查看 SQL 语句的执行情况。

常见错误及调试技巧

  • 异常:java.lang.ClassCastException
Caused by: java.lang.ClassCastException: com.baomidou.mybatisplus.extension.plugins.Page cannot be cast to com.baomidou.mybatisplus.core.metadata.IPage

解决方法:确保 Page 类型的变量转换为 IPage 类型的变量。

Page<User> page = new Page<>(1, 5);
IPage<User> result = userMapper.selectPage(page, new QueryWrapper<>());
  • 异常:java.lang.IllegalArgumentException
Caused by: java.lang.IllegalArgumentException: No writer for type: java.util.Date

解决方法:确保实体类中的字段类型与数据库表中的字段类型一致,或者使用序列化注解 @TableField(serializeName = "your_field_name")

@TableField(serializeName = "create_time")
private Date createTime;
  • 调试技巧

  • 使用 MyBatis 的日志功能:在 mybatis-plus 配置中启用日志功能,查看 SQL 语句的执行情况。
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  • 使用 IDE 的调试工具:通过设置断点和查看变量值,来调试代码的执行流程。
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消