Mybatis-Plus的MapperCRUD接口测试案例

创建个mysql数据库表

CREATE TABLE `user` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

创建个SpringBoot项目 安装mybatis-Plus插件
官网在这
User实体类

package com.enjoy.stu.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;

/**
 * 类说明: <br>
 * 〈〉
 *
 * @Author: wlt
 * @Date: 2022/3/16 11:18
 */
@Data
@TableName("user")
public class User implements Serializable {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    @TableField("name")
    private String userName;
    private Integer age;
    private String email;
}

直接上单元测试代码

package com.enjoy.stu;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.enjoy.stu.client.MyClient;
import com.enjoy.stu.config.CustomIdGenerator;
import com.enjoy.stu.mapper.UserMapper;
import com.enjoy.stu.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

/**
 * 类说明: <br>
 * 〈〉
 *
 * @Author: wlt
 * @Date: 2022/3/16 11:22
 */
@SpringBootTest
public class SampleTest {
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private CustomIdGenerator customIdGenerator;
    @Autowired
    private MyClient myClient;

    /**
     * 功能描述: <br>
     * <根据ID查询>
     *
     * @return 应答消息
     * @Param []
     * @Author: wlt
     * @Date: 2022/3/18 9:08
     **/
    @Test
    public void testSelect() {
        User user = new User();
        user.setId(1L);
        System.out.println(("----- selectAll method test ------"));
        List<User> userList = userMapper.selectList(null);
        User user1 = userMapper.selectById(user.getId());
        System.out.println(user1);
//        userList.forEach(System.out::println);
    }

    /**
     * 功能描述: <br>
     * <单条插入>
     *
     * @return 应答消息
     * @Param []
     * @Author: wlt
     * @Date: 2022/3/18 9:08
     **/
    @Test
    public void testInsert() {
        User user = new User();
        user.setId(88L);
        user.setUserName("猫耳朵");
        user.setEmail("18765898125@163.com");
        user.setAge(29);
        int insert = userMapper.insert(user);
        System.out.println(insert);
    }

    /**
     * 功能描述: <br>
     * <批量插入>
     *
     * @return 应答消息
     * @Param []
     * @Author: wlt
     * @Date: 2022/3/18 9:08
     **/
    @Test
    public void testInsertBatch() {
        List<User> userList = new ArrayList<>();
        User user = new User();
        user.setId(888L);
        user.setUserName("猫耳朵1");
        user.setEmail("18765898125@163.com");
        user.setAge(2);
        User user2 = new User();
        user2.setId(899L);
        user2.setUserName("猫耳朵2");
        user2.setEmail("18765898125@163.com");
        user2.setAge(292);
        userList.add(user);
        userList.add(user2);
        //批量插入
        boolean b = userMapper.insertBatch(userList);
        System.out.println(b);
    }

    /**
     * 功能描述: <br>
     * <插入或修改>
     *
     * @return 应答消息
     * @Param []
     * @Author: wlt
     * @Date: 2022/3/18 9:09
     **/
    @Test
    @Transactional(rollbackFor = Exception.class)
    public void testUpdateBatch() {
        User user = new User();
        user.setId(888L);
        user.setUserName("安琪拉");
        user.setEmail("1876589xxax8125@163.com");
        user.setAge(99);
        //插入或者修改
//        boolean b = userMapper.insertOrUpdate(user);
        //update()方法传递一个wrapper对象,则根据条件修改记录,返回受影响的行数;
        //其中实体类是要修改成的结果,wrapper是匹配条件
        UpdateWrapper<User> wrapper = new UpdateWrapper<>();
        wrapper.eq(true, "name", user.getUserName());
//        int update = userMapper.update(user, wrapper);
//        UPDATE user SET name=?, age=?, email=? WHERE (name = ?)
        //根据 ID 修改
        int update = userMapper.updateById(user);
//        UPDATE user SET name=?, age=?, email=? WHERE id=?
        System.out.println(update);

    }

