今天在優(yōu)化項(xiàng)目的時(shí)候番枚,偶爾發(fā)現(xiàn)了一種分頁查詢的方法。其目的是损敷,在分頁查詢的同時(shí)查出數(shù)據(jù)總記錄數(shù)并實(shí)現(xiàn)模糊查詢功能葫笼。并且,在以往的分頁查詢上拗馒,如果要使用模糊查詢路星,則模糊查詢出來的總記錄數(shù)可能出現(xiàn)問題。使用改方法可以優(yōu)化代碼瘟忱。
本項(xiàng)目使用的是springboot,mybatis,druid連接池
以下貼上源碼:
①?resultMap="trainResultMap,count"注意:?resultMap里有兩個(gè)函數(shù)奥额,第一個(gè)為多表關(guān)聯(lián)的映射map的Id苫幢,第二個(gè)則是id為count的resultMap查詢總記錄數(shù)方法
② 這里使用了兩條sql語句访诱。首頁通過默認(rèn)條件查詢數(shù)據(jù)并分頁垫挨,并且提供模糊查詢功能,且查詢總記錄數(shù)方法是在前一條sql語句基礎(chǔ)上執(zhí)行而成
①?baseMapper.queryPageByStuId用于調(diào)用dao方法
②?(List) list.get(0)用于取返回的函數(shù)map集合的第一個(gè)函數(shù)List集合
③?((List) list.get(1)).get(0)用于取返回函數(shù)map集合的第二個(gè)函數(shù)count數(shù)據(jù)總數(shù)
以下為踩坑記錄:
Error querying database. Cause: java.sql.SQLException: sql injection violation, multi-statement not allow報(bào)錯(cuò)原因?yàn)椋涸谝粋€(gè)resultMap中執(zhí)行了多條sql語句
解決方法:
1触菜、首先在數(shù)據(jù)庫配置中啟動(dòng)數(shù)據(jù)庫執(zhí)行多條sql語句操作
在末尾添加? ?allowMultiQueries=true
2九榔、在MybatisPlusConfig配置類中添加以下代碼
3 在數(shù)據(jù)源中添加以下代碼
支持多語句查詢? ?druidDataSource.setProxyFilters(Arrays.asList(new MybatisPlusConfig().wallFilter()));