数据库CURD必备搭档mybatis plus详解
什么是MyBatis Plus
MyBatis Plus是一个基于MyBatis的增强工具,简化了MyBatis的操作,减少了开发人员的工作量,让开发人员能够更加专注于业务逻辑的实现。
MyBatis Plus的常用功能
- 快速Mapper接口的开发
- 自动分页
- 自动注入公共字段
- 代码生成器
快速开发Mapper接口
MyBatis Plus 提供了一个BaseMapper接口,这个接口实现了一些CRUD的基本方法,我们可以通过继承这个接口,快速开发Mapper接口。
public interface UserMapper extends BaseMapper<User> {
// 自定义Mapper接口方法
List<User> selectAll();
}
以上代码我们就定义了一个UserMapper的接口,并且继承了BaseMapper接口,我们不需要再去编写一些基本的SQL语句,就可以直接使用BaseMapper的方法进行CRUD操作。如果我们还需要自定义一些语句,可以在接口中定义其他方法。
自动分页功能
// 手动实现分页
Page<User> page = new Page<>(1, 10);
List<User> userList = userMapper.selectPage(page, null);
page.setRecords(userList);
// 使用自动分页
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 20);
IPage<User> userIPage = userMapper.selectPage(new Page<>(1, 10), wrapper);
List<User> users = userIPage.getRecords();
以上代码我们使用了自动分页的功能,只需要在传入Page参数的时候,同时传入查询条件即可,查询结果会自动分页返回。
自动注入公共字段
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createBy", Long::valueOf, "admin");
this.strictInsertFill(metaObject, "createTime", Date::new, new Date());
this.strictInsertFill(metaObject, "updateBy", Long::valueOf, "admin");
this.strictInsertFill(metaObject, "updateTime", Date::new, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateBy", Long::valueOf, "admin");
this.strictUpdateFill(metaObject, "updateTime", Date::new, new Date());
}
}
以上代码我们定义了一个 MyMetaObjectHandler 的类,并实现了 MetaObjectHandler 接口,然后重写了它的 insertFill 和 updateFill 方法,在这两个方法里,我们将公共字段以及对应的值进行设置,接下来我们在需要自动设置的实体类上加上 @TableField 注解即可。
@Data
@TableName(value = "t_user")
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField(value = "name")
private String name;
@TableField(value = "age")
private Integer age;
@TableField(value = "email")
private String email;
}
MyBatis Plus的代码生成器
MyBatis Plus 还提供了一个代码生成器,可以根据已有的数据库结构,自动生成对应的实体类、Mapper接口以及Mapper.xml文件。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.2</version>
</dependency>
以上代码我们需要在项目中引入 mybatis-plus-generator 的依赖,并添加以下代码,来生成对应文件。
public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
String projectPath = System.getProperty("user.dir");
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("authorName");
gc.setOpen(false);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("test");
pc.setParent("com.example");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setTablePrefix("t_");
strategy.setInclude("t_user");
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
mpg.setStrategy(strategy);
// Mapper 配置
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
//执行生成
mpg.execute();
}
}
以上代码我们定义了一个 CodeGenerator 的类,主要设置了文件输出路径、作者,数据库连接信息以及生成器的包策略,我们只需要将它运行一次,就可以生成所需的 Mapper 接口、实体类和 Mapper.xml 文件。
总结
MyBatis Plus作为MyBatis的一个增强工具,提供了许多方便开发者使用的功能,如快速开发Mapper接口,自动分页,自动注入公共字段以及代码生成器等功能。在实际开发中,可以大幅度提高开发效率,减少了开发人员的工作量,使开发人员更加专注业务逻辑实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:数据库CURD必备搭档mybatis plus详解 - Python技术站