日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁查詢實(shí)現(xiàn)方法

瀏覽:38日期:2023-10-21 18:07:10

一、前言

最近在加強(qiáng) ITAEM 團(tuán)隊(duì)的一個(gè) app 項(xiàng)目——學(xué)生教師學(xué)習(xí)交流平臺(tái)人員組成:安卓 + 前端 + 后臺(tái)后臺(tái) DAO 層借鑒了華工其他軟件開發(fā)團(tuán)隊(duì),使用了新穎強(qiáng)大的 MyBatisPlus 框架,里邊有一個(gè)類似百度貼吧的發(fā)帖子的功能:

最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁查詢實(shí)現(xiàn)方法

而如果設(shè)計(jì)表,應(yīng)為

帖子表 t_post- id- title 標(biāo)題- content 內(nèi)容- xx- user_id 用戶外鍵 用戶表 t_user+ id+ name 帖子發(fā)起者名字+ xx

示例圖中紅色框中的內(nèi)容為 t_user 表的字段 name,而要實(shí)現(xiàn)上面顯示帖子,就要用到關(guān)聯(lián)查詢了,而且帖子很多,必須用分頁查詢,

那么,怎么通過 MyBatisPlus 來實(shí)現(xiàn)關(guān)聯(lián)、分頁查詢呢 ?很簡(jiǎn)單,往下看。

二、需求、數(shù)據(jù)庫表設(shè)計(jì)

這是個(gè)人 app 項(xiàng)目中 v1.0 版本的部分表。

最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁查詢實(shí)現(xiàn)方法

需求:顯示帖子

要帖子基本內(nèi)容如時(shí)間、帖子內(nèi)容等,即 t_question 表的內(nèi)容全部要,

同時(shí)還要發(fā)帖子的人名字,即 t_student 的字段 name

三、代碼結(jié)構(gòu)

為了寫這篇文章,抽取了該 app 項(xiàng)目中的部分代碼,彼此相互關(guān)系如下圖

最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁查詢實(shí)現(xiàn)方法

四、代碼實(shí)現(xiàn)

1、代碼已經(jīng)放到 github 上了,若對(duì)本文的代碼有疑問可以去 github 上查看詳情:https://github.com/larger5/MyBatisPlus_page_tables.git

2、entity、mapper、service、controller 使用了 MyBatisPlus 的代碼生成器,自動(dòng)生成大部分基礎(chǔ)的代碼,操作方法見之前的文章:在 SpringBoot 中引入 MyBatisPlus 之 常規(guī)操作

1.實(shí)體

① Question

// import 省略@TableName('t_question')public class Question implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = '問答主鍵id') @TableId(value = 'id', type = IdType.AUTO) private Integer id; @ApiModelProperty(value = '學(xué)生外鍵id') @TableField('student_id') private Integer studentId; @ApiModelProperty(value = '問題內(nèi)容') private String content; @ApiModelProperty(value = '問題發(fā)布時(shí)間,發(fā)布的時(shí)候后臺(tái)自動(dòng)生成') private Date date; @ApiModelProperty(value = '問題懸賞的積分') private Integer value;// getter、setter 省略}

② Student

// import 省略@TableName('t_student')public class Student implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = '學(xué)生主鍵id') @TableId(value = 'id', type = IdType.AUTO) private Integer id; @ApiModelProperty(value = '學(xué)生名稱') private String name; @ApiModelProperty(value = '學(xué)生密碼') private String password; @ApiModelProperty(value = '學(xué)生積分?jǐn)?shù)') private Integer points; @ApiModelProperty(value = '學(xué)生郵件地址') private String email; @ApiModelProperty(value = '學(xué)生手機(jī)號(hào)碼') private String phone; @ApiModelProperty(value = '學(xué)生學(xué)號(hào)') private String num; @ApiModelProperty(value = '學(xué)生真實(shí)姓名') @TableField('true_name') private String trueName;// getter、setter 省略}

2.mapper

