国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

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

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

一個(gè)用戶(hù)user有對(duì)應(yīng)的一個(gè)公司company,每個(gè)用戶(hù)有多個(gè)賬戶(hù)account。

spring boot 2的環(huán)境搭建見(jià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)建實(shí)體

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 這里省略...}

三、開(kāi)發(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ù)用戶(hù)id查詢(xún)賬戶(hù)信息 */ @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查詢(xún)公司信息 */ @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 { /* * 一對(duì)一查詢(xún) * property:查詢(xún)結(jié)果賦值給此實(shí)體屬性 * column:對(duì)應(yīng)數(shù)據(jù)庫(kù)的表字段,做為下面@One(select方法的查詢(xún)參數(shù) * one:一對(duì)一的查詢(xún) * @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); /* * 一對(duì)多查詢(xún) * property:查詢(xún)結(jié)果賦值給此實(shí)體屬性 * column:對(duì)應(yīng)數(shù)據(jù)庫(kù)的表字段,可做為下面@One(select方法)的查詢(xún)參數(shù) * many:一對(duì)多的查詢(xún) * @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); /* * 同時(shí)用一對(duì)一、一對(duì)多查詢(xún) */ @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對(duì)1關(guān)系,配置1對(duì)1的映射 association:用于配置1對(duì)1的映射 屬性property:company對(duì)象在user對(duì)象中的屬性名 屬性javaType:company屬性的java對(duì)象 類(lèi)型 屬性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對(duì)多關(guān)系映射 property:在user里面的List<Account>的屬性名 ofType:當(dāng)前account表的java類(lèi)型 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; //請(qǐng)求例子:http://localhost:9001/getUserWithCompany/1 /*請(qǐng)求結(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; } //請(qǐng)求例子:http://localhost:9001/getUserWithAccount/1 /*請(qǐng)求結(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; } //請(qǐng)求例子:http://localhost:9001/getUserWithAccount/1 /*請(qǐng)求結(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; } }

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

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 欧美在线播放成人免费 | 久久精品视频3 | 三级特黄视频 | 亚洲1314| 国产人做人爱免费视频 | 日本不卡一二三区 | 亚洲欧美久久精品一区 | 中文字幕色站 | a毛片全部播放免费视频完整18 | 8888奇米四色在线 | 中文字幕色站 | 91日本在线观看亚洲精品 | 国产欧美在线观看不卡一 | 香蕉在线观看999 | 免费伦费一区二区三区四区 | 亚洲在线看片 | 欧美一级二级三级 | 最近中文字幕免费视频 | 国产午夜精品一区二区三区不卡 | 午夜美女久久久久爽久久 | 国产亚洲精品一区二区在线观看 | 国产成人精品免费视频大 | 九九九精品视频免费 | 欧美做a一级视频免费观看 欧美做爱毛片 | 成人三级精品视频在线观看 | 亚洲欧美在线看 | 精品亚洲一区二区三区 | 欧美精品一区二区三区免费播放 | 一级特黄aaa大片免费看 | 日韩欧美在线观看视频一区二区 | 仑乱高清在线一级播放 | 国产精品天堂avav在线 | 男操女免费视频 | 欧美成人在线网站 | 国产精品综合一区二区三区 | 一区二区三区在线看 | 在线男人的天堂 | 欧美一级视频 | 欧美一区=区三区 | 午夜在线成人 | 国产一级做a爰片在线 |