天天看点

Mybatis-Plus快速入门及常用场景一.快速入门二.分页操作 

目录

一.快速入门

二.分页操作 

一.快速入门

  • 1.编写项目使用springboot,进行自动生成初始化配置:---->Springboot快速入门链接

  • 2.导入依赖到pom.xml中,如下三个标签

           <!-- 数据库驱动 -->            <!-- lombok -->            <!-- mybatis-plus -->  

2.1关于lombok

  lombok可以通过简单的注解的形式来帮助我们简化和消除一些必须有但显得很臃肿的Java代码,比如常见的Getter&Setter、toString()、构造函数等等。lombok不仅方便编写,同时也让我们的代码更简洁。

  lombok提供了一个功能完整的jar包,可以很方便的与我们的项目进行集成。

  @ToString

  用在类上,可以自动覆写toString方法,当然还可以加其他参数,例如@ToString(exclude=”id”)排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性。

  @EqualsAndHashCode

  自动生成hashCode() 和 equals()方法。

  @Data

  注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor

  @Value

  用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法,具体示例可以参考@Data部分

  @Log

  lombok可以快速生成多种常用日志实例,包括Commonslog、log、log4j、slf4j等等,具体的使用可以依照需求灵活选择。

<?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.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.benniu</groupId>
    <artifactId>mybatis_plus1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis_plus1</name>
    <packaging>jar</packaging>
    <description>Demo project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- lombok -->
        <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        </dependency>
        <!-- mybatis-plus -->
        <!-- mybatis-plus 是自己开发,并非官方的! -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version> </dependency>
    </dependencies>

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

</project>
           

说明:我们使用 mybatis-plus 可以节省我们大量的代码,尽量不要同时导入 mybatis 和 mybatisplus!版本的差异!    

  • 3.连接数据库!这一步和 mybatis 相同

此处使用的Springboot,所以导入到application.properties或者.yml文件中

# mysql 5 驱动不同 com.mysql.jdbc.Driver # mysql 8 驱动不同com.mysql.cj.jdbc.Driver、需要增加时区的配置 serverTimezone=GMT%2B8
#DB Configuration:
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db3?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#UTC是统一标准世界时间,UTF-8,这个是解决中文乱码输入问题
spring.datasource.username=root
spring.datasource.password=root
           
  • 4.配置domain,也即是pojo

mybatis-plus,CRUD代码它都可以自动化完成!   损耗小 :启动即会自动注入基本 CURD ,性能基本无损耗,直接面向对象操作, BaseMapper   内置代码生成器 :采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service   内置分页插件 :基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同 于普通 List 查询

package com.benniu.mybatis_plus1.domain;
/**
 * Created with IntelliJ IDEA.
 * User: Wang
 * Date: 2020/8/18
 * Time: 9:24
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Configuration
public class User {
    //主键,如下标签代表自增
    @TableId(type = IdType.AUTO)
    private int id;
    //用户名
    private String username;
    //密码
    private String password;
    //姓名
    private String name;
}
           
  • 5.配置mapper接口

package com.benniu.mybatis_plus1.mapper;
/**
 * Created with IntelliJ IDEA.
 * User: Wang
 * Date: 2020/8/18
 * Time: 9:27
 */
//在对应的Mapper上面继承基本的类BaseMapper
@Repository
public interface UserMapper extends BaseMapper<User> {
    //所有的CRUD操作都已经写好了
    //不需要像以前一样配置一大堆文件
}
           
  • 6.在主启动类上去扫描我们的mapper包下的所有接口--->@MapperScan("com.benniu.mybatis_plus1.mapper")

package com.benniu.mybatis_plus1;

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

@SpringBootApplication
@MapperScan("com.benniu.mybatis_plus1.mapper")
public class MybatisPlus1Application {

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

}
           
  • 7.测试,普通的crud操作,里面有内置。

以下的测试是在Controller层做的,通过浏览器访问相应的方法即可:http://localhost:8080/queryUser1

package com.benniu.mybatis_plus1.controller;
/**
 * Created with IntelliJ IDEA.
 * User: Wang
 * Date: 2020/8/18
 * Time: 9:31
 */
@Controller
public class MapperController {

    //继承了BaseMapper,所有的方法都来自自己的父类
    //自己也可编写扩展方法
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private User user;

    @RequestMapping("/queryUser1")
    @ResponseBody
    public List<User> queryUser1(){
        //参数是一个wrapper,条件构造器
        //查询所有用户
        List<User> users = userMapper.selectList(null);
        return users;
    }