① StudentMapper

// import 省略public interface StudentMapper extends BaseMapper<Student> {}

② QuestionMapper

// import 省略public interface QuestionMapper extends BaseMapper<Question> { /** * * @param page 翻頁對(duì)象,可以作為 xml 參數(shù)直接使用,傳遞參數(shù) Page 即自動(dòng)分頁 * @return */ @Select('SELECT t_question.*,t_student.`name` FROM t_question,t_student WHERE t_question.student_id=t_student.id') List<QuestionStudentVO> getQuestionStudent(Pagination page);}

3、service

① StudentService

// import 省略public interface StudentService extends IService<Student> {}

② QuestionService

// import 省略public interface QuestionService extends IService<Question> { Page<QuestionStudentVO> getQuestionStudent(Page<QuestionStudentVO> page);}

4、serviceImpl

① StudentServiceImpl

// import 省略@Servicepublic class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {}

② QuestionServiceImpl

// 省略 import@Servicepublic class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> implements QuestionService { @Override public Page<QuestionStudentVO> getQuestionStudent(Page<QuestionStudentVO> page) { return page.setRecords(this.baseMapper.getQuestionStudent(page)); }}

5、controller

// 省略 import@RestController@RequestMapping('/common')@EnableSwagger2public class CommonController { @Autowired QuestionService questionService; @Autowired StudentService studentService; @GetMapping('/getAllQuestionByPage/{page}/{size}') public Map<String, Object> getAllQuestionByPage(@PathVariable Integer page, @PathVariable Integer size) { Map<String, Object> map = new HashMap<>(); Page<Question> questionPage = questionService.selectPage(new Page<>(page, size)); if (questionPage.getRecords().size() == 0) { map.put('code', 400); } else { map.put('code', 200); map.put('data', questionPage); } return map; } @GetMapping('/getAllQuestionWithStudentByPage/{page}/{size}') public Map<String, Object> getAllQuestionWithStudentByPage(@PathVariable Integer page, @PathVariable Integer size) { Map<String, Object> map = new HashMap<>(); Page<QuestionStudentVO> questionStudent = questionService.getQuestionStudent(new Page<>(page, size)); if (questionStudent.getRecords().size() == 0) { map.put('code', 400); } else { map.put('code', 200); map.put('data', questionStudent); } return map; }}

6、MyBatisPlus 配置

// 省略 import@EnableTransactionManagement@Configuration@MapperScan('com.cun.app.mapper')public class MybatisPlusConfig { /** * 分頁插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } /** * 打印 sql */ @Bean public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); //格式化sql語句 Properties properties = new Properties(); properties.setProperty('format', 'true'); performanceInterceptor.setProperties(properties); return performanceInterceptor; }}

7、關(guān)聯(lián)查詢 VO 對(duì)象

// import 省略public class QuestionStudentVO implements Serializable { @ApiModelProperty(value = '問答主鍵id') @TableId(value = 'id', type = IdType.AUTO) private Integer id; @ApiModelProperty(value = '學(xué)生外鍵id') @TableField('student_id') private Integer studentId; private String name; @ApiModelProperty(value = '問題內(nèi)容') private String content; @ApiModelProperty(value = '問題發(fā)布時(shí)間,發(fā)布的時(shí)候后臺(tái)自動(dòng)生成') private Date date; @ApiModelProperty(value = '問題懸賞的積分') private Integer value;// getter、setter 省略

五、測(cè)試接口

最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁查詢實(shí)現(xiàn)方法

1、沒有關(guān)聯(lián)的分頁查詢接口

http://localhost/common/getAllQuestionByPage/1/2

① json 輸出

{ 'code': 200, 'data': { 'total': 10, 'size': 2, 'current': 1, 'records': [ { 'id': 1, 'studentId': 3, 'content': '唐代,渝州城里,有一個(gè)性格開朗、樂觀的小伙子,名叫景天。', 'date': 1534497561000, 'value': 5 }, { 'id': 2, 'studentId': 1, 'content': '雪見從小父母雙亡,由爺爺唐坤撫養(yǎng)成人。', 'date': 1533201716000, 'value': 20 } ], 'pages': 5 }}

