添加依赖

  • mybatis-plus
  • mysql驱动
  • druid数据库连接池【可选】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

<!--Druid数据库连接池,可以不加,使用默认的数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>

配置数据源

  • 使用druid数据源

    1
    2
    3
    4
    5
    6
    7
    spring:
    datasource:
    druid:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: root
  • 使用默认数据源

    1
    2
    3
    4
    5
    6
    spring:
    datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: root

当我们在Mapper包下创建接口时,为了表示此接口为Mapper接口。

有两种选择:

  • 在每个Mapper接口上使用@Mapper注解。

    1
    2
    3
    @Mapper
    public interface UserMapper extends BaseMapper<User> {
    }
  • 在启动类上配置Mapper扫描

    1
    2
    3
    4
    5
    6
    7
    @SpringBootApplication
    @MapperScan("com.example.mapper")
    public class Application {
    public static void main(String[] args) {
    SpringApplication.run(Application.class,args);
    }
    }

设置表名的映射规则

默认情况下MP操作的表名就是实体类的类名,但是如果表名和类名不一致就需要我们自己设置映射规则。

如果不进行表名映射规则的设定,则需要数据库的表名实体类名要保持一致。

如果不一致,有两种设置方法

  • 单独设置

    可以在实体类的类名上加上@TableName注解进行标识。

    如果表名是tb_user,而实体类名是User则可以使用以下写法。

    1
    2
    3
    4
    @TableName("tb_user")
    public class User {
    //....
    }
  • 全局设置

    如果数据库中的表,都有一个公共的前缀

    比如:

    • 数据库表:sys_user,sys_menu,sys_dish…

    • 实体类:User,Menu,Dish

    然后就可以在配置文件中,全局设置表名前缀

    1
    2
    3
    4
    5
    mybatis-plus:
    global-config:
    db-config:
    #表名前缀
    table-prefix: sys_

设置主键生成策略

Mybatis Plus 为我们提供了三种设置 主键生成策略的方式。它们的优先级顺序是:局部注解 > 全局 > 默认(雪花算法)。

Mybatis Plus如果不做任何主键策略配置,默认使用的是雪花算法。该策略会根据雪花算法生成主键ID,主键类型为Long或String

  • 局部注解

    我们可以在实体类的Id字段上使用@TableId注解,例如

    1
    2
    3
    4
    5
    6
    7
    8
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    //.....
    }

    全部主键策略定义在了枚举类IdType中,IdType有如下的取值

    • AUTO

      数据库ID自增,依赖于数据库。该类型请确保数据库设置了 ID自增 否则无效

    • NONE

      未设置主键类型。若在代码中没有手动设置主键,则会根据主键的全局策略自动生成(默认的主键全局策略是基于雪花算法的自增ID)

    • INPUT

      需要手动设置主键,若不设置。插入操作生成SQL语句时,主键这一列的值会是null

    • ASSIGN_ID

      当没有手动设置主键,即实体类中的主键属性为空时,才会自动填充,使用雪花算法

    • ASSIGN_UUID

      当实体类的主键属性为空时,才会自动填充,使用UUID

  • 全局配置

    1
    2
    3
    4
    5
    mybatis-plus:
    global-config:
    db-config:
    # id生成策略 auto为数据库自增
    id-type: auto

设置字段映射规则

默认情况下MP会根据实体类的属性名去映射表的列名。

也就是说,在什么都不配置的情况下,实体类的属性名映射表的列名必须一致。

如果不一致,可以使用@TableField来设置映射关系。例如:

1
2
@TableField("address")//列名为address,字段名为addressStr
private String addressStr;

设置字段和列名的驼峰映射

默认情况下MP会开启字段名列名的驼峰映射, 即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射 。

属性名/类名 列名/表名
userName user_name
passWord pass_word

我们可以在配置文件中关闭这中映射

1
2
3
mybatis-plus:
configuration:
map-underscore-to-camel-case: false

日志

配置方式如下:

1
2
3
4
mybatis-plus:
configuration:
# 日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

__END__