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

MybatisPlus快速上手

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

MybatisPlus快速上手

MybatisPlus快速上手 pom依赖
    
        
        
            com.github.pagehelper
            pagehelper
            5.2.0
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.projectlombok
            lombok
        
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.2
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.junit.jupiter
            junit-jupiter-engine
            test
        
        
            org.junit.vintage
            junit-vintage-engine
            test
        


        
            org.junit.platform
            junit-platform-launcher
            test

        

        
            junit
            junit
            test
        

    
数据库
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
  `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱',
  `age` tinyint(0) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
结构

基本配置 yml配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/iot?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: bcy123

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
实体类
package mpTest.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private String password;
    private String email;
    private Integer age;
}
启动类
package mpTest;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("mpTest.mapper")
public class StartApplication {

    public static void main(String[] args) {
        SpringApplication.run(StartApplication.class, args);
    }

}
接口
package mpTest.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import mpTest.entity.User;
import org.springframework.stereotype.Repository;

//在对应的Mapper 接口上 基础基本的 BaseMapper T是对应的pojo类
@Repository   //告诉容器你是持久层的 @Repository是spring提供的注释,能够将该类注册成Bean
public interface UserMapper extends BaseMapper {
    //所有的crud都编写完成了
}
测试查询 查询全部
    @Test
    public void testSelectList() {
        System.out.println(("----- selectAll method test 测试查询所有用户方法 ------"));
        //selectList 的参数wrapper 是条件构造器,可以先写null
        List userList = userMapper.selectList(null);
        //forEach 的参数是 Consumer类型的 语法糖
        System.out.println("----------test--------------");
        userList.forEach(System.out::println);
    }
分页查询
  • 配置类
package mpTest.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;

@Configuration
//@MapperScan("**.mapper")  //官方文档说要加MapperScan
//主要是扫描到mapper包下的接口交给spring管理,我这里在启动类上添加过了,这里就不加了
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());//创建乐观锁拦截器 OptimisticLockerInnerInterceptor
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //插件分页拦截器,我的是mysql
        return mybatisPlusInterceptor;
    }
}
  • 测试类
//测试分页查询
@Test
public void testPage() {
    Page page = new Page<>(1,5); //开启拦截器后,会注册一个page对象  当前页,每页条数
    //方法源码:   

> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper queryWrapper); userMapper.selectPage(page,null); //分页查询 page.getRecords().forEach(System.out::println); //获取分页后的数据 打印 System.out.println(page.getTotal()); //获取记录总数 }

测试插入
    @Test
    public void testInsert() {
        User user = new User();
        user.setAge(12);
        user.setName("说");
        user.setPassword("78797777878a");
        System.out.println("----------test--------------");
        int result = userMapper.insert(user);
        System.out.println("result = " + result);
        System.out.println("user = " + user);
    }
测试更新 更新
//更新测试
@Test
public void testUpdateByID() {
    User user = new User();
    user.setId(18L);
    user.setName("小小");
    user.setAge(18);//这一行后加
    int i = userMapper.updateById(user);//受影响的行数,参数是一个user不是id,点击看源码
    System.out.println("i = " + i);
}
自动更新时间

1、 通过注解

//字段添加填充内容
@TableField(fill = FieldFill.INSERT ,value = "create_time")
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE ,value = "update_time")
private LocalDateTime updateTime;

2、 编写处理器来处理这个注解

@Slf4j //日志
@Component//以组件的形式把这个处理器注册到IOC容器中
public class MyMetaObjectHandler implements MetaObjectHandler {

    //插入时启动  第三个参数 LocalDateTime 一定要和 createTime成员变量的值的类型一致,不然是null 如果是date就都设置date
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
    }

    //更新时候启动
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
    }
}
测试删除
//删除测试
@Test
public void testDeleteById(){
    userMapper.deleteById(1525072816282255362L);
    // userMapper.delete(null); //全部删除
}
QueryWrapper 条件查询
@Test
public void contextLoads() {
    //----------查询多个
    //查询一个复杂的,比如查询用户name、邮箱不为空,年龄大于20的用户
    QueryWrapper wrapper = new QueryWrapper<>(); //首先新建一个 QueryWrapper
    //链式编程 添加查询条件
    wrapper.isNotNull("name")
            .like("email","%@163.com")
            .ge("age",12);
    userMapper.selectList(wrapper).forEach(System.out::println);
    //----------查询单个
    wrapper.isNull("password");
    User user = userMapper.selectOne(wrapper); //出现多个结果会报错,查询一个
    System.out.println("user = " + user);
}
模糊删除
@Test
public void test3() {
    //模糊查询
    QueryWrapper wrapper = new QueryWrapper<>();
    wrapper.like("name",9)         //  名字中 存在 99
            .notLike("name",6)      //  名字中 不存在 6
            .likeRight("email","s")   //  邮箱 最左边是2  2%
            .likeLeft("email","m"); //  邮箱 最右边是m  %m
    List> maps = userMapper.selectMaps(wrapper);
    maps.forEach(System.out::println);
}
参考

Mybatis-Plus详解_有头发还能学的博客-CSDN博客_mybatis-plus

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

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

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