② sql 執(zhí)行

最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁查詢實(shí)現(xiàn)方法

2、多表關(guān)聯(lián)、分頁查詢接口

http://localhost/common/getAllQuestionWithStudentByPage/1/2

① json 輸出

{ 'code': 200, 'data': { 'total': 10, 'size': 2, 'current': 1, 'records': [ { 'id': 1, 'studentId': 3, 'name': 'vv', 'content': '唐代,渝州城里,有一個(gè)性格開朗、樂觀的小伙子,名叫景天。', 'date': 1534497561000, 'value': 5 }, { 'id': 2, 'studentId': 1, 'name': 'cun', 'content': '雪見從小父母雙亡,由爺爺唐坤撫養(yǎng)成人。', 'date': 1533201716000, 'value': 20 } ], 'pages': 5 }}

② sql 執(zhí)行

最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁查詢實(shí)現(xiàn)方法

六、小結(jié)

寫本文的原因:

①網(wǎng)上有做法不合時(shí)宜的文章(自定義page類、配置版)②官方文檔使用的是配置版的,筆者采用注解版的

MyBatis 配置版 MyBatis 注解版 ① 動(dòng)態(tài) sql 靈活、② xml 格式的 sql,可拓展性好 ① 少一個(gè)設(shè)置,少一個(gè)錯(cuò)誤爆發(fā)點(diǎn)、② 代碼清晰優(yōu)雅

當(dāng)然,智者見智仁者見仁

參考資料:MyBatisPlus 官方文檔:分頁插件:方式一 、傳參區(qū)分模式【推薦】

