MyBatis-Plus概述

目录

1 pom.xml

2 application.properties

3 启动类

4 Model

5 Mapper

6 Service

7 测试类


MyBatis-Plus是一款MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。使用它可以像使用Hibernate一样,对于单表操作只调用方法而不用写SQL即可完成相应数据库的操作,快速开发节省大量时间。而对于多表操作,或者自己想写SQL的时候也可以用原来的MyBatis写SQL的方法来实现。


1 pom.xml

笔者使用的是Spring Boot 2.2.4.RELEASE,相关依赖如下所示(其中引入了Lombok,用来简化Java Model的编程,详见笔者的另一篇文章《Lombok概述》):

<?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.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hys</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis-plus</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

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

</project>

2 application.properties

笔者使用的数据库是MySQL 8.0.13,相关的连接配置如下所示(也可以配置MyBatis-Plus的扩展配置,例如主键自增策略、逻辑删除等等。这里只是演示,就都选择默认的配置了):

#MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/user?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root

3 启动类

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

@SpringBootApplication
@MapperScan("com.hys.mybatisplus.mapper")
public class MybatisPlusApplication {

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

}

在启动类上添加@MapperScan注解,以此来扫描Mapper层。当然也可以在每个Mapper接口中添加@Mapper注解,效果是一样的。


4 Model

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("user")
public class User implements Serializable {

    private static final long serialVersionUID = -288816356037467194L;

    @TableId
    private Long userId;

    private String name;

    private Integer age;

    private String email;
}

其中@TableName和@TableId是MyBatis-Plus的注解,用来表示数据库表名和主键。


5 Mapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hys.mybatisplus.model.User;

public interface UserMapper extends BaseMapper<User> {
}

6 Service

import com.baomidou.mybatisplus.extension.service.IService;
import com.hys.mybatisplus.model.User;

public interface UserService extends IService<User> {
}
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hys.mybatisplus.mapper.UserMapper;
import com.hys.mybatisplus.model.User;
import com.hys.mybatisplus.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

7 测试类

下面列举了一些用法,完整的功能示例请参考官方文档。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hys.mybatisplus.model.User;
import com.hys.mybatisplus.service.UserService;
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.List;
import java.util.stream.Collectors;

@SpringBootTest
class MybatisPlusApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    void mybatisPlusTest() {
        //增
        User user = User.builder().name("Robert Hou").age(24).email("[email protected]").build();
        userService.save(user);

        List<User> list = new ArrayList<>();
        list.add(User.builder().name("Emma").age(24).email("[email protected]").build());
        list.add(User.builder().name("Joyce").age(18).email("[email protected]").build());
        list.add(User.builder().name("Wilson").age(28).email("[email protected]").build());
        userService.saveBatch(list, 1000);

        //改
        user.setAge(25);
        userService.updateById(user);

        list.forEach(item -> item.setAge(item.getAge() + 1));
        userService.updateBatchById(list, 1000);

        user.setAge(26);
        userService.lambdaUpdate().eq(User::getName, "Robert Hou").update(user);

        //查
        User byId = userService.getById(1226475999890317314L);
        System.out.println(byId);

        User robert_hou = userService.getOne(new QueryWrapper<User>().lambda().eq(User::getName, "Robert Hou"));
        System.out.println(robert_hou);

        List<User> robert_hou1 = userService.lambdaQuery().eq(User::getName, "Robert Hou").list();
        robert_hou1.forEach(System.out::println);

        List<Long> userIdList = list.stream().map(User::getUserId).collect(Collectors.toList());
        userService.listByIds(userIdList);

        //删
        userService.removeById(6);

        userService.removeByIds(userIdList);

        userService.remove(new QueryWrapper<User>().lambda().eq(User::getName, "3234"));
    }

}
发布了64 篇原创文章 · 获赞 82 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_30342639/article/details/104237047