<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
某天,產品經理給了這麼一個需求技術小哥,能不能幫使用者新增一個搜尋欄,查詢包含某個關鍵字的所有類目。技術小哥稍微想了一下,目前跟類目相關的表有兩個,一個是content_category類目表,一個是content_system內容系統表。而使用者要查詢的關鍵字是存在content_system表裡面,這樣一來需要連表查詢一下。難度好像不大,也就爽快地答應了。
技術小哥再仔細分析了一下兩個表的結構:
CREATE TABLE `content_category` ( `category_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '類目編號Id', `pid` int(10) unsigned DEFAULT NULL COMMENT '上級編號id', `level` tinyint(4) NOT NULL COMMENT '層級', `name` varchar(20) NOT NULL COMMENT '名稱', `description` varchar(200) DEFAULT NULL COMMENT '描述', `icon` varchar(50) DEFAULT NULL COMMENT '圖示', `type` tinyint(3) NOT NULL DEFAULT '1' COMMENT '型別(1:普通,2:熱門...)', `alias` varchar(20) DEFAULT NULL COMMENT '別名', `system_id` int(11) DEFAULT NULL COMMENT '系統編號id', `ctime` bigint(20) unsigned NOT NULL COMMENT '建立時間', `orders` bigint(255) unsigned NOT NULL COMMENT '排序', `attention` bigint(20) unsigned NOT NULL COMMENT '關注度', PRIMARY KEY (`category_id`), KEY `content_category_orders` (`orders`), KEY `content_category_pid` (`pid`), KEY `content_category_alias` (`alias`), KEY `content_category_level` (`level`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='內容類目表';
CREATE TABLE `content_system` ( `system_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '系統編號id', `name` varchar(20) NOT NULL COMMENT '系統名稱', `code` varchar(20) DEFAULT NULL COMMENT '別名', `description` varchar(300) DEFAULT NULL COMMENT '描述', `ctime` bigint(20) DEFAULT NULL COMMENT '建立時間', `orders` bigint(20) DEFAULT NULL COMMENT '排序', PRIMARY KEY (`system_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='內容系統表';
不難看出,兩個表都有system_id作為關聯,當用戶輸入一個關鍵字,例如 code = "news" 時候,系統需要自動搜尋出 system_id = 1 的所有類目資訊。
於是技術小哥開始了他的工作,首先是定義Mapper.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.thomson.content.rpc.mapper.ContentCategoryExtMapper"> <!-- 定義基礎型別 --> <resultMap id="BaseResultMap" type="com.thomson.content.dao.model.ContentCategory"> <!-- 實體類的欄位名和資料表的欄位名對映 --> <id column="category_id" jdbcType="INTEGER" property="categoryId" /> <result column="pid" jdbcType="INTEGER" property="pid" /> <result column="level" jdbcType="TINYINT" property="level" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="description" jdbcType="VARCHAR" property="description" /> <result column="icon" jdbcType="VARCHAR" property="icon" /> <result column="type" jdbcType="TINYINT" property="type" /> <result column="alias" jdbcType="VARCHAR" property="alias" /> <result column="system_id" jdbcType="INTEGER" property="systemId" /> <result column="ctime" jdbcType="BIGINT" property="ctime" /> <result column="orders" jdbcType="BIGINT" property="orders" /> <result column="attention" jdbcType="BIGINT" property="attention" /> </resultMap> <!--繼承基礎型別BaseResultMap, association 一對一關聯查詢 --> <resultMap extends="BaseResultMap" id="ClassesResultMap" type="com.thomson.content.dao.model.ContentCategory"> </resultMap> <!-- 這一步是關鍵的連表查詢 --> <select id="selectContentCategoryByCode" parameterType="map" resultMap="ClassesResultMap"> select content_c.* from content_category content_c left join content_system content_s on content_s.code=content_s.code=#{code,jdbcType=VARCHAR} where content_s.system_id=content_c.system_id </select> <!-- 快取 --> <cache type="org.mybatis.caches.ehcache.LoggingEhcache" /> </mapper>
然後是Mapper介面
package com.thomson.content.rpc.mapper; import com.thomson.content.dao.model.ContentCategory; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 類目ExtMapper * Created by Thomson on 2022/01/10. * 根據content_system 的 code 獲取類目 */ public interface ContentCategoryExtMapper { int up(String code); int down(String code); List<ContentCategory> selectContentCategoryByCode(@Param("code") String code); }
接下來是實現類
import com.thomson.Content.dao.model.ContentArticle; import com.thomson.Content.rpc.mapper.ContentCategoryExtMapper; import com.thomson.common.annotation.BaseService; import com.thomson.common.base.BaseServiceImpl; import com.thomson.Content.dao.mapper.ContentCategoryMapper; import com.thomson.Content.dao.model.ContentCategory; import com.thomson.Content.dao.model.ContentCategoryExample; import com.thomson.Content.rpc.api.ContentCategoryService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * ContentCategoryService實現 * Created by Thomson on 2021/01/10. */ @Service @Transactional @BaseService public class ContentCategoryServiceImpl extends BaseServiceImpl<ContentCategoryMapper, ContentCategory, ContentCategoryExample> implements ContentCategoryService { private static final Logger LOGGER = LoggerFactory.getLogger(ContentCategoryServiceImpl.class); @Autowired ContentCategoryExtMapper ContentCategoryExtMapper; // @Override public List<ContentCategory> selectContentCategoryByCode(String code) { return ContentCategoryExtMapper.selectContentCategoryByCode(code); } }
在controll下獲取資料
@ApiOperation(value = "類目列表") @RequiresPermissions("content:category:read") @RequestMapping(value = "/list", method = RequestMethod.GET) @ResponseBody public Object list( @RequestParam(required = false, defaultValue = "0", value = "offset") int offset, @RequestParam(required = false, defaultValue = "10", value = "limit") int limit, @RequestParam(required = false, value = "sort") String sort, @RequestParam(required = false, value = "order") String order) { Map<String, Object> result = new HashMap<>(2); String code = "news"; List<ContentCategory> categories = ContentCategoryService.selectContentCategoryByCode(code); System.out.print("n"+categories+"n"); result.put("rows", categories); result.put("total", total); return result; }
至此,技術小哥獲取到了自己想要的資料。順利完成了產品經理給的任務。
到此這篇關於Mybatis如何使用連表查詢的文章就介紹到這了,更多相關Mybatis連表查詢內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45