    /**
     * 功能描述: <br>
     * <批量修改或新增>
     * 效率极低不建议使用 逻辑是 先根据id查数据库如果有就修改 如果没有就新增
     *
     * @return 应答消息
     * @Param []
     * @Author: wlt
     * @Date: 2022/3/18 9:36
     **/
    @Test
//   @Transactional(rollbackFor = Exception.class)
    public void testInsertOrUpdateBatch() {
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < 1002; i++) {
            User user = new User();
            user.setId(1888L + Long.valueOf(i));
            user.setUserName("大魔王222" + String.valueOf(i));
            user.setEmail("1876589xxax8125@163.com");
            user.setAge(28 + i);
            userList.add(user);
        }
        userMapper.insertOrUpdateBatch(userList);
    }

    /**
     * 功能描述: <br>
     * <批量更新>
     * 1000条一批  唉效率也不怎么高
     *
     * @return 应答消息
     * @Param []
     * @Author: wlt
     * @Date: 2022/3/18 9:55
     **/
    @Test
//    @Transactional(rollbackFor = Exception.class)
    public void updateBatchById() {
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < 1002; i++) {
            User user = new User();
            user.setId(1888L + Long.valueOf(i));
            user.setUserName("达摩祖师" + String.valueOf(i));
            user.setEmail("1876589xxax8125@163.com");
            user.setAge(i);
            userList.add(user);
        }
        userMapper.updateBatchById(userList);
    }

    @Test
    @Transactional(rollbackFor = Exception.class)
    public void deleteById() {
        User user = new User();
        user.setId(888L);
        user.setUserName("安琪拉");
        user.setEmail("1876589xxax8125@163.com");
        user.setAge(0);
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        /**
         * 第一个参数: 数据库表中的字段名
         * 第二个参数: 字段对应的值
         * where name = xxx and age =xxx
         **/
        wrapper.eq("name", user.getUserName());
        wrapper.eq("age", user.getAge());
        //根据where条件删除
//        userMapper.delete(wrapper);
        //根据ID删除
//        userMapper.deleteById(user);
        //根据id批量删除
        //userMapper.deleteBatchIds(Arrays.asList(888L,889L,890L));
        //根据map删除记录
        Map<String, Object> userMap = new HashMap<>();
        userMap.put("name", user.getUserName());
        userMapper.deleteByMap(userMap);
    }
    /**
     * 功能描述: <br>
     * <查询方法测试>
     * @Param []
     * @return 应答消息
     * @Author: wlt
     * @Date: 2022/3/18 14:00
     **/
    @Test
    public void select(){
        User user = new User();
        user.setId(888L);
        user.setUserName("安琪拉");
        user.setEmail("1876589xxax8125@163.com");
        user.setAge(111);
        //根据 ID 查询
//        User user2 = userMapper.selectById(user.getId());
//        SELECT id,name AS userName,age,email FROM user WHERE id=?
//        System.out.println(user2);
        //根据条件查询
        LambdaQueryWrapper<User> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        //=  第二个参数 lambda表达式的方式写数据库表的字段名,第三个参数是对应的字段值
        lambdaQueryWrapper.eq(true,User::getUserName,user.getUserName());
        //!=
        lambdaQueryWrapper.ne(true,User::getAge,user.getAge());
        //apply 拼接sql语句用
        lambdaQueryWrapper.apply("email ='"+user.getEmail()+"'");
        User user1 = userMapper.selectOne(lambdaQueryWrapper);
        //SELECT id,name AS userName,age,email FROM user WHERE (name = ? AND age <> ? AND email ='1876589xxax8125@163.com')
        System.out.println(user1);
    }
    /**
     * 功能描述: <br>
     * <查询(根据ID 批量查询)>
     * @Param []
     * @return 应答消息
     * @Author: wlt
     * @Date: 2022/3/18 15:40
     **/
    @Test
    public void selectBatchIds(){
        /*List<User> userList = userMapper.selectBatchIds(Arrays.asList(888L, 889L, 890L));
        //SELECT id,name AS userName,age,email FROM user WHERE id IN ( ? , ? , ? )
        userList.stream().forEach(user -> System.out.println(user));*/
        User user = new User();
        user.setId(888L);
        user.setUserName("安琪拉");
        user.setEmail("1876589xxax8125@163.com");
        user.setAge(0);
        Map<String, Object> columnMap =new HashMap<>();
        columnMap.put("name",user.getUserName());
        columnMap.put("age",user.getAge());
        List<User> userList = userMapper.selectByMap(columnMap);
        //SELECT id,name AS userName,age,email FROM user WHERE name = ? AND age = ?
        userList.stream().forEach(user1 -> System.out.println(user1));
    }
    /**
     * 功能描述: <br>
     * <根据 entity 条件,查询全部记录>
     * @Param []
     * @return 应答消息
     * @Author: wlt
     * @Date: 2022/3/18 15:44       
     **/
    @Test
    public void selectList(){
        User user=new User();
        user.setUserName("安琪拉");
        LambdaQueryWrapper<User> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(true,User::getUserName,user.getUserName());
       /* List<User> userList = userMapper.selectList(lambdaQueryWrapper);
        userList.stream().forEach(user1 -> System.out.println(user1));*/
        //SELECT id,name AS userName,age,email FROM user WHERE (name = ?)
        //根据 Wrapper 条件,查询全部记录
        List<Map<String, Object>> maps = userMapper.selectMaps(lambdaQueryWrapper);
        maps.stream().forEach(stringObjectMap -> System.out.println(stringObjectMap));
        //SELECT id,name AS userName,age,email FROM user WHERE (name = ?)
    }

    @Test
    public void testSelectObjs() {
        User user=new User();
        user.setUserName("安琪拉");
        user.setAge(0);
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getUserName, user.getUserName());
        //>=
        queryWrapper.ge(User::getAge,user.getAge());
        //<=
        queryWrapper.le(User::getAge,30);
        //根据字段分组
