一、可重用性
Mybatis-plus作为Mybatis的扩展工具,提供了丰富的功能让开发更加高效便捷。其中之一的条件构造器可以帮助我们构建各种查询条件,而且支持链式调用,非常适合多条件查询,可以让代码更加简洁,易读易懂。例如:
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getName, "张三").eq(User::getSex, "男"); List<User> userList = userService.list(wrapper);
上述代码中,我们使用了LambdaQueryWrapper构造器,通过调用eq方法添加查询条件,最终得到用户列表。该构造器还支持很多其他的查询条件,例如like、in、between、isNull等等,且这些条件可以组合使用,非常灵活方便。
二、自动填充字段
在实际开发中,我们经常需要记录创建时间、更新时间、创建人、更新人等信息,Mybatis-plus也为我们提供了自动填充功能,可以在插入和更新操作时自动填充这些字段。具体实现如下:
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
LocalDateTime now = LocalDateTime.now();
this.setFieldValByName("createTime", now, metaObject);
this.setFieldValByName("updateTime", now, metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
}
上述代码中,我们实现了Mybatis-plus提供的MetaObjectHandler接口,重写了insertFill和updateFill方法,在插入和更新操作时分别设置了createTime和updateTime字段的值。这样,我们在插入或更新实体时不用手动赋值,Mybatis-plus会自动填充。
三、分页查询
分页查询是Web应用的常见需求之一,Mybatis-plus也提供了分页查询的功能,非常方便。我们只需要在查询条件中添加分页信息,然后调用相关方法即可,如下所示:
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getName, "张三").eq(User::getSex, "男"); Page<User> page = new Page<>(1, 10); IPage<User> userPage = userService.page(page, wrapper); List<User> userList = userPage.getRecords();
上述代码中,我们使用了分页查询的方法page,第一个参数是当前页数,第二个参数是每页记录数。我们还使用了IPage接口,通过getRecords方法获取当前页的记录列表,非常方便。
四、动态SQL拼装
Mybatis-plus的条件构造器不仅支持基本的查询条件,还支持动态SQL拼装,配合注解使用可以生成更加复杂的SQL语句。例如我们需要查询名字是“张三”或者“李四”的用户,可以使用如下代码:
@Select({"<script>",
"SELECT * FROM user WHERE 1=1",
"<when test='name != null'>",
"AND name in",
"<foreach item='item' index='index' collection='name' open='(' separator=',' close=')'>",
"#{item}",
"</foreach>",
"</when>",
"</script>"})
List<User> findUserList(@Param("name") List<String> name);
上述代码中,我们使用了@Select注解和${}占位符语法,通过动态SQL拼装实现了查询名字是“张三”或“李四”的用户。
五、代码生成器
Mybatis-plus还提供了代码生成器的功能,可以根据数据库表结构自动生成实体、Mapper、Service等相关代码,大大提高了开发效率。使用该功能非常简单,只需要配置相关参数,运行代码生成器即可。示例如下:
public class CodeGenerator {
public static void main(String[] args) {
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)
.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8")
.setUsername("root")
.setPassword("root");
// 全局配置
GlobalConfig config = new GlobalConfig();
config.setActiveRecord(true)
.setAuthor("coder-pig")
.setOutputDir("D:\\src\\main\\java")
.setFileOverride(true);
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setCapitalMode(true)
.setNaming(NamingStrategy.underline_to_camel)
.setInclude("user");
// 包配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.coderpig")
.setMapper("mapper")
.setEntity("entity")
.setService("service")
.setServiceImpl("service.impl")
.setController("controller");
// 代码生成器
AutoGenerator generator = new AutoGenerator();
generator.setDataSource(dataSourceConfig)
.setGlobalConfig(config)
.setStrategy(strategyConfig)
.setPackageInfo(packageConfig);
// 执行
generator.execute();
}
}
上述代码中,我们配置了数据源信息、输出目录、生成策略、包配置等参数,并通过执行generator.execute()方法启动代码生成器。生成的代码文件可以直接拷贝到项目中使用,非常方便快捷。
原创文章,作者:AJQYP,如若转载,请注明出处:https://www.506064.com/n/372934.html
微信扫一扫
支付宝扫一扫