3 Mybatis-Plus常见配置

在MP中有大量的配置,其中有一部分是Mybatis原生的配置,另一部分是MP的配置,详情:

https://mp.baomidou.com/config/

下面我们对常用的配置做讲解。

3.1 configLocation

configLocation即MyBatis 配置文件位置,如果您有单独的 MyBatis 配置,请将其路径配置到 configLocation中。

MyBatis Configuration 的具体内容请参考MyBatis 官方文档

示例:

1 在resources下创建mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!--<plugins>-->
    <!--<plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></plugin>-->
    <!--</plugins>-->

</configuration>

2 在application.yml下配置configLocation,如下:

spring:
  application:
    name: glls-mp-sb
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    username: root
    password: 123456
logging:
  level:
    root: debug
mybatis-plus:
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath*:mybatis/mapper/*.xml

3.2 mapperLocations

mapperLocations即MyBatis Mapper 所对应的 mapper配置 文件位置,如果您在 Mapper 中有自定义方法

(XML 中有自定义实现),需要进行该配置,告诉 Mapper 所对应的 XML 文件位置。

如果不配置mapperLocations时,mapper的xml文件存放路径需要和mapper class文件保持一致,文件名保持 一致,如下:

测试:

新建UserMapper.xml:

将此文件放在resources/cn/yh/mp/mapper下

<?xml versinotallow="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.glls.mp.mapper.UserMapper">
    <select id="findById" resultType="com.glls.mp.pojo.User" parameterType="java.lang.Long">
        select * from tb_user where id = #{id}
    </select>
</mapper>
//在UserMapper接口类中新增findById方法
package com.glls.mp.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.glls.mp.pojo.User;

public interface UserMapper extends BaseMapper<User> {
    User findById(Long id);
}

测试用例:

@Test
public void testFindById() {
    User user = userMapper.findById(2L);
    System.out.println(user);
}

运行结果:

也可以给mapper XML文件定义一个和mapper接口不同的存放路径 ,如下:

mybatis-plus:
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath*:mybatis/mapper/*.xml
  type-aliases-package: com.glls.mp.pojo

Maven 多模块项目的扫描路径需以classpath*开头 (即加载多个类路径下的 XML 文件)

3.3 typeAliasesPackage

设置MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名)。

示例:

mybatis-plus:
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath*:mybatis/mapper/*.xml
  type-aliases-package: com.glls.mp.pojo
  
#配合 注解
@Alias("user")
public class User {
    ......
}
#映射文件
<select id="findById" resultType="user" parameterType="java.lang.Long">
    select * from tb_user where id = #{id}
</select>

3.4 mapUnderscoreToCamelCase

  • 类型: boolean
  • 默认值: true

是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java

属性名 aColumn(驼峰命名) 的类似映射。

注意:

在 MyBatis-Plus 中此属性默认值为true,用于生成最终的 SQL 语句

如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名

测试:

#开启自动驼峰映射,注意:配置configuration.map-underscore-to-camel-case则不能配置config-location 
mybatis-plus.configuration.map-underscore-to-camel-case=true

1 屏蔽@TableField

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user") 
public  class  User  {
    @TableId("ID")
    private Long id;
    //  @TableField("USER_NAME")
    private String userName;   //驼峰命名,则无需注解
    //@TableField("PASSWORD") 
    private String   password;
    //@TableField("NAME") 
    private String   name;
    //@TableField("AGE") 
    private Integer   age;
    //@TableField("EMAIL") 
    private String   email;
    //@TableField("BIRTHDAY") 
    private LocalDateTime birthday;
}

2 测试userMapper.findById方法

跟踪发现userName可以映射成功。

如果项目中有符合驼峰规则的定义也有不符合的,此时建议统一使用@TableField。

3.如果使用mybatis-config.xml的同时在application.properties配置mybatis-plus.configuration则报错

Property 'configuration' and 'configLocation' can not specified with together

解决方法:

只使用一种配置方法。

本案例屏蔽mybatis-plus.configuration.map-underscore-to-camel-case=true,在mybatis-config.xml中配置

settings。

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>