1、快速开始1.1、现有一张 User 表,其表结构如下

idnameageemali
1Jone18test1@baomidou.com
2Jack20test2@baomidou.com
3Tom28test3@baomidou.com
4Sandy21test4@baomidou.com
5Billie24test5@baomidou.com
  • SQL语句
DROP TABLE IF EXISTS user;CREATE TABLE `user` (  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',  `name` varchar(30) DEFAULT NULL COMMENT '姓名',  `age` int DEFAULT NULL COMMENT '年龄',  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',  `is_deleted` int NOT NULL DEFAULT '0' COMMENT '逻辑删除',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;DELETE FROM user;INSERT INTO user (id, name, age, email,is_deleted) VALUES(1, 'Jone', 18, 'test1@baomidou.com',0),(2, 'Jack', 20, 'test2@baomidou.com',0),(3, 'Tom', 28, 'test3@baomidou.com',0),(4, 'Sandy', 21, 'test4@baomidou.com',0),(5, 'Billie', 24, 'test5@baomidou.com',0);

1.2、引入依赖

  • mybatis-plus-boot-starter
                   org.springframework.boot            spring-boot-starter-web                            com.baomidou            mybatis-plus-boot-starter            3.5.2                            mysql            mysql-connector-java            runtime                            com.alibaba            druid-spring-boot-starter            1.2.11                            org.springframework.boot            spring-boot-starter-test            test                            junit            junit            test        

1.3、配置数据库连接,开启控制台SQL语句输出

spring:  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://114.67.111.175:3306/test    username: wq    password: 123456#开启控制台日志mybatis-plus:  configuration:    #控制台打印sql语句方便调试sql语句执行错误    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl    #这个不在控制台打印查询结果,但是在log4j2中打印    #log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
  • 在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:
@SpringBootApplication@MapperScan("com.wanqi.mybatisplus.mapper")public class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

1.4、编码

  • 实体类User
package com.wanqi.mybatisplus.pojo;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;@TableName("user") //指定表名public class User {    //type = IdType.AUTO自增字段需要修改数据库主键为自增    //value指定对应主键字段名,type指定id生成策略(默认策略为雪花算法)    @TableId(value = "id", type = IdType.AUTO)    private Long id;    //value数据库字段值    @TableField(value = "name")    private String name;    private Integer age;    private String email;    private Integer isDeleted;    public User(Long id, String name, Integer age, String email) {        this.id = id;        this.name = name;        this.age = age;        this.email = email;    }    public User(String name, Integer age, String email) {        this.name = name;        this.age = age;        this.email = email;    }    public User() {    }    public Long getId() {        return id;    }    public void setId(Long id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }   public Integer getIsDeleted() {        return isDeleted;    }    public void setIsDeleted(Integer isDeleted) {        this.isDeleted = isDeleted;    }    @Override    public String toString() {        return "User{" +                "id=" + id +                ", name='" + name + '\'' +                ", age=" + age +                ", email='" + email + '\'' +                ", isDeleted=" + isDeleted +                '}';    }}
  • 编写 Mapper 包下的 UserMapper接口
import com.wanqi.mybatisplus.pojo.User;import org.springframework.stereotype.Repository;@Repositorypublic interface UserMapper extends BaseMapper {}

1.5、测试使用

package com.wanqi.mybatisplus;import com.wanqi.mybatisplus.mapper.UserMapper;import com.wanqi.mybatisplus.pojo.User;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;import java.util.Collection;import java.util.List;@SpringBootTestclass MybatisPlusApplicationTests {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        System.out.println(("----- selectAll method test ------"));        userMapper.insert(new User( "古力娜扎", 18, "test1@baomidou.com"));        List userList = userMapper.selectList(null);        userList.forEach(System.out::println);    }}

2、批量操作2.1、增加Service 层代码

package com.wanqi.mybatisplus.service;import com.baomidou.mybatisplus.extension.service.IService;import com.wanqi.mybatisplus.pojo.User;/** * @Description TODO * @Version 1.0.0 * @Date 2022/9/1 * @Author wandaren */public interface UserService extends IService {}
  • 注意 UserServiceImpl 必须要继承 MP 框架中的 ServiceImpl,不然要重写很多方法。
package com.wanqi.mybatisplus.service;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.wanqi.mybatisplus.mapper.UserMapper;import com.wanqi.mybatisplus.pojo.User;import org.springframework.stereotype.Service;/** * @Description TODO * @Version 1.0.0 * @Date 2022/9/1 * @Author wandaren */@Servicepublic class UserServiceImpl extends ServiceImpl     implements UserService{}

2.2、测试使用