//        queryWrapper.groupBy(User::getId,User::getUserName);
        // 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
        List<Object> userList = userMapper.selectObjs(queryWrapper);
        userList.stream().forEach(user1-> System.out.println(user1));
        // 根据 Wrapper 条件,查询总记录数
        Long aLong = userMapper.selectCount(queryWrapper);
        System.out.println(aLong);
    }
    /**
     * 功能描述: <br>
     * <分页查询>
     * @Param []
     * @return 应答消息
     * @Author: wlt
     * @Date: 2022/3/18 17:37
     **/
    @Test
    public void selectPage(){
        User user =new User();
        user.setUserName("达摩祖师");
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        //模糊查询
        queryWrapper.like(User::getUserName,user.getUserName());
        /*** Page是分页查询对象,实现IPage接口,下面构造方法表示当前页,每页工几条记录 ***/
        Page<User> page =new Page<>(1,10);
        Page<User> pageList = userMapper.selectPage(page, queryWrapper);
        List<User> records = pageList.getRecords();
        /*** 当前页 ***/
        System.out.println(pageList.getCurrent());

        /*** 当前分页总页数 ***/
        System.out.println(pageList.getPages());

        /*** 每页显示条数 ***/
        System.out.println(pageList.getSize());

        /*** 当前分页总记录数 ***/
        System.out.println(pageList.getTotal());
    }
    /**
     * 功能描述: <br>
     * <根据 Wrapper 条件,查询全部记录(并翻页)>
     * @Param []
     * @return 应答消息
     * @Author: wlt
     * @Date: 2022/3/18 17:59       
     **/
    @Test
    public void selectMapsPage(){
        User user =new User();
        user.setUserName("达摩祖师");
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        //模糊查询
        queryWrapper.like(User::getUserName,user.getUserName());
        /*** IPage是分页查询对象,下面构造方法表示当前页,每页工几条记录 ***/
        IPage<Map<String, Object>> page = new Page<>(1, 10);
        /***
         * selectMaps()参数为IPage(RowBounds.DEFAULT)、QueryWrapper,参数可为null,
         * 根据条件查询实体集合,若无结果则返回空集合,返回Map,key是字段名(非属性名),value是字段值
         ***/
        IPage<Map<String, Object>> pageList = userMapper.selectMapsPage(page, queryWrapper);
        List<Map<String, Object>> records = pageList.getRecords();
        /*** 当前页 ***/
        System.out.println(pageList.getCurrent());

        /*** 当前分页总页数 ***/
        System.out.println(pageList.getPages());

        /*** 每页显示条数 ***/
        System.out.println(pageList.getSize());

        /*** 当前分页总记录数 ***/
        System.out.println(pageList.getTotal());
    }

    @Test
    public void testForest() {
        JSONObject weather = myClient.weather("济南");
        System.out.println(weather);
    }
}

继承了个Mapper

package com.enjoy.stu.mapper;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.enjoy.stu.util.BeanCopyUtils;
import org.apache.ibatis.binding.MapperMethod;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 自定义 Mapper 接口, 实现 自定义扩展
 *
 * @param <M> mapper 泛型
 * @param <T> table 泛型
 * @param <V> vo 泛型
 * @author Lion Li
 * @since 2021-05-13
 */
@SuppressWarnings("unchecked")
public interface BaseMapperPlus<M, T, V> extends BaseMapper<T> {

