mybatis-plus

pom

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lu</groupId>
    <artifactId>mybatis_plus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis_plus</name>
    <description>mybatis_plus</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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.4.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.31</version>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

yml

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/mybatis-plus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL = false
    driver-class-name: com.mysql.cj.jdbc.Driver
#    设置开发环境
  profiles:
    active: dev
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

  global-config:
    db-config:
      logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

MybatisPlusConfig
package com.lu.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.aop.interceptor.PerformanceMonitorInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@MapperScan("com.lu.mapper")
@EnableTransactionManagement//配置事务默认开启
@Configuration//配置类
public class MybatisPlusConfig {

    //注册乐观锁
    //新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(true);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }

    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> configuration.setUseDeprecatedExecutor(false);
    }
    //sql执行效率插件



}

handler

MyMetaObjectHandler
package com.lu.handler;

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

import java.time.LocalDateTime;
import java.util.Date;

@Slf4j
@Component //一定不要忘记把处理器加到IOC容器中
public class MyMetaObjectHandler implements MetaObjectHandler {

    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill.... ");
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        // 或者
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }

    //更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill.... ");

        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}

mapper

package com.lu.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lu.pojo.User;
import org.springframework.stereotype.Repository;

import java.util.List;

//在mapper上继承基础的BaseMapper
@Repository//代表持久层
public interface UserMapper extends BaseMapper<User> {
    //所以的crud已经编写完成了
    //不需要像以前用于配置一大堆文件

}

pojo

package com.lu.pojo;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.time.LocalDateTime;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {

    //对应数据库中的主键(uuid、自增id、雪花算法、redis、zookeeper)
    @TableId(type= IdType.AUTO)//一旦手动输入id之后,就需要自己配置id了
    private Long id;

    private String name;
    private Integer age;
    private String email;


    //字段添加填充内容
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @Version//乐观锁
    private Integer version;

    @TableLogic//逻辑删除
    private Integer deleted;
    



}

 测试类

package com.lu.mybatis_plus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lu.mapper.UserMapper;
import com.lu.pojo.User;
import lombok.var;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.*;
import static java.lang.System.out;

@SpringBootTest
class MybatisPlusApplicationTests {

    @Resource
    private UserMapper userMapper;

    //查询
    @Test
    void contextLoads() {
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }
    //测试插入
    @Test
    void Text(){
        User user = new User();
        user.setAge(17);
        user.setName("啊西巴");
        user.setCreateTime(null);
        user.setUpdateTime(null);
        user.setEmail("482475181@qq.com");
        userMapper.insert(user);

    }
    //更新操作
    @Test
    void Text1(){
        User user = new User();
        user.setId(12L);
        user.setAge(24);
        user.setName("张三丰");
        user.setEmail("184123207@qq.com");
        userMapper.updateById(user);


    }
    //乐观锁测试成功
    @Test
    void Text2(){
        User user = userMapper.selectById(1L);
        user.setName("lujiajian");
        user.setEmail("184123207@qq.com");
        //执行更新操作
        int i = userMapper.updateById(user);
    }
    //乐观锁测试失败
    @Test
    void Text3(){
        User user = userMapper.selectById(1L);
        user.setName("lujiajian1");
        user.setEmail("184123207@qq.com");

        //模拟另外一个线程执行插队操作
        User user2 = userMapper.selectById(1L);
        user.setName("lujiajian2");
        user.setEmail("184123207@qq.com");
        //执行更新操作
        userMapper.updateById(user2);
        userMapper.updateById(user);

    }
    //测试查询
    @Test
    void Text4(){
        User user = userMapper.selectById(1L);
        System.out.println(user);
    }
    //批量查询查询
    @Test
    void Text5(){
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1,2,3));
        users.forEach(System.out::println);
    }
    //按条件查询
    @Test
    void Text6(){
        Map<String, Object> map = new HashMap<>();
        map.put("name","鲁家见");
        userMapper.selectByMap(map);
    }
    //分页插件
    @Test
    void Text7(){
        //参数一当前页
        //参数二页面大小
        Page<User> page = new Page<>(1,10);
        userMapper.selectPage(page, null);
        page.getRecords().forEach(System.out::println);
    }
    //测试删除
    @Test
    void Text8(){
        int i = userMapper.deleteById("1634815454079336474");
    }
    //测试批量删除
    @Test
    void Text9(){
        int i = userMapper.deleteBatchIds(Arrays.asList(1, 2, 3));
    }
    //根据条件删除
    @Test
    void Text10(){
        Map<String, Object> map = new HashMap<>();
        map.put("name","鲁家见");
        int i = userMapper.deleteByMap(map);
    }
    //复杂查询
    @Test
    void Text11(){
        //查询name不为空并且邮箱不为空,年龄大于12的用户
        QueryWrapper<User> Wrapper = new QueryWrapper<>();
        Wrapper
//                .inSql("id","select id from user where id=11")
                .isNotNull("name")
                .isNotNull("email")
                .ge("age",20);
        List<User> users = userMapper.selectList(Wrapper);
        users.forEach(out::println);
    }
    //查询名字等于付文博的
    @Test
    void Text12(){
        QueryWrapper<User> Wrapper = new QueryWrapper<>();
        Wrapper.eq("name","付文博");
        List<User> users = userMapper.selectList(Wrapper);
        users.forEach(out::println);
    }
    //查询年龄在20到30之间的用户并且name中带有付字的模糊查询
    @Test
    void Text13(){
        QueryWrapper<User> Wrapper = new QueryWrapper<>();
        Wrapper.between("age",20,30)
                .likeRight("name","付");
        List<User> users = userMapper.selectList(Wrapper);
        users.forEach(out::println);
    }
    //通过id排序进行
    @Test
    void Text14(){
        QueryWrapper<User> Wrapper = new QueryWrapper<>();
        Wrapper.orderByAsc("id");
        List<User> users = userMapper.selectList(Wrapper);
        users.forEach(out::println);
    }


}

启动类

package com.lu;

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


@SpringBootApplication
public class MybatisPlusApplication {

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

}

课程链接

讲师:遇见狂神说

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值