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>

    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
        &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;com.baomidou&lt;/groupId&gt;
        &lt;artifactId&gt;mybatis-plus-boot-starter&lt;/artifactId&gt;
        &lt;version&gt;3.4.0&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
        &lt;artifactId&gt;lombok&lt;/artifactId&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;com.mysql&lt;/groupId&gt;
        &lt;artifactId&gt;mysql-connector-j&lt;/artifactId&gt;
        &lt;version&gt;8.0.31&lt;/version&gt;
        &lt;scope&gt;runtime&lt;/scope&gt;
    &lt;/dependency&gt;

&lt;/dependencies&gt;

&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;


    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
        &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;com.baomidou&lt;/groupId&gt;
        &lt;artifactId&gt;mybatis-plus-boot-starter&lt;/artifactId&gt;
        &lt;version&gt;3.4.0&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
        &lt;artifactId&gt;lombok&lt;/artifactId&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;com.mysql&lt;/groupId&gt;
        &lt;artifactId&gt;mysql-connector-j&lt;/artifactId&gt;
        &lt;version&gt;8.0.31&lt;/version&gt;
        &lt;scope&gt;runtime&lt;/scope&gt;
    &lt;/dependency&gt;

&lt;/dependencies&gt;

&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;
</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());
}


//插入时的填充策略
@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;


//对应数据库中的主键(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&lt;User&gt; 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&lt;User&gt; users = userMapper.selectBatchIds(Arrays.asList(1,2,3));
    users.forEach(System.out::println);
}
//按条件查询
@Test
void Text6(){
    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();
    map.put("name","鲁家见");
    userMapper.selectByMap(map);
}
//分页插件
@Test
void Text7(){
    //参数一当前页
    //参数二页面大小
    Page&lt;User&gt; page = new Page&lt;&gt;(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&lt;String, Object&gt; map = new HashMap&lt;&gt;();
    map.put("name","鲁家见");
    int i = userMapper.deleteByMap(map);
}
//复杂查询
@Test
void Text11(){
    //查询name不为空并且邮箱不为空,年龄大于12的用户
    QueryWrapper&lt;User&gt; Wrapper = new QueryWrapper&lt;&gt;();
    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);

}


@Resource
private UserMapper userMapper;

//查询
@Test
void contextLoads() {
    List&lt;User&gt; 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&lt;User&gt; users = userMapper.selectBatchIds(Arrays.asList(1,2,3));
    users.forEach(System.out::println);
}
//按条件查询
@Test
void Text6(){
    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();
    map.put("name","鲁家见");
    userMapper.selectByMap(map);
}
//分页插件
@Test
void Text7(){
    //参数一当前页
    //参数二页面大小
    Page&lt;User&gt; page = new Page&lt;&gt;(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&lt;String, Object&gt; map = new HashMap&lt;&gt;();
    map.put("name","鲁家见");
    int i = userMapper.deleteByMap(map);
}
//复杂查询
@Test
void Text11(){
    //查询name不为空并且邮箱不为空,年龄大于12的用户
    QueryWrapper&lt;User&gt; Wrapper = new QueryWrapper&lt;&gt;();
    Wrapper
}

启动类

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);
}


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

 

常用注解#

@TableName

  • 描述:表名注解,标识实体类对应的表

  • 使用位置:实体类

@TableId

  • 描述:主键注解,标识实体类中的主键字段

  • 使用位置:实体类的主键字段

@TableField

  • 描述:普通字段注解

作者:freps

出处:https://www.cnblogs.com/freps/p/18459256

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   LL。。。  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示