Mybatis Plus AR模式/主键策略/通用Service

一、AR模式

AR模式简单的说就是直接用实体操作数据库

需要两步,首先继承 Model 类

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

@Data
//@EqualsAndHashCode(callSuper = false)
public class User extends Model<User> {
}

然后需要存在可以使用的Mapper

public interface UserMapper extends BaseMapper<User> {
}

满足条件后可以使用实体类进行数据库操作,我认为使用 Mapper 就足够了

@SpringBootTest
public class ARTest {
    @Test
    public void insert() {
        User user = new User();
        user.setName("章草");
        user.setAge(24);
        user.setEmail("ZC@baomidou.com");
        user.setManagerId(1087982257332887553L);
        user.setCreateTime(new Date());
        boolean flag = user.insert();
        System.out.println(flag);
    }

    @Test
    public void selectById() {
        User user = new User();
        User user1 = user.selectById(1352099043086524417L);
        System.out.println(user == user1);// false
        System.out.println(user1);
    }

    @Test
    public void selectById2() {
        User user = new User();
        user.setId(1352099043086524417L);
        User user1 = user.selectById();
        System.out.println(user == user1);// false
        System.out.println(user1);
    }

    @Test
    public void updateById() {
        User user = new User();
        user.setId(1352099043086524417L);
        user.setName("章草草");
        boolean flag = user.updateById();
        System.out.println(flag);
    }

    @Test
    public void deleteById() {
        User user = new User();
        user.setId(1352099043086524417L);
        boolean flag = user.deleteById();
        System.out.println(flag);
    }

    @Test
    public void insertOrUpdate() {
        User user = new User();
        user.setName("张华");
        user.setAge(24);
        user.setEmail("zh@baomidou.com");
        user.setManagerId(1087982257332887553L);
        user.setCreateTime(new Date());
        // 没有设置主键,则插入到数据库
        // 如果设置了主键,首先根据主键查询记录是否存在,存在则更新,不存在则新增
        boolean flag = user.insertOrUpdate();
        System.out.println(flag);
    }
}

二、MP支持的主键策略

1、局部主键策略

@TableId(type= IdType.ID_WORKER)
private Long id;

官网介绍

2、全局主键策略

# Mybatis Plus配置
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*.xml
  global-config:
    db-config:
      id-type: id_worker

三、基本配置

官网介绍,内容很多,官网中文描述很详细

四、通用Service

在实际开发中,service 可以继承 ServiceImpl,来对 service 功能进行扩展,其中的批量操作给我们带来很大的方便

package com.mp.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mp.dao.UserMapper;
import com.mp.entity.User;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> {
}

使用lambda的代码演示

@SpringBootTest
public class ServiceTest {
    @Autowired
    private UserServiceImpl userServiceImpl;

    @Test
    public void chain(){
        List<User> list = userServiceImpl.lambdaQuery().gt(User::getAge, 25).like(User::getName, "雨").list();
        list.forEach(System.out::println);
    }

    @Test
    public void chain1(){
        boolean update = userServiceImpl.lambdaUpdate().eq(User::getAge, 25).set(User::getAge, 26).update();
        System.out.println(update);
    }

    @Test
    public void chain2(){
        boolean remove = userServiceImpl.lambdaUpdate().eq(User::getAge, 25).remove();
        System.out.println(remove);
    }
}
原文地址:https://www.cnblogs.com/jwen1994/p/14307689.html