成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

最簡單的MyBatis Plus的多表聯接、分頁查詢實現方法

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

一、前言

最近在加強 ITAEM 團隊的一個 app 項目——學生教師學習交流平臺人員組成:安卓 + 前端 + 后臺后臺 DAO 層借鑒了華工其他軟件開發團隊,使用了新穎強大的 MyBatisPlus 框架,里邊有一個類似百度貼吧的發帖子的功能:

最簡單的MyBatis Plus的多表聯接、分頁查詢實現方法

而如果設計表,應為

帖子表 t_post- id- title 標題- content 內容- xx- user_id 用戶外鍵 用戶表 t_user+ id+ name 帖子發起者名字+ xx

示例圖中紅色框中的內容為 t_user 表的字段 name,而要實現上面顯示帖子,就要用到關聯查詢了,而且帖子很多,必須用分頁查詢,

那么,怎么通過 MyBatisPlus 來實現關聯、分頁查詢呢 ?很簡單,往下看。

二、需求、數據庫表設計

這是個人 app 項目中 v1.0 版本的部分表。

最簡單的MyBatis Plus的多表聯接、分頁查詢實現方法

需求:顯示帖子

要帖子基本內容如時間、帖子內容等,即 t_question 表的內容全部要,

同時還要發帖子的人名字,即 t_student 的字段 name

三、代碼結構

為了寫這篇文章,抽取了該 app 項目中的部分代碼,彼此相互關系如下圖

最簡單的MyBatis Plus的多表聯接、分頁查詢實現方法

四、代碼實現

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

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

1.實體

① 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 = '學生外鍵id') @TableField('student_id') private Integer studentId; @ApiModelProperty(value = '問題內容') private String content; @ApiModelProperty(value = '問題發布時間,發布的時候后臺自動生成') 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 = '學生主鍵id') @TableId(value = 'id', type = IdType.AUTO) private Integer id; @ApiModelProperty(value = '學生名稱') private String name; @ApiModelProperty(value = '學生密碼') private String password; @ApiModelProperty(value = '學生積分數') private Integer points; @ApiModelProperty(value = '學生郵件地址') private String email; @ApiModelProperty(value = '學生手機號碼') private String phone; @ApiModelProperty(value = '學生學號') private String num; @ApiModelProperty(value = '學生真實姓名') @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 翻頁對象,可以作為 xml 參數直接使用,傳遞參數 Page 即自動分頁 * @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、關聯查詢 VO 對象

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

五、測試接口

最簡單的MyBatis Plus的多表聯接、分頁查詢實現方法

1、沒有關聯的分頁查詢接口

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

① json 輸出

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

② sql 執行

最簡單的MyBatis Plus的多表聯接、分頁查詢實現方法

2、多表關聯、分頁查詢接口

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

① json 輸出

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

② sql 執行

最簡單的MyBatis Plus的多表聯接、分頁查詢實現方法

六、小結

寫本文的原因:

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

MyBatis 配置版 MyBatis 注解版 ① 動態 sql 靈活、② xml 格式的 sql,可拓展性好 ① 少一個設置,少一個錯誤爆發點、② 代碼清晰優雅

當然,智者見智仁者見仁

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

