MybatisPlus是一款Mybatis增强工具,用于简化开发,提高效率。 它在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 mybatis-plus官方文档
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
1. 常用配置
1.1 配置数据库表前缀
mybatis-plus:
global-config:
db-config:
#表名前缀
table-prefix: tb_
1.2 字段映射关系
- 默认情况下MP会根据实体类的属性名去映射表的列名。
如果数据库的列表和实体类的属性名不一致了我们可以使用@TableField
注解的value
属性去设置映射关系。
例如:
如果表中一个列名叫 address而 实体类中的属性名为addressStr则可以使用如下方式进行配置。
@TableField("address")
private String addressStr;
1.3 字段和列名的驼峰映射
- 默认情况下MP是开启字段名列名的驼峰映射的,如需关闭:
mybatis-plus:
configuration:
#是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
map-underscore-to-camel-case: false
1.4 打印日志
mybatis-plus:
configuration:
# 日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2. 常用注解
@TableName
@TableName
注解是加在实体类的类名上- 作用:设置表映射规则
如果表名是tb_user,而实体类名是User则可以使用以下写法。
@TableName("tb_user")
public class User {
//....
}
@TableId
主键生成策略
默认情况下使用MP插入数据时,如果在我们没有设置主键生成策略的情况下默认的策略是基于雪花算法的自增id。如果我们需要使用别的策略可以在定义实体类时,在代表主键的字段上加上
@TableId
注解,使用其type
属性指定主键生成策略。
如:(注:数据库ID必须是自增的,否则无效)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@TableId(type = IdType.AUTO)
private Long id;
//.....
}
全部主键策略定义在了枚举类IdType
中,IdType
有如下的取值:
type | 说明 |
---|---|
AUTO |
数据库ID自增,依赖于数据库。该类型请确保数据库设置了 ID自增 否则无效 |
NONE |
未设置主键类型。若在代码中没有手动设置主键,则会根据主键的全局策略自动生成(默认的主键全局策略是基于雪花算法的自增ID) |
INPUT |
需要手动设置主键,若不设置。插入操作生成SQL语句时,主键这一列的值会是null 。 |
ASSIGN_ID |
当没有手动设置主键,即实体类中的主键属性为空时,才会自动填充,使用雪花算法 |
ASSIGN_UUID |
当实体类的主键属性为空时,才会自动填充,使用UUID |
@TableField
3. 条件构造器(Wrapper)
三、自定义SQL
四、分页查询插件
五、Service层接口
六、代码生成器
一键生成实体类,Mapper接口,Service,Controller等全套代码
依赖:
<!--mybatisplus代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!--模板引擎-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
一键生成:
public class GeneratorTest {
@Test
public void generate() {
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig config = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
// 设置输出到的目录
config.setOutputDir(projectPath + "/src/main/java");
config.setAuthor("lyj");
// 生成结束后是否打开文件夹
config.setOpen(false);
// 全局配置添加到 generator 上
generator.setGlobalConfig(config);
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mp_db?characterEncoding=utf-8&serverTimezone=UTC");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("123456");
// 数据源配置添加到 generator
generator.setDataSource(dataSourceConfig);
// 包配置, 生成的代码放在哪个包下
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.sangeng.mp.generator");
// 包配置添加到 generator
generator.setPackageInfo(packageConfig);
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
// 下划线驼峰命名转换
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
// 开启lombok
strategyConfig.setEntityLombokModel(true);
// 开启RestController
strategyConfig.setRestControllerStyle(true);
generator.setStrategy(strategyConfig);
generator.setTemplateEngine(new FreemarkerTemplateEngine());
// 开始生成
generator.execute();
}
}