一、可重用性
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/zh-hant/n/372934.html
微信掃一掃
支付寶掃一掃