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>