文章目录

  • 学习
  • (转)Mybatis-Plus 的 实体类 注解(@TableName,@TableFiled)
  • 参考
  • 入门demo
  • ==注意==
  • pom 依赖
  • application.yml 配置文件
  • pojo
  • dao
  • service
  • controller
  • config(mybatisPlus分页插件)
  • 启动类


学习

(引)MyBatis-Plus使用1

(引)MyBatis-Plus使用2

(转)Mybatis-Plus 的 实体类 注解(@TableName,@TableFiled)

mybatis-plus 从2.x到3.x升级指南
注意:EntityWrapper<T>更名为QueryWrapper<T>,新增一个实现类UpdateWrapper<T>用于update方法

参考

【Springboot整合MybatisPlus(超详细)完整教程~】
【springboot整合Mybatis-plus】

入门demo

注意

  • application.yml中的mybatis-plus.mapper-locations用于指定 加载 mapper.xml文件。
  • 在xml中的namespace指定对应的接口(这样就不用创建接口的实现类了)。
  • 启动类的@MapperScan注解用来 扫描接口

在MyBatis中,Mapper中的namespace用于绑定Dao接口的,即面向接口编程。

它的好处在于当使用了namespace之后就可以不用写接口实现类,业务逻辑会直接通过这个绑定寻找到相对应的SQL语句进行对应的数据处理

sqlSession
student = (Student) session.selectOne("com.domain.Student.selectById", new Integer(10));

demo gitee:https://gitee.com/braverZ/demo-mybatis-plus.git

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.2.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0</version>
    <name>demo-mybatis-plus</name>
    <description>Demo project for Spring Boot With MP</description>

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

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

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>-->

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.32</version>
        </dependency>
        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.14</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>

application.yml 配置文件

server:
  port: 9011
spring:
  application:
    name: SWC-MP
  datasource:
    username: root
    password: 123
    url: jdbc:mysql://localhost:3306/dongyimaidb?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=UTF-8
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource  # 数据源
    filters: stat  #开启监控过滤器

mybatis-plus:
  # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
  # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
  #  mapper-locations扫描的是 mapper.xml ,xml中的namespace对应接口。 @MapperScan 扫描接口
  mapper-locations: classpath:mybatis/mappers/*Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔 .别名
  typeAliasesPackage: com.example.demo.pojo
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 0
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 1
    #驼峰下划线转换
    #db-column-underline: true
    #刷新mapper 调试神器
    #refresh-mapper: true
    #数据库大写下划线转换
    #capital-mode: true
    # Sequence序列接口实现类配置
    #key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
    #逻辑删除配置(下面3个配置)
    #logic-delete-value: 1
    #logic-not-delete-value: 0
    #sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
    #自定义填充策略接口实现
    #meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: true
    #配置JdbcTypeForNull
    jdbc-type-for-null: 'null'

pojo

具体实体中的注解使用参考:

package com.example.demo.pojo;

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.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_brand") // 如果 表名 和 接口名 符合 驼峰转下户线,就不用加@TableName指定表名。(现在表名tb_brand,就不用加这个注解)
public class TbBrand implements Serializable {

// value与数据库主键列名一致,若实体类属性名与表主键列名一致可省略value

    // @TableId(value = "id",type = IdType.AUTO) 自增策略,在application.yml配置了
    private Long id;
    private String name;
    // 若没有开启驼峰命名,或者表中列名不符合驼峰规则,可通过该注解指定数据库表中的列名,exist标明数据表中有没有对应列
    // 在配置文件中,配置了转驼峰命名
    // @TableField(value="first_char",exist = true)
    private String firstChar;
}

dao

只要基本的增删改(mybatisplus自带),不用自己写mapper.xml文件

接口: 继承mybatis plus的 BaseMapper

package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.pojo.TbBrand;

public interface BrandMapper extends BaseMapper<TbBrand> {
}

service

注意:EntityWrapper改成了QueryWrapper
其他操作,看文章开头的帖子

package com.example.demo.service;

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.example.demo.mapper.BrandMapper;
import com.example.demo.pojo.TbBrand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BrandService {

    @Autowired
    private BrandMapper brandMapper;

    public List<TbBrand> findAll(){
        return brandMapper.selectList(null);
    }

    public IPage<TbBrand> findPageByFirstChar(long pageNum,long pageSize,String firstChar){
        IPage<TbBrand> page = brandMapper.selectPage(new Page<TbBrand>(pageNum, pageSize),
                new QueryWrapper<TbBrand>()
                        .eq("first_char", firstChar));
        System.out.println(page.getRecords());
        System.out.println("总条数:"+page.getTotal());
        return page;
    }
}

controller

package com.example.demo.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.demo.pojo.TbBrand;
import com.example.demo.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.bind.DefaultValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/brand")
public class BrandController {
    @Autowired
    private BrandService brandService;

    @RequestMapping("/findList")
    public List<TbBrand> findList(){
        return brandService.findAll();
    }


    @RequestMapping("/page/{num}/{size}/{firstC}")
    public IPage<TbBrand> findPageByFirstChar(@PathVariable("num") Long num
            , @PathVariable("size") Long size, @PathVariable("firstC")String firstC){

        return brandService.findPageByFirstChar(num,size,firstC);

    }
}

config(mybatisPlus分页插件)

package com.example.demo.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

启动类

注意:@MapperScan("com.example.demo.mapper") 扫描mapper接口

package com.example.demo;

import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoMybatisPlusApplication {

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

}