MyBatis-Plus基本的使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MyBatis-Plus基本的使用

文章目录

简介

MyBatis-Plus 是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

1.快速开始

开发工具 IDEA, Springboot,数据库使用mysql.

1.1 创建一个表person

mysql> create database mybatisplus;

Query OK, 1 row affected (0.00 sec)

mysql> use mybatisplus;

Database changed

mysql> CREATE TABLE person

   -> (

   ->     id BIGINT(20) NOT NULL COMMENT '主键ID',

   ->     name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',

   ->     age INT(11) NULL DEFAULT NULL COMMENT '年龄',

   ->     email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',

   ->     PRIMARY KEY (id)

   -> );

Query OK, 0 rows affected (0.02 sec)

1.2 基础配置

引入依赖

<!--mysql数据库驱动 -->

   <dependency>

     <groupId>mysql</groupId>

     <artifactId>mysql-connector-java</artifactId>

   </dependency>

   <!--mybatis-plus-boot-starter-->

   <dependency>

     <groupId>com.baomidou</groupId>

     <artifactId>mybatis-plus-boot-starter</artifactId>

     <version>3.4.1</version>

   </dependency>

定义实体类,使用lombok注解

import lombok.Data;

@Data

public class Person {

   private Long id;

   private String name;

   private Integer age;

   private String email;

}

定义mapper

/**

* 定义mapper接口继承mybatis-plus提供的baseMapper

*/

@Mapper

public interface PersonMapper extends BaseMapper<Person> {

}

测试

@Autowired

   PersonMapper personMapper;

   /**

    * 测试新增

    */

   @Test

   public void TestInsert()

   {

       Person person = new Person();

       person.setId(1L);

       person.setName("elite");

       person.setAge(22);

       person.setEmail("elite@qq.com");

       int insert = personMapper.insert(person);

   }

   /**

    * 测试查询

    */

   @Test

   public void TestSelect()

   {

       Person person = personMapper.selectById(1L);

       System.out.println(person);

       //Person(id=1, name=elite, age=22, email=elite@qq.com)

   }

   /**

    * 测试更新

    */

   @Test

   public void TestUpdate()

   {

       Person person = new Person();

       person.setId(1L);

       person.setName("elite11");

       person.setAge(24);

       person.setEmail("elite11@qq.com");

       int updateCount = personMapper.updateById(person);

       System.out.println("updatedPerson:" + personMapper.selectById(1L));

       //updatedPerson:Person(id=1, name=elite11, age=24, email=elite11@qq.com)

   }

   /**

    * 测试删除

    */

   @Test

   public void TestDelete()

   {

       int i = personMapper.deleteById(1L);

   }

查询结果

mysql> select * from person;

+----+-------+------+--------------+

| id | name  | age  | email        |

+----+-------+------+--------------+

|  1 | elite |   22 | elite@qq.com |

+----+-------+------+--------------+

1 row in set (0.00 sec)

2.实体中常用的注解

表名注解 @TableName

描述:标识实体类对应的表

使用位置:实体类

@TableName("person")

public class Person {

   private Long id;

   private String name;

   private Integer age;

   private String email;

}

主键注解 @TableId

描述:主键注解

使用位置:实体类主键字段

@Data

@TableName("person")

public class Person {

   //主键,可以设置主键策略  NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

   /* IdType 默认就是None

   AUTO 数据库 ID 自增  1,2,3,....

   INPUT insert 前自行 set 主键值

   ASSIGN_ID   分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

   ASSIGN_UUID '42c0e12e0e975cd707751d98b82f7567   分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

   */

   @TableId(type=IdType.ASSIGN_ID)

   private Long id;

   private String name;

   private Integer age;

   private String email;

}

字段注解 @TableField

描述:字段注解(非主键)

@TableName("person")

public class Person {

   //主键,可以设置主键策略  NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

