SELECT * FROM bursh_questions.menu_fold as m left join bank_chapter as b on(m.menu_id=b.menu_id)
left join(select * from question_interrupt as q where q.user_id=#{userId})interrupt on(b.chapter_id=interrupt.chapter_id)
上边是三表链表查询 我想的结果是这样的
但是用上边的sql 查出来是这样的
有数据就有数组 没有数据应该数组是空的啊,为啥还是这样的,分析了下 两个chapterId一毛一样的 我怀疑应该是指定列的问题于是我改变了指向列 sql如下
SELECT m.menu_id,m.menu_content,m.menu_display,m.menu_model,b.chapter_id,b.chapter_content,b.chapter_display,b.menu_id b_menu_id,
q.interrupt_id,q.chapter_id q_chapter_id,q.user_id,q.time,q.interrupt_answer,q.status FROM bursh_questions.menu_fold as m left join bank_chapter as b on(m.menu_id=b.menu_id)
left join(select * from question_interrupt as q where q.user_id=4000) q on(b.chapter_id=q.chapter_id)
给这个指个别名 q.chapter_id q_chapter_id 查询应该就可以了
应该有些人好奇 我的上边的链表如何那样查询的,我也说下是使用了spriing boot mybatis 下面我贴下代码 应该更清晰一点
首先在mapping.xml中这样
第一个resultMap 是第一个表,有个collection这个,就是第一个表和第二个表是主外键关系,你在第一个的实体类中声明一个变量,主动映射成集合,这样就很方便,不用你去循环去查第二个表了
第二个resultMap 是你的第二表 ,有个collection这个,就是我们是那边看到的那个集合也跟我上边说的一样,声明一个变量,映射集合
第三个resultMap是你的第三个表
属性介绍 可能有刚入门的一看懵逼的
resultMap 里边的 id:就是你声明的一个变量而已,可以随便起,建议起得有意义
resultMap 里边的 type:就是你对应的实体类
select 里边的 id 你的 mapping中的方法,就是你声明interface的类中的方法
select 里边 resulyMap 是你上边介绍的resulyMap的id
select 里边的 resultType对应的实体类
#{userId}这个是在mapping中定义方法的参数
实体类我也贴下 我用的是kotlin写的
class MenuEntity {
var menuId = 0
var menuContent = ""
var menuDisplay = 0
var menuModel=0
var data: ArrayList? = null
}
class BankChapterEntity {
val chapterId = 0
var chapterContent = ""
val chapterDisplay = 0
var chapterMapping=0
var menuId=0
var random=0
var InterruptList:ArrayList?=null
}
class InterruptQuestionEntity {
var interruptId=0
var chapterId=0
var userId=0
var time=""
var interruptAnswer=""
var status=0
}
上边介绍的interface的mapping 接贴下
interface MenuMapping {
fun selectMenu(userId:Int):ArrayList?
}
对应的service
@Service
class MenuService {
@Autowired
var menuMapping:MenuMapping?=null
fun selectMenu(userId:Int):ArrayList?{
return menuMapping!!.selectMenu(userId)
}
}
对应的Controller
@RestController
@RequestMapping("/menu")
class MenuController {
@Autowired
var menuService: MenuService? = null
@Autowired
var bankChapterService: BankChapterService? = null
@RequestMapping("/getMenu")
fun selectMenu(): ListDataEntity {
var data= menuService!!.selectMenu(HttpServletUtils.getRequestHeader("userId")!!.toInt()) as ArrayList
return ResultEntityUtils.packedListEntity(0,data as ArrayList)
}
}
大概就是这样,后边有时间我会把kotlin 搭建spring boot mybatis 的代码贴出来,也是入门级别的,我也是入门,记录下,希望能帮助到刚入门的小伙伴