    Log log = LogFactory.getLog(BaseMapperPlus.class);

    int DEFAULT_BATCH_SIZE = 1000;

    default Class<V> currentVoClass() {
        return (Class<V>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 2);
    }

    default Class<T> currentModelClass() {
        return (Class<T>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 1);
    }

    default Class<M> currentMapperClass() {
        return (Class<M>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 0);
    }

    default List<T> selectList() {
        return this.selectList(new QueryWrapper<>());
    }

    /**
     * 批量插入
     */
    default boolean insertBatch(Collection<T> entityList) {
        return insertBatch(entityList, DEFAULT_BATCH_SIZE);
    }

    /**
     * 批量更新
     */
    default boolean updateBatchById(Collection<T> entityList) {
        return updateBatchById(entityList, DEFAULT_BATCH_SIZE);
    }

    /**
     * 批量插入或更新
     */
    default boolean insertOrUpdateBatch(Collection<T> entityList) {
        return insertOrUpdateBatch(entityList, DEFAULT_BATCH_SIZE);
    }

    /**
     * 批量插入(包含限制条数)
     */
    default boolean insertBatch(Collection<T> entityList, int batchSize) {
        String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.INSERT_ONE);
        return SqlHelper.executeBatch(this.currentModelClass(), log, entityList, batchSize,
            (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
    }

    /**
     * 批量更新(包含限制条数)
     */
    default boolean updateBatchById(Collection<T> entityList, int batchSize) {
        String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.UPDATE_BY_ID);
        return SqlHelper.executeBatch(this.currentModelClass(), log, entityList, batchSize,
            (sqlSession, entity) -> {
                MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
                param.put(Constants.ENTITY, entity);
                sqlSession.update(sqlStatement, param);
            });
    }

    /**
     * 批量插入或更新(包含限制条数)
     */
    default boolean insertOrUpdateBatch(Collection<T> entityList, int batchSize) {
        TableInfo tableInfo = TableInfoHelper.getTableInfo(this.currentModelClass());
        Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
        String keyProperty = tableInfo.getKeyProperty();
        Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
        return SqlHelper.saveOrUpdateBatch(this.currentModelClass(), this.currentMapperClass(), log, entityList, batchSize, (sqlSession, entity) -> {
            Object idVal = tableInfo.getPropertyValue(entity, keyProperty);
            String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.SELECT_BY_ID);
            return StringUtils.checkValNull(idVal)
                || CollectionUtils.isEmpty(sqlSession.selectList(sqlStatement, entity));
        }, (sqlSession, entity) -> {
            MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
            param.put(Constants.ENTITY, entity);
            String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.UPDATE_BY_ID);
            sqlSession.update(sqlStatement, param);
        });
    }

    /**
     * 插入或更新(包含限制条数)
     */
    default boolean insertOrUpdate(T entity) {
        if (null != entity) {
            TableInfo tableInfo = TableInfoHelper.getTableInfo(this.currentModelClass());
            Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
            String keyProperty = tableInfo.getKeyProperty();
            Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
            Object idVal = tableInfo.getPropertyValue(entity, tableInfo.getKeyProperty());
            return StringUtils.checkValNull(idVal) || Objects.isNull(selectById((Serializable) idVal)) ? insert(entity) > 0 : updateById(entity) > 0;
        }
        return false;
    }

    default V selectVoById(Serializable id) {
        return selectVoById(id, this.currentVoClass());
    }

    /**
     * 根据 ID 查询
     */
    default <C> C selectVoById(Serializable id, Class<C> voClass) {
        T obj = this.selectById(id);
        if (ObjectUtil.isNull(obj)) {
            return null;
        }
        return BeanCopyUtils.copy(obj, voClass);
    }

    default List<V> selectVoById(Collection<? extends Serializable> idList) {
        return selectVoBatchIds(idList, this.currentVoClass());
    }

    /**
     * 查询(根据ID 批量查询)
     */
    default <C> List<C> selectVoBatchIds(Collection<? extends Serializable> idList, Class<C> voClass) {
        List<T> list = this.selectBatchIds(idList);
        if (CollUtil.isEmpty(list)) {
            return CollUtil.newArrayList();
        }
        return BeanCopyUtils.copyList(list, voClass);
    }

    default List<V> selectVoByMap(Map<String, Object> map) {
        return selectVoByMap(map, this.currentVoClass());
    }

    /**
     * 查询(根据 columnMap 条件)
     */
    default <C> List<C> selectVoByMap(Map<String, Object> map, Class<C> voClass) {
        List<T> list = this.selectByMap(map);
        if (CollUtil.isEmpty(list)) {
            return CollUtil.newArrayList();
        }
        return BeanCopyUtils.copyList(list, voClass);
    }

    default V selectVoOne(Wrapper<T> wrapper) {
        return selectVoOne(wrapper, this.currentVoClass());
    }

    /**
     * 根据 entity 条件,查询一条记录
     */
    default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass) {
        T obj = this.selectOne(wrapper);
        if (ObjectUtil.isNull(obj)) {
            return null;
        }
        return BeanCopyUtils.copy(obj, voClass);
    }

    default List<V> selectVoList(Wrapper<T> wrapper) {
        return selectVoList(wrapper, this.currentVoClass());
    }

    /**
     * 根据 entity 条件,查询全部记录
     */
    default <C> List<C> selectVoList(Wrapper<T> wrapper, Class<C> voClass) {
        List<T> list = this.selectList(wrapper);
        if (CollUtil.isEmpty(list)) {
            return CollUtil.newArrayList();
        }
        return BeanCopyUtils.copyList(list, voClass);
    }

    default <P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper) {
        return selectVoPage(page, wrapper, this.currentVoClass());
    }

    /**
     * 分页查询VO
     */
    default <C, P extends IPage<C>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<C> voClass) {
        IPage<T> pageData = this.selectPage(page, wrapper);
        IPage<C> voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal());
        if (CollUtil.isEmpty(pageData.getRecords())) {
            return (P) voPage;
        }
        voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass));
        return (P) voPage;
    }

}

