栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis—Plus快速入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis—Plus快速入门

Mybatis—Plus

Mybatis-plus

MyBtais Plus开源框架 基于MyBatis

项目结构

pom.xml文件



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.0.RELEASE
         
    
    com.southwind
    MyBatis-Plus
    0.0.1-SNAPSHOT
    MyBatis-Plus
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-web
        


        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.1
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        









        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        




        
            com.github.pagehelper
            pagehelper
            4.2.1
        

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.0.RELEASE
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    



数据库表

实体类Account

@Data
@TableName(value = "user")
public class Account {

    //  默认方式  是不需要给主键赋值的  自动生成一个随机数(雪花算法)
    @TableId
   //   雪花算法生成的随机数 必须要使用long  对应的数据库中的字段类型要使用 bigint 长度最好大一点
    private  Integer id;
    @TableField(value = "name")
    private  String username;
    private  Integer age;

    @TableField(exist =false)
    //  表示实体类中有这个字段  但是数据库中没有 就可以这样使用
    private  String gender;


    @TableField(fill = FieldFill.INSERT,value = "create_time")
    private Date creatTime;
    @TableField(fill = FieldFill.INSERT_UPDATe,value = "update_time")
    private Date updateTime;

    //  注解方式进行枚举
    @Version
    private  Integer version;

    private StatusEnum  status;

    @TableLogic(value = "0" , delval = "1")
    private  Integer deleted;
    
}

在application.yml中寻找成员变量的值进行配对


根据数据表 自动的逆向生成 所有的实体类 所有的Mapper 所有的Service 所有的controller接口

此处的接口 没有实例化的原因是 因为有动态代理动态生成的(这个实现类 是看不到的) 程序运行 动态生成一个类

日志操作

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myabtisplus?useUnicode=true&characterEncoding=gbk&useSSL=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Hongkong
    username: root
    password: 密码

# 打印日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  type-enums-package:
    com.southwind.mybatisplus.enums

#  逻辑没有删除 0  删除是 1
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
常用注解

@TableName

映射数据库的表名

@TableId

设置主键映射  value映射主键字段名字
type设置主键类型  主键的生成策略
public enum IdType {
    
    AUTO(0),
    
    NONE(1),
    
    INPUT(2),

    
    
    ASSIGN_ID(3),
    
    ASSIGN_UUID(4),

AUTO
数据库自增 (根据数据库当前最大值加一 就是最新的值)

NONE
MP Set主键 雪花算法实现

INPUT
需要开发者手动赋值
如果没有手动赋值 则数据库通过自增的方式给主键赋值,如果手动赋值,则存入该值。

ASSIGN_ID 自动赋值 (雪花算法)
MP 分配 ID Long、Integer、String

ASSIGN_UUID 主键的数据类型必须是String 会自动更生成UUID(是一个字符串)
分配UUID、String

@TableField

映射非主键字段 value映射字段名

exist 表示是否为数据库字段 false 如果实体类中的成员变量在数据库中没有对应的字段则可以用exist 、DTO、 VO对不同的实体类做一个二次封装 (将当前需要用的实体类和其他实体类 组装在一起 进行传入到前端调用 )Select 表示是否查询该字段Fill 表示是否自动填充 将对象存入数据库的时候 由MyBatis Plus自动给某些字段赋值
ceate_time、update_time。

@Version

标记乐观锁 ,通过一个version 字段来保证数据的安全性,当修改数据的时候,会以version作为条件,当条件成立的时候
才会修改成功。

设置时间修改值,进行操作的时候 进行设置当前的系统值

//交给spring管理
@Component
public class MymetaObjectHandler implements metaObjectHandler {
    //使用mp实现添加操作,这个方法会执行,metaObject元数据(表中的名字,表中的字段)
    @Override
    public void insertFill(metaObject metaObject) {
        //根据名称设置属性值
        this.setFieldValByName("creatTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
    //使用mp实现修改操作,这个方法会执行
    @Override
    public void updateFill(metaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

配置Mybatis-plus对应的乐观锁和分页插件

@Configuration
@EnableTransactionManagement
public class MyBatisPlusConfig {


        @Bean
        public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor(){
            return new OptimisticLockerInnerInterceptor();
        }

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        //  插件
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        // 添加分页插件
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}

分页插件中 需要考虑的就是

    对应的版本兼容导入插件依赖对应的扫描类和配置类

问题集合

对应的在 mybatis-plus
分页操作的时候 出现的问题可能存在有
MybatisPlus和SPringboot存在版本的问题
SpringBoot和junit存在版本问题
Mybtaisplus配置分页插件
注意3.4.0之后的版本 会有新的配置方式 分页插件和乐观锁

枚举
@EnumValue
通用枚举类注解,将数据库字段映射成为实体类的枚举类型成员变量

实现接口枚举

实现接口 IEnum

其中方法

Public Integer getValue(){
Return this.code;
}

@TableLogic

映射逻辑删除 (逻辑上已经删除了 但是数据库中还是存在)

1.注解配置

2.配置文件配置

动态sql其实已经进行封装了,实际上就是进行读取实体类的注解 自动判断是否需要添加某个sql,是否追加某个条件。

public interface UserMapper extends baseMapper {

    @Select("select p.*,u.name  UserName from product p,user u where p.user_id=u.id and u.id=#{id}")
    List   productList(Integer id);

}

多表来联查

查询整个数据库

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777529.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号