spring boot mybatis left join 或者right join

       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)

上边是三表链表查询 我想的结果是这样的 

spring boot mybatis left join 或者right join_第1张图片

但是用上边的sql 查出来是这样的

spring boot mybatis left join 或者right join_第2张图片

有数据就有数组 没有数据应该数组是空的啊,为啥还是这样的,分析了下 两个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 的代码贴出来,也是入门级别的,我也是入门,记录下,希望能帮助到刚入门的小伙伴

你可能感兴趣的:(kotlint,spring,boot,spring,html)