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

您的位置:首頁技術(shù)文章
文章詳情頁

Spring boot2基于Mybatis實現(xiàn)多表關(guān)聯(lián)查詢

瀏覽:38日期:2023-09-09 11:47:39

模擬業(yè)務(wù)關(guān)系:

一個用戶user有對應(yīng)的一個公司company,每個用戶有多個賬戶account。

spring boot 2的環(huán)境搭建見上文:spring boot 2整合mybatis

一、mysql創(chuàng)表和模擬數(shù)據(jù)sql

CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `company_id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `company` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(200) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `account` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(200) NOT NULL, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `user`VALUES (1, ’aa’, 1), (2, ’bb’, 2);INSERT INTO `company`VALUES (1, ’xx公司’), (2, ’yy公司’);INSERT INTO `account`VALUES (1, ’中行’, 1), (2, ’工行’, 1), (3, ’中行’, 2);

二、創(chuàng)建實體

public class User { private Integer id; private String name; private Company company; private List<Account> accounts; //getter/setter 這里省略...}public class Company { private Integer id; private String companyName; //getter/setter 這里省略...}public class Account { private Integer id; private String accountName; //getter/setter 這里省略...}

三、開發(fā)Mapper

方法一:使用注解

1、AccountMapper.java

package com.example.demo.mapper;import java.util.List;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import com.example.demo.entity.Account;public interface AccountMapper { /* * 根據(jù)用戶id查詢賬戶信息 */ @Select('SELECT * FROM `account` WHERE user_id = #{userId}') @Results({ @Result(property = 'accountName', column = 'name') }) List<Account> getAccountByUserId(Long userId);}

2、CompanyMapper.java

package com.example.demo.mapper;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import com.example.demo.entity.Company;public interface CompanyMapper { /* * 根據(jù)公司id查詢公司信息 */ @Select('SELECT * FROM company WHERE id = #{id}') @Results({ @Result(property = 'companyName', column = 'name') }) Company getCompanyById(Long id);}

3、UserMapper.java

package com.example.demo.mapper;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.One;import org.apache.ibatis.annotations.Many;import com.example.demo.entity.User;public interface UserMapper { /* * 一對一查詢 * property:查詢結(jié)果賦值給此實體屬性 * column:對應(yīng)數(shù)據(jù)庫的表字段,做為下面@One(select方法的查詢參數(shù) * one:一對一的查詢 * @One(select = 方法全路徑) :調(diào)用的方法 */ @Select('SELECT * FROM user WHERE id = #{id}') @Results({ @Result(property = 'company', column = 'company_id', one = @One(select = 'com.example.demo.mapper.CompanyMapper.getCompanyById')) }) User getUserWithCompany(Long id); /* * 一對多查詢 * property:查詢結(jié)果賦值給此實體屬性 * column:對應(yīng)數(shù)據(jù)庫的表字段,可做為下面@One(select方法)的查詢參數(shù) * many:一對多的查詢 * @Many(select = 方法全路徑) :調(diào)用的方法 */ @Select('SELECT * FROM user WHERE id = #{id}') @Results({ @Result(property = 'id', column = 'id'),//加此行,否則id值為空 @Result(property = 'accounts', column = 'id', many = @Many(select = 'com.example.demo.mapper.AccountMapper.getAccountByUserId')) }) User getUserWithAccount(Long id); /* * 同時用一對一、一對多查詢 */ @Select('SELECT * FROM user') @Results({ @Result(property = 'id', column = 'id'), @Result(property = 'company', column = 'company_id', one = @One(select = 'com.example.demo.mapper.CompanyMapper.getCompanyById')), @Result(property = 'accounts', column = 'id', many = @Many(select = 'com.example.demo.mapper.AccountMapper.getAccountByUserId')) }) List<User> getAll(); }

方法二:使用XML

參考上文spring boot 2整合mybatis配置application.properties和mybatis-config.xml等后,以上面的getAll()方法為例,UserMapper.xml配置如下:

<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd' ><mapper namespace='com.example.demo.mapper.UserMapper' > <resultMap type='com.example.demo.entity.User'> <id column='id' jdbcType='INTEGER' property='id' /> <result property='name' column='name' jdbcType='VARCHAR' /> <!--封裝映射company表數(shù)據(jù),user表與company表1對1關(guān)系,配置1對1的映射 association:用于配置1對1的映射 屬性property:company對象在user對象中的屬性名 屬性javaType:company屬性的java對象 類型 屬性column:user表中的外鍵引用company表 --> <association property='company' javaType='com.example.demo.entity.Company' column='company_id'> <id property='id' column='companyid'></id> <result property='companyName' column='companyname'></result> </association> <!--配置1對多關(guān)系映射 property:在user里面的List<Account>的屬性名 ofType:當前account表的java類型 column:外鍵 --> <collection property='accounts' ofType='com.example.demo.entity.Account' column='user_id'> <id property='id' column='accountid'></id> <result property='accountName' column='accountname'></result> </collection> </resultMap> <select resultMap='UserMap' > SELECT u.id,u.name,c.id companyid, c.name companyname, a.id accountid,a.name accountname FROM user u LEFT JOIN company c on u.company_id=c.id LEFT JOIN account a on u.id=a.user_id </select></mapper>

四、控制層

package com.example.demo.web;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.example.demo.entity.User;import com.example.demo.mapper.UserMapper;@RestControllerpublic class UserController { @Autowired private UserMapper userMapper; //請求例子:http://localhost:9001/getUserWithCompany/1 /*請求結(jié)果:{'id':1,'name':'aa','company':{'id':1,'companyName':'xx公司'},'accounts':null}*/ @RequestMapping('/getUserWithCompany/{id}') public User getUserWithCompany(@PathVariable('id') Long id) { User user = userMapper.getUserWithCompany(id); return user; } //請求例子:http://localhost:9001/getUserWithAccount/1 /*請求結(jié)果:{'id':1,'name':'aa','company':null,'accounts':[{'id':1,'accountName':'中行'},{'id':2,'accountName':'工行'}]}*/ @RequestMapping('/getUserWithAccount/{id}') public User getUserWithAccount(@PathVariable('id') Long id) { User user = userMapper.getUserWithAccount(id); return user; } //請求例子:http://localhost:9001/getUserWithAccount/1 /*請求結(jié)果:[{'id':1,'name':'aa','company':{'id':1,'companyName':'xx公司'},'accounts':[{'id':1,'accountName':'中行'}, {'id':2,'accountName':'工行'}]},{'id':2,'name':'bb','company':{'id':2,'companyName':'yy公司'},'accounts':[{'id':3,'accountName':'中行'}]}]*/ @RequestMapping('/getUsers') public List<User> getUsers() { List<User> users=userMapper.getAll(); return users; } }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
三级不卡在线观看| 免费成人美女在线观看| 五月天一区二区| 亚洲天堂久久| 欧美激情中文字幕| 成人理论电影网| 欧美日韩一区二区三区四区| 亚洲成人www| 亚洲综合欧美| 亚洲一区二区三区视频在线播放 | 色综合咪咪久久| 午夜不卡av在线| 一级成人国产| 亚洲人成网站色在线观看| 欧美日韩综合精品| 中文字幕精品一区二区精品绿巨人| 成人av午夜电影| 精品国产凹凸成av人导航| 国产精品影视网| 欧美人狂配大交3d怪物一区| 日本美女一区二区三区视频| 久久久水蜜桃| 日本欧美肥老太交大片| 在线观看成人小视频| 美女视频黄 久久| 欧美日韩中文字幕精品| 老司机精品视频导航| 欧美性大战xxxxx久久久| 精品在线视频一区| 欧美精品久久久久久久久老牛影院| 国产真实乱对白精彩久久| 91精品婷婷国产综合久久性色| 国产精品123区| 91精品国产综合久久久蜜臀图片| 国产成人日日夜夜| 日韩欧美一区二区三区在线| 成人国产精品免费观看动漫| 亚洲精品在线免费播放| 91在线云播放| 国产精品三级av| 国产欧美日韩综合精品二区| 亚洲宅男天堂在线观看无病毒| 久久精品动漫| 国内精品自线一区二区三区视频| 欧美一卡在线观看| 91社区在线播放| 综合色天天鬼久久鬼色| 羞羞答答国产精品www一本| 日韩二区在线观看| 5566中文字幕一区二区电影| 成人免费精品视频| 国产精品免费人成网站| 亚洲一区二区三区免费观看| 奇米在线7777在线精品| 91精品国产一区二区三区| 东方欧美亚洲色图在线| 欧美精品一区二区三区在线| 国产一区观看| 亚洲一线二线三线视频| 在线视频亚洲一区| 成人午夜精品一区二区三区| 国产精品网站在线播放| 国产精品久久久一区二区| 日本人妖一区二区| 欧美一区日韩一区| 91亚洲永久精品| 1区2区3区欧美| 久久一区亚洲| 国产成人亚洲精品狼色在线| 国产欧美一区二区三区网站| 亚洲一区国产一区| 狠狠色综合色综合网络| 久久天天做天天爱综合色| 在线精品在线| 美女网站色91| 久久久www成人免费无遮挡大片| 在线看片成人| 精品无码三级在线观看视频| 精品国产一二三| 一区二区毛片| 国产一区二区不卡| 国产嫩草影院久久久久| 亚洲一区二区精品在线观看| 精久久久久久久久久久| 国产日产欧美精品一区二区三区| 国产三区精品| 国产91高潮流白浆在线麻豆| 中文字幕在线观看不卡| 久久亚洲综合网| 99re亚洲国产精品| 亚洲国产精品精华液网站| 在线观看91av| 在线观看成人一级片| 久久爱另类一区二区小说| 久久精品网站免费观看| 亚洲一区日韩| 国产99久久久国产精品免费看| 18成人在线观看| 欧美群妇大交群的观看方式| 精品999在线观看| 精品一区二区国语对白| 国产精品毛片久久久久久久| 色偷偷久久一区二区三区| 亚洲欧洲精品一区二区三区不卡| 色悠悠亚洲一区二区| 欧美一区二区三区在线播放| 丝袜亚洲另类欧美| 中文字幕不卡在线| 欧美日韩中文字幕一区二区| 亚洲天堂久久| 国产电影精品久久禁18| 亚洲精品中文在线影院| 欧美变态口味重另类| 久久本道综合色狠狠五月| 99re这里都是精品| 精品在线免费视频| 亚洲激情图片qvod| 精品国产乱码久久久久久老虎| 久久久久久久久久久久久9999| 91蜜桃婷婷狠狠久久综合9色| 日一区二区三区| 亚洲国产精品ⅴa在线观看| 色屁屁一区二区| 亚洲视频欧美在线| 国产精品996| 亚洲综合一区在线| 欧美精品一区二区三| 91精彩视频在线观看| 国产精品啊v在线| 国产成人精品免费网站| 日韩精品1区2区3区| 国产精品国产三级国产普通话99 | 欧美性猛片xxxx免费看久爱| 亚洲国产精品第一区二区| 成人午夜激情在线| 久久成人免费网站| 亚洲国产一区在线观看| 国产亚洲精品中文字幕| 欧美亚洲国产一区二区三区| 一本色道久久精品| 91免费视频网| 国产精品白丝jk白祙喷水网站| 亚洲国产另类av| 中文字幕中文字幕一区| www成人在线观看| 欧美日韩aaa| 色丁香久综合在线久综合在线观看| 亚洲激情社区| 成人精品国产免费网站| 男人操女人的视频在线观看欧美| 亚洲男人的天堂网| 国产亲近乱来精品视频| 日韩视频123| 欧美在线观看一区| 国产精品久久777777毛茸茸| 午夜久久黄色| 成人黄页毛片网站| 国产一区 二区| 日韩国产成人精品| 亚洲综合色丁香婷婷六月图片| 国产精品美女一区二区| 久久影视一区二区| 日韩欧美国产电影| 欧美久久一区二区| 欧美体内she精视频| 一本到高清视频免费精品| 国产精品推荐精品| 国产人成精品一区二区三| 欧美网站在线| 91在线精品一区二区| 丁香婷婷综合网| 国产91精品一区二区| 国模套图日韩精品一区二区 | 欧美日韩黄色影视| 欧美视频中文一区二区三区在线观看| 久久久久久久久久久一区 | 一区二区三区丝袜| 亚洲制服丝袜在线| 亚洲黄色av一区| 亚洲视频你懂的| 亚洲婷婷综合久久一本伊一区 | 久久99蜜桃精品| 久久99热99| 极品尤物av久久免费看| 久久不见久久见中文字幕免费| 另类调教123区| 免费观看一级特黄欧美大片| 日本中文在线一区| 日本人妖一区二区| 久久99国产精品免费网站| 久久av资源站| 国产一区二区在线看| 国产福利91精品一区| 波多野结衣中文字幕一区 | 图片区小说区国产精品视频| 偷拍日韩校园综合在线| 日韩中文字幕91| 日韩精品每日更新| 日本不卡视频一二三区| 麻豆国产精品官网|