您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關MyBatis Plus實現多表聯接、分頁查詢的方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
代碼實現
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 省略 @Service public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService { }
② QuestionServiceImpl
// 省略 import @Service public 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") @EnableSwagger2 public 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 省略
五、測試接口
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 執行
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 執行
六、小結
寫本文的原因:
①網上有做法不合時宜的文章(自定義page類、配置版)②官方文檔使用的是配置版的,筆者采用注解版的
MyBatis 配置版 | MyBatis 注解版 |
---|---|
① 動態 sql 靈活、② xml 格式的 sql,可拓展性好 | ① 少一個設置,少一個錯誤爆發點、② 代碼清晰優雅 |
看完上述內容,你們對MyBatis Plus實現多表聯接、分頁查詢的方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。