自学内容网 自学内容网

MyBatis-Plus快速上手

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

软件测试专栏:软件测试

关注博主带你了解更多知识

目录

1. MyBatis-Plus介绍

2. 快速上⼿

2.1 添加MyBatis-Plus和MySQL依赖,配置数据库连接信息

2.2 编码

创建实体类UserInfo

编写Mapper接⼝类

2.3 常⻅注解

@TableName

 @TableField

@TableId

2.4 打印⽇志

3. MyBatis-Plus复杂操作

条件构造器

3.1 QueryWrapper

3.2 UpdateWrapper

1. MyBatis-Plus介绍

MyBatis-Plus是⼀个 MyBatis 的增强⼯具, 在 MyBatis 的基础上只做增强不做改变, 为简化开发. 提⾼效率⽽⽣

⽀持数据库:

PostgreSQL, MySQL, MariaDB, Oracle, SQL Server, OceanBase, H2, DB2... 任何能使⽤MyBatis进⾏增删改查,并且⽀持标准SQL的数据库应该都在MyBatis-Plus的⽀持范围

2. 快速上⼿

2.1 添加MyBatis-Plus和MySQL依赖,配置数据库连接信息

Spring Boot

 <dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
 <version>3.5.5</version>
 </dependency>

MySQL 

 <dependency>
 <groupId>com.mysql</groupId>
 <artifactId>mysql-connector-j</artifactId>
 <scope>runtime</scope>
 </dependency>

配置连接数据库

application.yml⽂件

 # 数据库连接配置
 
spring:
 datasource:
 url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
 characterEncoding=utf8&useSSL=false
 username: root
 password: root
 driver-class-name: com.mysql.cj.jdbc.Drive

2.2 编码

MybatisPlus提供了⼀个基础的 BaseMapper 接⼝,已经实现了单表的CRUD,我们⾃定义的 Mapper只需要继承这个BaseMapper,就⽆需⾃⼰实现单表CRUD

创建实体类UserInfo

实 体类的属性名与表中的字段名⼀⼀对应

编写Mapper接⼝类

2.3 常⻅注解

MyBatis是如何知道,我们要操作的是哪张表,表⾥有哪些字段呢?

@Mapper
public interface UserinfoMapper extends BaseMapper<UserInfo> {


}

 

UserInfoMapper 在继承 BaseMapper 时,指定了⼀个泛型,这个UserInfo就是与数据库表相对应的实

MyBatis-Plus会根据这个实体类来推断表的信息.

默认情况下:

1. 表名:实体类的驼峰表⽰法转换成蛇形表⽰法(下划线分割),作为表名.⽐如UserInfo->user_info

2. 字段:根据实体类的属性名转换为蛇形表⽰法作为字段名.⽐如deleteFlag->delete_flag 

3. 主键:默认为id

那如果实体类和数据库不是按照上述规则定义的呢?MyBatis-Plus也给我们提供了⼀下注解,让我们标 识表的信息 

@TableName

从⽇志可以看到,默认查找的表名为userinfo. 

我们可以通过 @TableName 来标识实体类对应的表

修改实体类名Userinfo为user_info,重新执⾏测试⽅法

@Data

@TableName("user_info")
public class Userinfo {
 private Integer id;
 private String username;
 private String password;
 private Integer age;
 private Integer gender;
 private String phone;
 private Integer deleteFlag;
 private Date createTime;
 private Date updateTime;
}

 @TableField

我们可以通过 @TableField 来标识对应的字段名 

修改属性名deleteflag为delete_flag,重新执⾏测试⽅法

@Data
@TableName("user_info")

public class Userinfo {
 private Integer id;
 private String username;
 private String password;
 private Integer age;
 private Integer gender;
 private String phone;

 @TableField("delete_flag")
 private Integer deleteflag;
 private Date createTime;
 private Date updateTime;
}

@TableId

我们可以通过 @TableId 来指定对应的主键

修改属性名userId为id

@Data

@TableName("user_info")
public class Userinfo {

 @TableId("id")
 private Integer userId;
 private String username;
 private String password;
 private Integer age;
 private Integer gender;
 private String phone;

再次运⾏程序,程序运⾏结果正常

2.4 打印⽇志

Mybatis-Plus配置⽇志如下:

mybatis-plus:
 configuration: # 配置打印 MyBatis⽇志 
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3. MyBatis-Plus复杂操作

条件构造器

QueryWrapper:⽤于构造查询条件,在AbstractWrapper的基础上拓展了⼀个select⽅法,允许指 定查询字段

UpdateWrapper:⽤于构造更新条件,可以在更新数据时指定条件

3.1 QueryWrapper

QueryWrapper并不只⽤于查询语句,⽆论是修改,删除,查询,都可以使⽤QueryWrapper来构建查询条件.

如何完成如下sql语句查询呢

SELECT id,username,password,age FROM user_info WHERE age = 18 AND username 
"%min%"

测试如下:

    @Autowired
    private UserinfoMapper userinfoMapper;

    @Test
    void SelectByWrapper(){
        QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("username","password","gender")
                        .eq("age",18)
                        .like("username","min");
        userinfoMapper.selectList(queryWrapper).forEach(System.out::println);
    }

 

lt :"less than" 的缩写,表⽰⼩于.

le :"lessthanorequalto"的缩写,表⽰⼩于等于

ge :"greaterthanorequalto"的缩写,表⽰⼤于等于.

gt :"greaterthan"的缩写,表⽰⼤于.

eq :"equals"的缩写,表⽰等于.

ne :"notequals"的缩写,表⽰不等于 

3.2 UpdateWrapper

对于更新,我们也可以直接使⽤UpdateWrapper,在不创建实体对象的情况下,直接设置更新字段和条 件

完成下列sql修改

 UPDATE user_info SET delete_flag=0, age=5 WHERE id IN (2,3)
 @Test
    void updateByWrapper() {
        UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<>();
        updateWrapper.set("delete_flag",0).set("age",5).in("id", List.of(2,3));
        userinfoMapper.update(updateWrapper);
    }


原文地址:https://blog.csdn.net/jj666mhhh/article/details/143794110

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!