Bootstrap

String-Boot中使用Mybatis-Plus

前言

  • 官网地址:https://baomidou.com/

  • 特点:

    • 相对于mybatis来说,它往ORM框架靠拢,使用mybatis-plus后可以不用写映射文件的sql语句,它提供一部分对数据库表的操作方法,继承BaseMapper后,就可以直接调用其中的方法。
操作步骤

1.首先创建一个简单的spring-boot项目

2.导入相关依赖

在pom.xml文件中

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

3.配置

MyBatis-Plus 的配置异常的简单,我们仅需要一些简单的配置即可使用 MyBatis-Plus 的强大功能!

在spring-boot的启动类上配置MapperScan注解

package com.lanou;

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

@SpringBootApplication
@MapperScan(basePackages = {"com.lanou.mapper"})
public class Class21Application {
    public static void main(String[] args) {
        SpringApplication.run(Class21Application.class, args);
    }
}

当然,数据源等配置也不要忘记;在application.properties中配置:

server.port=8080
# 数据源
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis

4.实体类,接口,映射文件

这里我用的是自己数据库中一张名为person的表

1.创建实体类与表的字段对应

package com.lanou.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
//指定表名
@TableName(value = "person")
public class Person {
    //修饰主键,不指定字段默认和字段名一样
    @TableId(type = IdType.AUTO)
    private Integer id;

    //修饰非逐渐字段,默认属性名和字段名一样
    @TableField(value = "name")
    private String name;
    private Integer age;
    private String sex;

    //数据库表中不存在的字段
    @TableField(exist = false)
    private String birth;
}

2.创建接口继承BaseMapper

这样就可以不用我们写方法了

package com.lanou.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lanou.model.Person;
/*
    BaseMapper:mybatis-plus提供的持久层接口,泛型部分指定的是要操作的表对应的实体类
    改接口提供了简单的增删改查方法
 */
public interface PersonMapper extends BaseMapper<Person> {

}

3.创建映射文件

映射文件中只需要指定namespace即可

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 的值设定为被映射的包名.类名 -->
<mapper namespace="com.lanou.mapper.PersonMapper">

</mapper>

5.测试

package com.lanou;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lanou.mapper.PersonMapper;
import com.lanou.model.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.HashMap;
import java.util.Map;

@SpringBootTest

class Class21ApplicationTests {
    @Autowired
    private PersonMapper personMapper;    

    @Test
    void contextLoads(){
//        查
//        personMapper.selectById(1);
        Person person= new Person();
        person.setId(2);
        person.setSex("男");
        person.setAge(20);
        person.setName("舒信豪");
        //添加
//        int row = personMapper.insert(person);
//        System.out.println(row);

        //删除
        personMapper.deleteById(1);
        //删除,多个条件用and连接
        Map<String,Object> where = new HashMap<String,Object>();
        where.put("name","aa");
        where.put("id",100);
        where.put("age",null);
//        personMapper.deleteByMap(where);

        QueryWrapper<Person> wrapper = new QueryWrapper<>();
        /*
            allEq:将map中的内容在SQL条件部分用and连接

            codition:指定的部分是否作为SQL的条件部分,默认为true
            null2IsNull:是否将map中值为null的字段在SQL中表示为 字段名is NULL
            默认为true;false是将map中值为null的键不作为SQL的条件
         */
        wrapper.allEq(true,where,true);
        personMapper.delete(wrapper);
    }
}


}

测试结果
在这里插入图片描述

可以看到测试运行中,我们没有编写sql语句,只是继承BaseMapper后,调用方法,底层自动帮我们执行sql语句,又进一步进少了代码量。

;