UserMapper

/**
 * 类说明: <br>
 * 〈〉
 *
 * @Author: wlt
 * @Date: 2022/3/16 11:21
 */
@Mapper
public interface UserMapper extends BaseMapperPlus<UserMapper,User,User> {

}

单表操作几乎不用写sql语句都可以实现
多表操作还没测试
大家都共同学习一下吧
附带一下我的pom.xmlyml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.enjoy.stu</groupId>
    <artifactId>studyEnjoy</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-bom</artifactId>
            <version>5.7.20</version>
        </dependency>
        <!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
        <dependency>
            <groupId>cn.dev33</groupId>
            <artifactId>sa-token-spring-boot-starter</artifactId>
            <version>1.29.0</version>
        </dependency>
        <dependency>
            <groupId>com.dtflys.forest</groupId>
            <artifactId>forest-spring-boot-starter</artifactId>
            <version>1.5.19</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.48</version>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.18.1</version>
        </dependency>
    </dependencies>
</project>
server:
  port: 13500

# DataSource Config
spring:
  application:
    name: enjoy
  datasource:
    url: jdbc:mysql://你的服务器IP:3306/test?serverTimeZone=UTC&rewriteBatchedStatements=true
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
sa-token:
  # token名称 (同时也是cookie名称)
  token-name: satoken
  # token有效期,单位s 默认30天, -1代表永不过期
  timeout: 2592000
  # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
  activity-timeout: -1
  # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
  is-concurrent: true
  # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
  is-share: false
  # token风格
  token-style: uuid
  # 是否输出操作日志
  is-log: false
forest:
  bean-id: config0 # 在spring上下文中bean的id(默认为 forestConfiguration)
  backend: okhttp3 # 后端HTTP框架(默认为 okhttp3)
  max-connections: 1000 # 连接池最大连接数(默认为 500)
  max-route-connections: 500 # 每个路由的最大连接数(默认为 500)
  timeout: 3000 # 请求超时时间,单位为毫秒(默认为 3000)
  connect-timeout: 3000 # 连接超时时间,单位为毫秒(默认为 timeout)
  read-timeout: 3000 # 数据读取超时时间,单位为毫秒(默认为 timeout)
  max-retry-count: 0 # 请求失败后重试次数(默认为 0 次不重试)
  ssl-protocol: SSLv3 # 单向验证的HTTPS的默认SSL协议(默认为 SSLv3)
  logEnabled: true # 打开或关闭日志(默认为 true)
  log-request: true # 打开/关闭Forest请求日志(默认为 true)
  log-response-status: true # 打开/关闭Forest响应状态日志(默认为 true)
  log-response-content: true # 打开/关闭Forest响应内容日志(默认为 false)
mybatis-plus:
  configuration:
    #默认不显示SQL日志
    #    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值