mybatis實(shí)現(xiàn)跨庫多表查詢

需求:查詢用戶名具體負(fù)責(zé)的項目的名稱
已有數(shù)據(jù)庫表如下所示,二者通過項目ID關(guān)聯(lián)


test數(shù)據(jù)庫的user表

test1數(shù)據(jù)庫的project表

需要實(shí)現(xiàn)的SQL查詢

select user.id,user.name,projectName from test.user left join test1.project on user.`projectId`=project.id;

查詢結(jié)果
查詢結(jié)果

實(shí)現(xiàn):核心思想,手動新建Bean與Mapper。

1.自動生成代碼model與mapper,包括test.user test1.project
2.新建一個bean命名為UserPro,其屬性為上述所需的3個字段

public class UserPro {
    private Integer id;
    private String name;
    private String projectname;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getProjectname() {
        return projectname;
    }

    public void setProjectname(String projectname) {
        this.projectname = projectname;
    }

}

3.新建一個mapper命名為UserProMapper,返回新建的bean: UserPro

@Repository
public interface UserProMapper {

    @Select("select user.id,user.name,projectName from test.user left join test1.project on user.`projectId`=project.id limit 1")
    UserPro findProName();
}

4.基本已經(jīng)實(shí)現(xiàn)核心的內(nèi)容了,接下來就是用controller實(shí)現(xiàn)調(diào)用關(guān)系

@Controller
public class testController {

    @Autowired
    private StuClassMapper stuClassMapper;
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private UserProMapper userProMapper;

    @RequestMapping("/test")
    @ResponseBody
    public String  getStuClass(){
        User user=userMapper.findByUserId();
        System.out.println(user.getName());
        return user.getName();
    }

    @RequestMapping("/test2")
    @ResponseBody
    public String  getStuClassByJoin(){

        System.out.println(userMapper.findByUserIdJoin());
        return "userMapper.findByUserIdJoin()";
    }

    @RequestMapping("/test3")
    @ResponseBody
    public UserPro getProName(){

        UserPro userPro=userProMapper.findProName();
        return userPro;
    }

    @RequestMapping("/test4")
    @ResponseBody
    public String  findUserNameByUserIdJoin(){
        return userMapper.findUserNameByUserIdJoin();
    }

}

5.啟動項目,在瀏覽器輸入:http://localhost:8091/test3

執(zhí)行結(jié)果

大家也發(fā)現(xiàn)了,controller中有很多的路由匹配,這是模擬了其他若干場景。另外為了方便,Mapper返回的查詢結(jié)果條數(shù)限制為1:

# test
select * from test.user where id in(select userId from test1.stuClass) limit 1;
# test2
select count(*) from test.user left join test1.stuClass on user.id=stuClass.userId
# test3 
select user.id,user.name,projectName from test.user left join test1.project on user.`projectId`=project.id;
# test4
select stuClass.userId from test.user left join test1.stuClass on user.id=stuClass.userId limit 1
# ?
select * from test.user left join test1.stuClass on user.id=stuClass.userId;

源碼鏈接:https://gitee.com/neimenggudaxue/MultityTablesCurd.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,644評論 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,960評論 1 92
  • 那天下午,我去街上買饅頭,街上新開了一家饅頭店。賣饅頭的是個二十多歲的臉如蘋果的女孩,兩塊錢,可兜里只有一張一百元...
    牽著蝸牛狂奔閱讀 697評論 0 8
  • 陳思成出軌的消息還在持續(xù)發(fā)酵。 先是被兩女一男總統(tǒng)套房斗地主的桃色新聞刷屏,今天又看到關(guān)愛八卦成長協(xié)會爆料,早在佟...
    醉花陰123閱讀 551評論 2 6
  • 今天一個朋友給我發(fā)信息說,孩子生病了,她喂孩子吃藥的過程中,孩子十分不愿意,結(jié)果不但把藥打翻,還抓傷了媽媽。...
    阿寶的育兒寶典閱讀 350評論 4 1

友情鏈接更多精彩內(nèi)容