   /* IdType 默认就是None

   AUTO 数据库 ID 自增  1,2,3,....

   INPUT insert 前自行 set 主键值

   ASSIGN_ID   分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

   ASSIGN_UUID '42c0e12e0e975cd707751d98b82f7567   分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

   */

   @TableId(type=IdType.ASSIGN_ID)

   private Long id;

   /**

    * value String 否 "" 数据库字段名

    * exist boolean 否 true 是否为数据库表字段

    * condition String 否 "" 字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s},参考(opens new window)

    * update String 否 "" 字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1(该属性优先级高于 el 属性)

    * insertStrategy Enum 否 FieldStrategy.DEFAULT 举例:NOT_NULL

    * insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>)

    * updateStrategy Enum 否 FieldStrategy.DEFAULT 举例:IGNORED

    * update table_a set column=#{columnProperty}

    * whereStrategy Enum 否 FieldStrategy.DEFAULT 举例:NOT_EMPTY

    * where <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>

    * fill Enum 否 FieldFill.DEFAULT 字段自动填充策略

    * select boolean 否 true 是否进行 select 查询

    * keepGlobalFormat boolean 否 false 是否保持使用全局的 format 进行处理

    * jdbcType JdbcType 否 JdbcType.UNDEFINED JDBC 类型 (该默认值不代表会按照该值生效)

    * typeHandler Class<? extends TypeHandler> 否 UnknownTypeHandler.class 类型处理器 (该默认值不代表会按照该值生效)

    * numericScale String 否 "" 指定小数点后保留的位数

    */

   @TableField(value = "name")

   private String name;

   private Integer age;

   private String email;

}

@Version(opens new window)

描述:乐观锁注解、标记 @Version 在字段上

版本乐观锁可以使用

@EnumValue(opens new window)

描述:普通枚举类注解(注解在枚举字段上)

@TableLogic 是否逻辑删除

是否逻辑删除


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
Java 编译器
Java Annotation Processor(一)
Java Annotation Processor
687 0
|
存储 分布式计算 NoSQL
大数据编程技术基础实验七:HBase实验——部署HBase
大数据技术基础实验七,.掌握HBase集群安装部署及HBase Shell的一些常用命令的使用。
1027 0
大数据编程技术基础实验七:HBase实验——部署HBase
|
JavaScript
Vue3基础(20)___Vue3配置错误路由重定向写法
本文介绍了Vue 3中配置错误路由重定向的正确写法,包括使用参数和自定义正则表达式来定义通配符路由。
250 0
Vue3基础(20)___Vue3配置错误路由重定向写法
|
移动开发 安全 网络安全
Https中间人攻击
Https中间人攻击
643 0
|
自然语言处理 前端开发
深入解析 React-i18next:在 React 中实现国际化(二)
深入解析 React-i18next:在 React 中实现国际化(二)
395 0
|
存储 消息中间件 监控
ThreadPoolExecutor——高效处理并发任务的必备良器
通过合理地监控和调优ThreadPoolExecutor,可以提高线程池的性能和可靠性,避免任务丢失或线程池崩溃的问题,并且可以提高应用程序的性能和可靠性。
230 0
|
达摩院 供应链 JavaScript
网络流:优化仓储物流调度问题-达摩院MindOpt
仓储物流调度是指在物流供应链中,对仓储和运输(运输路线、成本)进行协调和安排的过程。主要包含物流计划、运输调度、运发管理、库存管理等重要环节。随着网络、电商行业的迅速发展,仓储物流调度对于企业来说也非常重要,优秀的调度方案可以帮助降低库存成本、物流配送的效率、成本等等等,从而给企业带来降本增效。
网络流:优化仓储物流调度问题-达摩院MindOpt
|
XML Java 数据库连接
SpringBoot入门,这一篇就够了(一)
SpringBoot入门,这一篇就够了
SpringBoot入门,这一篇就够了(一)
|
存储
RxSwift+MVVM项目实战-单分组UITableView添加、删除、移动功能
RxSwift+MVVM项目实战-单分组UITableView添加、删除、移动功能
333 0