到此這篇關于最簡單的MyBatis Plus的多表聯接、分頁查詢實現方法的文章就介紹到這了,更多相關MyBatis Plus多表聯接、分頁查詢內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日本久久一区二区| 欧美国产综合| 国产中文字幕一区| 欧美自拍偷拍午夜视频| 亚洲综合999| 在线视频日韩| 亚洲自拍偷拍综合| 国产精品五区| 亚洲成人7777| 日本道色综合久久| 久草这里只有精品视频| 在线视频国内一区二区| 蜜桃视频在线一区| 欧美群妇大交群中文字幕| 国产一区二区美女诱惑| 欧美一区二区三区电影| 国产综合色在线| 91精品免费观看| 福利电影一区二区| 久久久久久电影| 欧美色图麻豆| 一区二区三区四区在线| 国产精品视频福利| 日韩av电影免费观看高清完整版 | 日韩午夜小视频| 国产精品影视天天线| 欧美一区二区大片| 不卡的av电影| 中文字幕一区在线观看视频| 国产精品免费区二区三区观看| 日精品一区二区三区| 欧美日韩在线播放三区| 国产精品资源站在线| 欧美精品一区二区蜜臀亚洲| 欧美精品亚洲| 亚洲免费观看高清完整版在线观看熊| 亚洲一区3d动漫同人无遮挡| 午夜成人免费电影| 欧美巨大另类极品videosbest| 成人亚洲一区二区一| 久久无码av三级| 亚洲国产一区二区在线| 亚洲第一福利一区| 欧美日韩一区高清| 97久久超碰国产精品| 国产精品天美传媒| 色综合久久综合网欧美综合网| 亚洲天堂2016| 色94色欧美sute亚洲线路二| 国产精品一区二区久久精品爱涩 | 亚洲高清三级视频| 色菇凉天天综合网| 岛国一区二区三区| 亚洲日本青草视频在线怡红院| 久久一区国产| 粉嫩久久99精品久久久久久夜| 国产精品素人一区二区| 久久久久久九九九九| 成人午夜精品一区二区三区| 国产精品色哟哟| 久久久精品动漫| 国产91精品入口| 中文字幕一区二区三区在线播放 | 国产成人自拍网| 国产精品入口麻豆九色| 久久中文字幕一区二区三区| 福利视频网站一区二区三区| 亚洲欧美日韩中文播放| 欧美老女人第四色| 含羞草久久爱69一区| 奇米精品一区二区三区在线观看一| 精品国产一区二区三区四区四| 亚洲免费不卡| 国产精品99久久久久久宅男| 国产精品嫩草影院av蜜臀| 久久久久久亚洲精品不卡4k岛国| 成人深夜福利app| 一区二区三区在线播放| 555www色欧美视频| 亚洲激情偷拍| 国产乱色国产精品免费视频| 亚洲欧美日韩一区二区| 在线播放日韩导航| 亚洲黄色影片| 懂色av一区二区夜夜嗨| 亚洲综合男人的天堂| 欧美精品aa| 亚洲免费大片| 日本色综合中文字幕| 久久综合九色综合97婷婷女人 | 91激情在线视频| 久久成人免费网站| 国产精品久久久久久久午夜片| 色偷偷久久人人79超碰人人澡| 成人国产精品视频| 五月天国产精品| 欧美国产成人在线| 欧美精品v日韩精品v韩国精品v| 欧美片第1页综合| 奇米777欧美一区二区| 国产精品欧美一区二区三区| 欧美日韩成人综合| 亚洲影院免费| 国产精品理论在线观看| 国产精品一区免费在线观看| 国产片一区二区三区| 在线看不卡av| 好看的日韩av电影| 国产成人av在线影院| 亚洲成年人影院| 亚洲国产精品精华液ab| 欧美日韩高清一区| 校园春色综合网| 欧美极品一区| 老司机精品视频导航| 亚洲男人的天堂在线观看| 精品动漫一区二区三区在线观看| 91福利国产成人精品照片| 亚洲第一在线| 99久久er热在这里只有精品15 | 一区二区三区中文字幕电影 | 午夜在线一区| 国产成人精品免费在线| 国产午夜亚洲精品午夜鲁丝片 | 国产欧美日韩三区| 欧美电影一区二区三区| 亚洲欧美日韩精品久久久| 欧美三级午夜理伦三级中文幕| 国产毛片精品视频| 天堂av在线一区| 亚洲最大成人网4388xx| 国产精品久久久久一区二区三区共| 日韩视频一区在线观看| 欧美色窝79yyyycom| 亚洲欧美日韩在线观看a三区| 激情久久久久| 99国产欧美另类久久久精品| 国产精品中文有码| 精品在线播放午夜| 日本免费新一区视频| 国产日韩欧美在线一区| 日韩午夜在线播放| 欧美视频一区二区三区| 中文无字幕一区二区三区 | 蜜桃精品在线观看| 一区二区三区丝袜| 亚洲国产精品高清| 国产亚洲自拍一区| 88在线观看91蜜桃国自产| 欧美在线高清视频| 色婷婷久久一区二区三区麻豆| 国产日韩一区二区三区在线播放| 伊人久久成人| 亚洲香蕉视频| 欧美三级网页| 女人色偷偷aa久久天堂| 成人动漫av在线| 国产91精品在线观看| 国产乱子伦一区二区三区国色天香| 欧美午夜精品一区二区蜜桃| 欧美日韩一区二| 国产成人综合在线播放| 精品一区二区在线视频| 亚洲va韩国va欧美va精品| **性色生活片久久毛片| 中文字幕免费观看一区| 久久久久久久一区| 精品国产91洋老外米糕| 日韩欧美黄色影院| 日韩精品一区国产麻豆| 日韩精品一区二区三区swag| 日韩欧美资源站| 欧美大白屁股肥臀xxxxxx| 欧美成人精品二区三区99精品| 欧美一级黄色片| 日韩一区二区精品葵司在线| 色综合久久88色综合天天 | 亚洲一区二区三区四区五区午夜| 夜久久久久久| 亚洲一区二区动漫| 久久精品日产第一区二区| 色婷婷综合久久| 精品视频免费看| 欧美一区二区三区视频在线观看| 日韩一二三四区| 26uuu精品一区二区| 国产女人水真多18毛片18精品视频| 国产精品美女久久福利网站| 亚洲欧洲日韩在线| 亚洲一区二区黄色| 日韩精品欧美精品| 精品一区二区综合| 成熟亚洲日本毛茸茸凸凹| 欧美 日韩 国产一区二区在线视频 | 亚洲国产精品高清| 中文字幕制服丝袜一区二区三区 | 国产欧美日韩亚洲一区二区三区| 91久久视频| 久久久久久国产精品一区| 欧美日韩国产首页在线观看|