MyBatis-Plus之注解

简介: MyBatis-Plus之注解

1.0 MyBatis-Plus之注解 @TableName

我们现在指定数据库表和mappr的关联在是在mapper接口中引入的user进行的绑定;

如果存在的实体和我们的表名不一样的话我们怎么设置呢?

今天我们来解决这个问题!

在实体类中通过@TableName设置指定的表名。这样就可以根据指定的表名去操作对应的数据库;

mapper依然指定的是user;

我们在实体类中指定表名@TableName("t_user")

1.1 扩展配置指定表名

当然我们在使用user实体类添加的话,可能也会遇到比较多的实体加起来会比较麻烦,这个时候我们可以去配置下;

我们这个时候把user中tableName删除;

mybatis-plus:
  configuration:
    #加入mybatis 日志查看执行语句sql语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#为用户所有的实体类配置  前缀 所有的表的都会加上 t_
  global-config:
    db-config:
      table-prefix: t_

执行依旧是ok的;

2.0 注解 @TableId

2.1 @TableId 将属性对应的字段指定为主键

比如在mapper中,他只能识别id为主键,并设置为自增;这个时候我们的主键比如不叫id的时候就会导致,mapper报错;此时我们就会用到

@TableId 注解:将属性对应的字段指定为主键

指定mapper中的uid作为mapper的主键;

2.2 @TableId(value=“uid”)

当我们实体的id为id的时候,数据库却为uid 我们可以指定@TableId(value="uid") ;来指定主键的字段;

@TableId(value="uid") 可缩写为: @TableId("uid")

2.2 @TableId(value=“uid”,type= IdType.AUTO)

@TableId(value="uid",type= IdType.AUTO)中的type是用来设置主键生成策略的;默认是雪花算法

查看代码:TableId

/*
 * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * <p>
 * https://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.baomidou.mybatisplus.annotation;
import java.lang.annotation.*;
/**
 * 表主键标识
 *
 * @author hubin
 * @since 2016-01-23
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TableId {
    /**
     * 字段值(驼峰命名方式,该值可无)
     */
    String value() default "";
    /**
     * 主键ID
     * {@link IdType}
     */
    IdType type() default IdType.NONE;
}

查看都有哪些算法:

/*
 * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * <p>
 * https://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.baomidou.mybatisplus.annotation;
import lombok.Getter;
/**
 * 生成ID类型枚举类
 *
 * @author hubin
 * @since 2015-11-10
 */
@Getter
public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
     */
    NONE(1),
    /**
     * 用户输入ID
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),
    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 分配ID (主键类型为number或string),
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
     *
     * @since 3.3.0
     */
    ASSIGN_ID(3),
    /**
     * 分配UUID (主键类型为 string)
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
     */
    ASSIGN_UUID(4),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_ID}
     */
    @Deprecated
    ID_WORKER(3),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_ID}
     */
    @Deprecated
    ID_WORKER_STR(3),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_UUID}
     */
    @Deprecated
    UUID(4);
    private final int key;
    IdType(int key) {
        this.key = key;
    }
}

设置主键id之后切记把数据库设置为id自增不然无效;

2.3 通过全局配置实现自增ID(全局)

mybatis-plus:
  configuration:
    #加入mybatis 日志查看执行语句sql语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      table-prefix: t_
      #设置统一的主键生成策略
      id-type: auto

大家根据自己的要求去设置具体的生产策略;

#设置统一的主键生成策略
      id-type: auto

2.4 扩展:雪花算法

分库分表实现可查看:https://blog.csdn.net/qq_42055933/article/details/126375606?spm=1001.2014.3001.5501

此处简单理解即可;

2.5 @TableField(“user_name”)

@TableField("user_name"):设置普通字段和数据库表之间的关;

2.6 @TableLogic

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据

逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

使用场景:可以进行数据恢复

@TableLogic 加在实体类上面就是逻辑删除,并非正在的删除功能;

数据库添加一个字段;

实体类添加一个字段;

@TableLogic
     private int isDelect;

我们执行删除试下:

@Test
    public void testDelectBatchIds(){
        //通过id中批量删除
         List<Long> longs = Arrays.asList(1L, 2L);
        int deleteBatchIds = userMapper.deleteBatchIds(longs);
        if (deleteBatchIds>0){
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }
        System.out.println("deleteBatchIds"+deleteBatchIds);
    }

他只是修改了我们的值,并没有真正的进行删除;

==>  Preparing: UPDATE t_user SET is_delect=1 WHERE uid IN ( ? , ? ) AND is_delect=0 
==> Parameters: 1(Long), 2(Long)
<==    Updates: 2

我们来执行下查询全部看下:

/**
     * 查询全部
     */
    @Test
    public void testSelectList(){
        //通过条件构造器查询一个list集合,若没有条件则可设置null
         List<User> users = userMapper.selectList(null);
          users.forEach(System.out::println);
    }


相关文章
|
6月前
|
SQL XML Java
【mybatis】第二篇:@Select注解中加入字段判断
【mybatis】第二篇:@Select注解中加入字段判断
|
7天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
17天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
52 5
|
17天前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
39 3
|
24天前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
105 3
|
23天前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
41 1
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
3月前
|
SQL Java 数据库
5、Mybatis-Plus 常用注解
这篇文章详细介绍了Mybatis-Plus中常用的注解,包括解决实体类与数据库表名不一致、字段不匹配的问题,主键生成策略的配置,以及逻辑删除的实现方法。
5、Mybatis-Plus 常用注解
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。