项目day(1)mybatis-plus

一、项目准备

1.1 项目整体架构

在这里插入图片描述

1.2 项目配置

  • jdk1.8

  • utf-8
    在这里插入图片描述

  • maven路径

1.3 pom包

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

1.4 jdbc驱动

在这里插入图片描述

1.5 数据库分库分表

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.6 其他补充

  • cap
  • 雪花算法

1.7 mybatis-plus

1.7.1乐观锁

  • MyBatisConfiguration
  • 配合@version使用
package com.ybx.sunshine.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class MyBatisConfiguration {
    //乐观锁,配合注解@version使用
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 主要是这行代码,加上就可以了
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}
  • @version
package com.ybx.sunshine.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@TableName(value = "user")

//@NoArgsConstructor
public class User {
    // 默认是雪花算法
//    @TableId(type = IdType.ASSIGN_ID)
    //这里是自增功能的实现
    @TableId(type = IdType.AUTO)
    long id;

    String name;
    int age;
    @TableField(fill = FieldFill.INSERT)
    Date createTime;
    @TableField(fill = FieldFill.UPDATE)
    Date UpdateTime;
    //乐观锁
    @Version
    int version;
}
  • 乐观锁应用小案例
    @Test
    public void testOptmistticLock(){
        User user1 = userMapper.selectById(1l);
        User user2 = userMapper.selectById(1l);
        user1.setAge(user1.getAge() + 50);
        user2.setAge(user2.getAge() - 30);
        int i = userMapper.updateById(user1);
        int i1 = userMapper.updateById(user2);
        System.out.println(i + "   " + i1);
    }

1.7.2 自动填充

  • @TableField
package com.ybx.sunshine.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@TableName(value = "user")

//@NoArgsConstructor
public class User {
    // 默认是雪花算法
//    @TableId(type = IdType.ASSIGN_ID)
    //这里是自增功能的实现
    @TableId(type = IdType.AUTO)
    long id;

    String name;
    int age;
    @TableField(fill = FieldFill.INSERT)
    Date createTime;
    @TableField(fill = FieldFill.UPDATE)
    Date UpdateTime;
    //乐观锁
    @Version
    Integer version;
}

package com.ybx.sunshine.MetaObjectHandler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        System.out.println("插入新的数据");
        this.setFieldValByName("createTime",new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        System.out.println("更新了");
        this.setFieldValByName("updateTime",new Date(), metaObject);
    }
}

1.7.3 条件查询

    @Test
    public void batchSelect(){
        //批量查询
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        users.forEach(System.out::print);
        HashMap<String,Object> hashMap = new HashMap<>();
        hashMap.put("name","tom");
        hashMap.put("age",112);
        //多条件查询
        List<User> users1 = userMapper.selectByMap(hashMap);
        users1.forEach(System.out::print);
    }

1.7.4 分页

  • 添加分页拦截器
package com.ybx.sunshine.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class MyBatisConfiguration {
    //乐观锁,配合注解@version使用
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 主要是这行代码,加上就可以了
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        //添加分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

  • 分页测试
     @Test
    public void pageSelect(){
        //每页5条记录,选择第一页
        Page<User> userPage = new Page<>(1, 5);
        //第二个参数是复杂条件
        Page<User> userPage1 = userMapper.selectPage(userPage, null);
        List<User> records = userPage1.getRecords();
        records.forEach(System.out::print);
        System.out.println(userPage.getPages());//总页数
        System.out.println(userPage.getSize()); //当前页的记录数
        System.out.println(userPage.getTotal());//总记录数
        System.out.println(userPage.hasNext());//有没有下一页
        System.out.println(userPage.hasPrevious());//有没有前一页
        System.out.println(userPage.getCurrent());//当前页码
    }
  • 分页只查看前两列数据
  @Test
    public void pageSelect(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.select("name","age");
        //每页5条记录,选择第一页
        Page<Map<String,Object>> userPage = new Page<>(1, 5);
        //第二个参数是复杂条件
        Page<Map<String,Object>> userPage1 = userMapper.selectMapsPage(userPage,wrapper);
        List<Map<String,Object>> records = userPage1.getRecords();
        records.forEach(System.out::print);
        System.out.println(userPage.getPages());//总页数
        System.out.println(userPage.getSize()); //当前页的记录数
        System.out.println(userPage.getTotal());//总记录数
        System.out.println(userPage.hasNext());//有没有下一页
        System.out.println(userPage.hasPrevious());//有没有前一页
        System.out.println(userPage.getCurrent());//当前页码
    }

1.7.5 逻辑删除

    @TableLogic
    Integer deleted;
  • 数据库中对应字段
    在这里插入图片描述
  • 逻辑删除,数据被删除deleted变为1
    在这里插入图片描述
  • 逻辑删除yml配置,可配可不配
#mybatis输出日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #主键生成策略
  global-config:
    db-config:
      id-type: auto
      #逻辑删除是1,没删是0
      logic-delete-value: 1
      logic-not-delete-value: 0

1.7.6 条件构造器

  • wrapper
    在这里插入图片描述
  • 条件方法
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42306803/article/details/125751712