Mybatis怎么使用连表查询(mybatis,开发技术)

时间:2024-04-29 08:05:42 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

这篇文章主要介绍“Mybatis怎么使用连表查询”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mybatis怎么使用连表查询”文章能帮助大家解决问题。

某天,产品经理给了这么一个需求技术小哥,能不能帮用户添加一个搜索栏,查询包含某个关键字的所有类目。技术小哥稍微想了一下,目前跟类目相关的表有两个,一个是content_category类目表,一个是content_system内容系统表。而用户要查找的关键字是存在content_system表里面,这样一来需要连表查询一下。难度好像不大,也就爽快地答应了。

技术小哥再仔细分析了一下两个表的结构:

CREATETABLE`content_category`(`category_id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT'类目编号Id',`pid`int(10)unsignedDEFAULTNULLCOMMENT'上级编号id',`level`tinyint(4)NOTNULLCOMMENT'层级',`name`varchar(20)NOTNULLCOMMENT'名称',`description`varchar(200)DEFAULTNULLCOMMENT'描述',`icon`varchar(50)DEFAULTNULLCOMMENT'图标',`type`tinyint(3)NOTNULLDEFAULT'1'COMMENT'类型(1:普通,2:热门...)',`alias`varchar(20)DEFAULTNULLCOMMENT'别名',`system_id`int(11)DEFAULTNULLCOMMENT'系统编号id',`ctime`bigint(20)unsignedNOTNULLCOMMENT'创建时间',`orders`bigint(255)unsignedNOTNULLCOMMENT'排序',`attention`bigint(20)unsignedNOTNULLCOMMENT'关注度',PRIMARYKEY(`category_id`),KEY`content_category_orders`(`orders`),KEY`content_category_pid`(`pid`),KEY`content_category_alias`(`alias`),KEY`content_category_level`(`level`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4COMMENT='内容类目表';

Mybatis怎么使用连表查询

CREATETABLE`content_system`(`system_id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT'系统编号id',`name`varchar(20)NOTNULLCOMMENT'系统名称',`code`varchar(20)DEFAULTNULLCOMMENT'别名',`description`varchar(300)DEFAULTNULLCOMMENT'描述',`ctime`bigint(20)DEFAULTNULLCOMMENT'创建时间',`orders`bigint(20)DEFAULTNULLCOMMENT'排序',PRIMARYKEY(`system_id`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4COMMENT='内容系统表';

Mybatis怎么使用连表查询

不难看出,两个表都有system_id作为关联,当用户输入一个关键字,例如 code = "news" 时候,系统需要自动搜索出 system_id = 1 的所有类目信息。

于是技术小哥开始了他的工作,首先是定义Mapper.xml

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.thomson.content.rpc.mapper.ContentCategoryExtMapper"><!--定义基础类型--><resultMapid="BaseResultMap"type="com.thomson.content.dao.model.ContentCategory"><!--实体类的字段名和数据表的字段名映射--><idcolumn="category_id"jdbcType="INTEGER"property="categoryId"/><resultcolumn="pid"jdbcType="INTEGER"property="pid"/><resultcolumn="level"jdbcType="TINYINT"property="level"/><resultcolumn="name"jdbcType="VARCHAR"property="name"/><resultcolumn="description"jdbcType="VARCHAR"property="description"/><resultcolumn="icon"jdbcType="VARCHAR"property="icon"/><resultcolumn="type"jdbcType="TINYINT"property="type"/><resultcolumn="alias"jdbcType="VARCHAR"property="alias"/><resultcolumn="system_id"jdbcType="INTEGER"property="systemId"/><resultcolumn="ctime"jdbcType="BIGINT"property="ctime"/><resultcolumn="orders"jdbcType="BIGINT"property="orders"/><resultcolumn="attention"jdbcType="BIGINT"property="attention"/></resultMap><!--继承基础类型BaseResultMap,association一对一关联查询--><resultMapextends="BaseResultMap"id="ClassesResultMap"type="com.thomson.content.dao.model.ContentCategory"></resultMap>  <!--这一步是关键的连表查询--><selectid="selectContentCategoryByCode"parameterType="map"resultMap="ClassesResultMap">selectcontent_c.*fromcontent_categorycontent_cleftjoincontent_systemcontent_soncontent_s.code=content_s.code=#{code,jdbcType=VARCHAR}wherecontent_s.system_id=content_c.system_id</select><!--缓存--><cachetype="org.mybatis.caches.ehcache.LoggingEhcache"/></mapper>

然后是Mapper接口

packagecom.thomson.content.rpc.mapper;importcom.thomson.content.dao.model.ContentCategory;importorg.apache.ibatis.annotations.Param;importjava.util.List;/***类目ExtMapper*CreatedbyThomsonon2022/01/10.*根据content_system的code获取类目*/publicinterfaceContentCategoryExtMapper{intup(Stringcode);intdown(Stringcode);List<ContentCategory>selectContentCategoryByCode(@Param("code")Stringcode);}

接下来是实现类

importcom.thomson.Content.dao.model.ContentArticle;importcom.thomson.Content.rpc.mapper.ContentCategoryExtMapper;importcom.thomson.common.annotation.BaseService;importcom.thomson.common.base.BaseServiceImpl;importcom.thomson.Content.dao.mapper.ContentCategoryMapper;importcom.thomson.Content.dao.model.ContentCategory;importcom.thomson.Content.dao.model.ContentCategoryExample;importcom.thomson.Content.rpc.api.ContentCategoryService;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;importjava.util.List;/***ContentCategoryService实现*CreatedbyThomsonon2021/01/10.*/@Service@Transactional@BaseServicepublicclassContentCategoryServiceImplextendsBaseServiceImpl<ContentCategoryMapper,ContentCategory,ContentCategoryExample>implementsContentCategoryService{privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(ContentCategoryServiceImpl.class);@AutowiredContentCategoryExtMapperContentCategoryExtMapper;//@OverridepublicList<ContentCategory>selectContentCategoryByCode(Stringcode){returnContentCategoryExtMapper.selectContentCategoryByCode(code);}}

在controll下获取数据

@ApiOperation(value="类目列表")@RequiresPermissions("content:category:read")@RequestMapping(value="/list",method=RequestMethod.GET)@ResponseBodypublicObjectlist(@RequestParam(required=false,defaultValue="0",value="offset")intoffset,@RequestParam(required=false,defaultValue="10",value="limit")intlimit,@RequestParam(required=false,value="sort")Stringsort,@RequestParam(required=false,value="order")Stringorder){    Map<String,Object>result=newHashMap<>(2);Stringcode="news";List<ContentCategory>categories=ContentCategoryService.selectContentCategoryByCode(code);System.out.print("\n"+categories+"\n");  result.put("rows",categories);    result.put("total",total);returnresult;}

关于“Mybatis怎么使用连表查询”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

本文:Mybatis怎么使用连表查询的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:pandas重复行删除操作df.drop_duplicates和df.duplicated的区别是什么下一篇:

21 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18