前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis的collection属性_安全带的使用方法和步骤

mybatis的collection属性_安全带的使用方法和步骤

作者头像
全栈程序员站长
发布2022-09-23 10:57:05
3570
发布2022-09-23 10:57:05
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

表关系: 问题表 1==>n 问题选项表, 需求: 查询问题时候,联查出来问题选项

代码语言:javascript
复制
//问题 实体类
public class Question { 
   
	private	String id; //ID
	private	String content; //问题
	private	String type; //问题类型 1:单选,2:多选,3:问答
	private	Integer sort; //排序
	private List<QuestionOption> options; //问题选项 *** 问题表里不需要有这个属性对应的字段
	//...
}
代码语言:javascript
复制
//问题选项 实体类
public class QuestionOption{ 
   
	private	String id; //ID
	private	String qid; //问题ID *** 问题选项表里需要有这个属性对应的字段
	private	String content; //选项
	private	Integer sort; //排序
	//...
}

方式一:

代码语言:javascript
复制
代码复用性高, 主表分页查询正确

QuestionMapper.xml

代码语言:javascript
复制
<mapper namespace="com.xxx.modules.xxx.mapper.QuestionMapper">

<resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.Question" >
		<id column="id" property="id" jdbcType="VARCHAR" />
		<result column="content" property="content" jdbcType="VARCHAR" />
		<result column="type" property="type" jdbcType="VARCHAR" />
		<result column="sort" property="sort" jdbcType="INTEGER" />
		<collection property="options" javaType="java.util.ArrayList" ofType="com.xxx.modules.xxx.entity.QuestionOption" select="com.xxx.modules.xxx.mapper.QuestionOptionMapper.selectList" column="{qid=id,sort=sort}" />
		<!-- qid/sort是定义的变量名, id/sort是主表的字段id/sort, 先查出主表的结果, 然后主表记录数是几 就执行几次 collection 的select, javaType和ofType 写不写都行, select的值: 对应xml的namespace + 对应xml中的代码片段的id, column作为select语句的参数传入,如果只传一个参数id可以简写: column="id" -->
	</resultMap>

	<!-- 查询列表 -->
	<select id="selectList" resultMap="BaseResultMap">
        SELECT
        	pq.id, pq.content, pq.type, pq.sort
        FROM
        	question AS pq
        <where>  
        </where>
    </select>

QuestionOptionMapper.xml

代码语言:javascript
复制
<mapper namespace="com.xxx.modules.xxx.mapper.QuestionOptionMapper">

 <!-- 查询列表 -->
 <select id="selectList" resultType="QuestionOption">
     SELECT
     	pqo.id, pqo.content, pqo.sort
     FROM
     	question_option AS pqo
     <where>
     	pqo.qid = #{qid} <!-- 变量名 qid 对应上文的 qid -->
     	<!-- 如果上文中 collection只传一个参数column="id",只要类型匹配,在这里随便写个变量名就可以取到值 #{xyz} -->
     </where>
 </select>

方式二:

代码语言:javascript
复制
只需要执行一次sql查询, 主表分页查询不正确

QuestionMapper.xml

代码语言:javascript
复制
<mapper namespace="com.xxx.modules.xxx.mapper.QuestionMapper">

<resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.Question" >
		<id column="id" property="id" jdbcType="VARCHAR" />
		<result column="content" property="content" jdbcType="VARCHAR" />
		<result column="type" property="type" jdbcType="VARCHAR" />
		<result column="sort" property="sort" jdbcType="INTEGER" />
		<collection property="options" javaType="java.util.ArrayList" ofType="com.xxx.modules.data.entity.QuestionOption">
			<id column="oid" property="id" jdbcType="VARCHAR" />
			<result column="ocontent" property="content" jdbcType="VARCHAR" />
			<result column="osort" property="sort" jdbcType="INTEGER" />
		</collection>
		<!-- 列的别名 oid,ocontent,osort , 起别名是因为主子表都有这几个字段 这里要写 ofType, javaType还是可以不写 -->
	</resultMap>

	<!-- 查询列表 -->
	<select id="selectList" resultMap="BaseResultMap">
        SELECT
        	pq.id, pq.content, pq.type, pq.sort
        	,pqo.id AS oid ,pqo.content AS ocontent ,pqo.sort AS osort <!-- 联查子表字段,起别名 -->
        FROM
        	question AS pq
        	LEFT JOIN question_option pqo ON pq.id = pqo.qid <!-- 联查子表 -->
        <where>  
        </where>
    </select>
注意: 主子表要查询出来的字段名重复,要起别名

参考博客

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172112.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方式一:
  • 方式二:
    • 注意: 主子表要查询出来的字段名重复,要起别名
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档