package com.wanqi.mybatisplus;import com.wanqi.mybatisplus.mapper.UserMapper;import com.wanqi.mybatisplus.pojo.User;import com.wanqi.mybatisplus.service.UserServiceImpl;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;import java.util.Collection;import java.util.List;@SpringBootTestclass MybatisPlusApplicationTests {    @Autowired    private UserServiceImpl userService;    @Test    void contextLoads() {        Collection userList = new ArrayList();        userList.add(new User("hhh", 18, "test1@baomidou.com"));        userList.add(new User("sss", 18, "test1@baomidou.com"));        userList.add(new User("ddd", 18, "test1@baomidou.com"));        userService.saveBatch(userList);        System.out.println(userService.list());    }}

3、Service CURD3.1、save

// 插入一条记录(选择字段,策略插入)boolean save(T entity);// 插入(批量)boolean saveBatch(Collection entityList);// 插入(批量)boolean saveBatch(Collection entityList, int batchSize);

3.2、saveOrUpdate

// TableId 注解存在更新记录,否插入一条记录boolean saveOrUpdate(T entity);// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法boolean saveOrUpdate(T entity, Wrapper updateWrapper);// 批量修改插入boolean saveOrUpdateBatch(Collection entityList);// 批量修改插入boolean saveOrUpdateBatch(Collection entityList, int batchSize);

3.3、remove

// 根据 entity 条件,删除记录boolean remove(Wrapper queryWrapper);// 根据 ID 删除boolean removeById(Serializable id);// 根据 columnMap 条件,删除记录boolean removeByMap(Map columnMap);// 删除(根据ID 批量删除)boolean removeByIds(Collection idList);

3.4、update

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlsetboolean update(Wrapper updateWrapper);// 根据 whereWrapper 条件,更新记录boolean update(T updateEntity, Wrapper whereWrapper);// 根据 ID 选择修改boolean updateById(T entity);// 根据ID 批量更新boolean updateBatchById(Collection entityList);// 根据ID 批量更新boolean updateBatchById(Collection entityList, int batchSize);

3.5、get

// 根据 ID 查询T getById(Serializable id);// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")T getOne(Wrapper queryWrapper);// 根据 Wrapper,查询一条记录T getOne(Wrapper queryWrapper, boolean throwEx);// 根据 Wrapper,查询一条记录Map getMap(Wrapper queryWrapper);// 根据 Wrapper,查询一条记录 V getObj(Wrapper queryWrapper, Function mapper);

3.6、List

// 查询所有List list();// 查询列表List list(Wrapper queryWrapper);// 查询(根据ID 批量查询)Collection listByIds(Collection idList);// 查询(根据 columnMap 条件)Collection listByMap(Map columnMap);// 查询所有列表List<Map> listMaps();// 查询列表List<Map> listMaps(Wrapper queryWrapper);// 查询全部记录List listObjs();// 查询全部记录 List listObjs(Function mapper);// 根据 Wrapper 条件,查询全部记录List listObjs(Wrapper queryWrapper);// 根据 Wrapper 条件,查询全部记录 List listObjs(Wrapper queryWrapper, Function mapper);

3.7、page

// 无条件分页查询IPage page(IPage page);// 条件分页查询IPage page(IPage page, Wrapper queryWrapper);// 无条件分页查询IPage<Map> pageMaps(IPage page);// 条件分页查询IPage<Map> pageMaps(IPage page, Wrapper queryWrapper);

4、逻辑删除

  • 方式一:使用注解TableLogic
// value逻辑未删除值,delval逻辑删除值@TableLogic(value = "0", delval = "1")private Integer isDeleted;
  • 方式二:使用全局配置
mybatis-plus:  global-config:    db-config:      logic-delete-field: isDeleted # 全局逻辑删除的实体字段名      logic-delete-value: 1 # 逻辑已删除值(默认为 1)      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

5、分页

  • 配置
package com.wanqi.mybatisplus.config;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @Description TODO * @Version 1.0.0 * @Date 2022/9/24 * @Author wandaren */@Configurationpublic class CustomMyBatisPlusConfig {    /**     * 分页插件,一缓和二缓遵循mybatis的规则     */    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false        // paginationInnerInterceptor.setOverflow(false);        // 设置最大单页限制数量,默认 500 条,-1 不受限制        // paginationInnerInterceptor.setMaxLimit(500L);        interceptor.addInnerInterceptor(paginationInnerInterceptor);        return interceptor;    }}
  • 测试
    @Test    void page() {        long l = System.currentTimeMillis();        Page page = new Page(99999, 20);        final Page voteRecordPage = voteRecordMapper.selectPage(page, null);        voteRecordPage.getRecords().forEach(System.out::println);        System.out.println(System.currentTimeMillis() -l);    }
Copyright © maxssl.com 版权所有 浙ICP备2022011180号