    @RequestMapping("/queryUser2")
    @ResponseBody
    public void inSertUser(){
        //插入操作
        //不写id,他会自动填写
        user.setName("黄家驹");
        user.setPassword("root");
        user.setUsername("TSWLife");
        userMapper.insert(user);
    }

    @RequestMapping("/queryUser3")
    @ResponseBody
    public void upDateUser(){
        //更新操作
        user.setId(11);
        user.setName("怡和堂");
        user.setPassword("root");
        user.setUsername("TSWLife");
        userMapper.updateById(user);
    }

    @RequestMapping("/deleteUser")
    @ResponseBody
    public void deleteUser(){
        //通过id单条删除
        userMapper.deleteById(11);

        //通过id批量删除
        userMapper.deleteBatchIds(Arrays.asList(1,2));

        //通过map删除
        HashMap<String, Object> map = new HashMap<>();
        map.put("name","王博");
        userMapper.deleteByMap(map);
    }
           
  • 8.比较复杂的sql语句操作

(1)查询:查询name不为空的用户并且password也不为空,id>3

//Wrapper我们写一些复杂的sql就可以使用它来替代!
    @RequestMapping("/mapperTest1")
    @ResponseBody
    public void mapperTest1(){
        //查询name不为空的用户并且password也不为空,id>3
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper
                .isNotNull("name")
                .isNotNull("username")
                .ge("id",3);
        userMapper.selectList(wrapper).forEach(System.out::println);
    }
           

(2)查询:查询名字

//Wrapper我们写一些复杂的sql就可以使用它来替代!
    @RequestMapping("/mapperTest2")
    @ResponseBody
    public void mapperTest2(){
        //查询名字
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("username","TSWLife");
        User user = userMapper.selectOne(wrapper);//查询一个数据,出现多个结果使用List或者Map
        System.out.println(user);
    }
           

 (3)查询:查询年龄在 20 ~ 30 岁之间的用户

//Wrapper我们写一些复杂的sql就可以使用它来替代!
    @RequestMapping("/mapperTest3")
    @ResponseBody
    public void mapperTest3(){
        //查询年龄在 20 ~ 30 岁之间的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.between("id",12,14);//区间包括两边
        List<User> users = userMapper.selectList(wrapper);//查询的结果集
        Integer integer = userMapper.selectCount(wrapper);//查询的条数

        users.forEach(System.out::println);
        System.out.println(integer);
    }
           

  (4)查询:模糊查询

//Wrapper我们写一些复杂的sql就可以使用它来替代!
    @RequestMapping("/mapperTest4")
    @ResponseBody
    public void mapperTest4(){
        //模糊查询
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        // 左和右 t%
        wrapper
                .notLike("name","王")//相当于NOT LIKE '%s%'
                .likeRight("username","T");//相当于LIKE 's%'

        List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
        maps.forEach(System.out::println);
    }
           

 (5)查询:模糊查询-在子查询中查出来

@RequestMapping("/mapperTest5")
    @ResponseBody
    public void mapperTest5(){
        //模糊查询-在子查询中查出来
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //子查询
        wrapper.inSql("id","select id from user where id<15");//自己写的sql容易出错

        List<Object> objects = userMapper.selectObjs(wrapper);
        objects.forEach(System.out::println);
    }
           

 (6)查询:查询出来并通过id进行排序

@RequestMapping("/mapperTest6")
    @ResponseBody
    public void mapperTest6(){
        //通过id进行排序
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.orderByAsc("id");

        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }
           

二.分页操作 

1、原始的 limit 进行分页

2、pageHelper 第三方插件

3、MP 其实也内置了分页插件!

  • 1.正常条件配置下

(1).配置拦截器组件

//配置拦截器分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }
           

(2).直接使用Page对象

@RequestMapping("/queryUser4")
    @ResponseBody
    public void testPage(){
        //参数一:当前页
        //参数二:页面大小
        Page<User> page = new Page<>(1, 3);
        IPage<User> userIPage = userMapper.selectPage(page, null);
        page.getRecords().forEach(System.out::println);
        System.out.println(page.getTotal());//总条数
    }
           
  • 2.在Springboot中进行配置时

需要单独建一个类,com.benniu.xxx./config/MybatisPlusConfig.java

剩下的直接像上面一样进行调用就行。

package com.benniu.mybatis_plus1;
/**
 * Created with IntelliJ IDEA.
 * User: Wang
 * Date: 2020/8/18
 * Time: 15:54
 */
//Spring boot方式
@EnableTransactionManagement
@Configuration
@MapperScan("com.benniu.mybatis_plus1.mapper")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        //paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize());
        return paginationInterceptor;
    }
}
           

@MapperScan("com.kuang.mapper")

@MapperScan("com.kuang.mapper")

继续阅读