到此這篇關(guān)于最簡(jiǎn)單的MyBatis Plus的多表聯(lián)接、分頁查詢實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)MyBatis Plus多表聯(lián)接、分頁查詢內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Mybatis 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜国产一区二区| 欧美欧美黄在线二区| 蜜桃视频在线观看一区二区| 国产精品久久久久久妇女| 中文字幕一区二区三区在线视频| 国产真实久久| 欧美粗暴jizz性欧美20| 欧美日韩尤物久久| 中文字幕成在线观看| 久久久久久久欧美精品| 日本免费一区二区视频| 日韩**一区毛片| 久久国产三级精品| 国产精品久久久久毛片大屁完整版| 青草国产精品| 美女久久久久久 | 麻豆中文一区二区| 成人在线黄色| 久久精品亚洲人成影院| 国产视频一区欧美| 日韩国产欧美视频| 精品香蕉视频| 在线精品视频在线观看高清| 久久最新视频| 国产精品玖玖玖在线资源| 综合日韩av| 日av在线不卡| 欧美成人精品午夜一区二区| 麻豆视频在线看| 在线国产日韩| 免费一级欧美片在线观看网站| 伊人久久国产| 亚洲欧美专区| www在线观看黄色| 日韩在线成人| 日韩欧美中文| 日本不卡视频在线观看| 国产96在线亚洲| 中文不卡在线| 欧美男人天堂| 日韩国产欧美在线播放| 欧美午夜精彩| 国产一区精品福利| 亚洲一区有码| 欧美亚洲精品在线| 欧美日韩一区二区三区在线电影| 国产aⅴ精品一区二区三区久久 | 久久久久久色| 91久久国产| 激情综合五月| 久久国产免费看| 美女精品在线| 亚洲成人精品| 精品三区视频| 国产精品久一| 日本一不卡视频| 美女精品一区| 欧美日韩免费观看一区=区三区| 久久精品一区二区国产| 视频一区二区三区在线| 久久久成人网| 鲁鲁在线中文| 久久久久久久欧美精品| 亚洲欧洲美洲av| 久久国产精品免费精品3p| 亚洲在线成人| 欧美精品黄色| 欧美日韩精品免费观看视完整| 国产三级精品三级在线观看国产| 亚洲激情国产| 999在线观看精品免费不卡网站| 日本在线精品| 亚洲性视频h| 欧美精品羞羞答答| 99精品一区| 久久久久国产| 激情久久久久久久| 国产粉嫩在线观看| 精品欧美一区二区三区在线观看| 精品一区二区三区四区五区| 国产精品4hu.www| 国际精品欧美精品| 欧美日韩精品免费观看视完整| 四虎4545www国产精品 | 美女av一区| 国产精品成人一区二区不卡| 97se综合| 樱桃成人精品视频在线播放| 免费在线观看成人| 国产精品第十页| 黄色在线网站噜噜噜| 国模 一区 二区 三区| 亚洲不卡系列| 亚洲精品字幕| 久久天堂影院| 久久在线电影| 亚洲视频国产| 亚洲二区精品| 国产乱码精品一区二区三区亚洲人| 久久精品99国产精品日本| 日韩高清欧美激情| 亚洲精品精选| 国产精品高潮呻吟久久久久| 亚洲精品福利| 国产精一区二区| 青青久久av| 国产精品欧美大片| 日韩精品诱惑一区?区三区| 樱桃成人精品视频在线播放| 国产精品国码视频| 国产亚洲电影| 尹人成人综合网| 福利一区在线| 国产日韩高清一区二区三区在线 | 伊人久久大香线蕉av不卡| 日韩欧乱色一区二区三区在线| 欧美日韩在线播放视频| 久久久久久一区二区| 日本精品一区二区三区在线观看视频| 亚洲午夜久久久久久尤物| av高清不卡| 国产一区一一区高清不卡| 久久国产麻豆精品| 日本午夜精品一区二区三区电影| 国产精品13p| 国产精久久一区二区| 少妇高潮一区二区三区99| 91精品尤物| 日本成人在线一区| 免费看的黄色欧美网站| 午夜欧美精品久久久久久久| 欧美交a欧美精品喷水| 亚洲一二三区视频| 久久高清免费| 国语对白精品一区二区| 日本不卡不码高清免费观看| 欧美日韩国产一区精品一区| 在线观看精品| 亚洲精品在线观看91| 高潮久久久久久久久久久久久久| 少妇精品久久久一区二区| 亚洲欧美日韩专区| 婷婷综合电影| 日韩欧美久久| 日韩av一区二| 精品美女视频 | 欧美日韩国产一区二区在线观看| 伊人影院久久| 九九久久婷婷| 日韩.com| 黄色aa久久| 高清av不卡| 久久人人97超碰国产公开结果| 国产夫妻在线| 国产精品网在线观看| 美日韩一区二区三区| 麻豆精品久久| 精品深夜福利视频| 日韩在线短视频| 999久久久亚洲| 日韩精品社区| 国产精品白丝av嫩草影院| 久久麻豆视频| 国产精品午夜av| 国产精品色在线网站| 日韩一区二区三区免费播放| 99国产精品一区二区| 国产精品毛片| 国产精品xxxav免费视频| 在线人成日本视频| 777久久精品| 精品国产美女a久久9999| av在线最新| 国产精品三级| 国产国产精品| 国产精品qvod| 日韩av一区二区在线影视| 日本精品黄色| 中文无码日韩欧| 亚洲开心激情| 国产精品日韩久久久| 欧美成人aaa| 中文字幕一区二区av| 亚洲一级在线| 国产va在线视频| 91精品啪在线观看国产爱臀| 日韩电影二区| 极品av在线| 国产欧美精品| 亚洲乱码一区| 亚洲精品国模| 亚州av乱码久久精品蜜桃| 国产情侣久久| 欧美黑人做爰爽爽爽| 久久福利一区| 国际精品欧美精品| 国产亚洲欧美日韩精品一区二区三区| 精品一区在线| 日韩不卡在线| 成人一区而且|