mybatis的collection属性_安全带的使用方法和步骤
2023-06-13 09:11:01 时间
表关系: 问题表
1==>n 问题选项表
,
需求: 查询问题
时候,联查出来问题选项
//问题 实体类
public class Question {
private String id; //ID
private String content; //问题
private String type; //问题类型 1:单选,2:多选,3:问答
private Integer sort; //排序
private List<QuestionOption> options; //问题选项 *** 问题表里不需要有这个属性对应的字段
//...
}
//问题选项 实体类
public class QuestionOption{
private String id; //ID
private String qid; //问题ID *** 问题选项表里需要有这个属性对应的字段
private String content; //选项
private Integer sort; //排序
//...
}
方式一:
代码复用性高, 主表分页查询正确
QuestionMapper.xml
<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
<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>
方式二:
只需要执行一次sql查询, 主表分页查询不正确
QuestionMapper.xml
<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
相关文章
- 【说站】js函数中arguments属性是什么
- 避免使用beanutils进行属性的copy_聚散球的使用方法
- 巧用 CSS3 filter(滤镜) 属性
- Android中android:visibility的3中属性的剖析详解手机开发
- jquery选择器之属性过滤选择器详解编程语言
- Drools规则文件的语法属性详解编程语言
- [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构编程语言
- JSP Request.getAttribute()方法:获取指定的属性值
- JS hasOwnProperty()方法:检测一个属性是否是对象的自有属性
- 快速更新MySQL列属性的方法(mysql更改列属性)
- MySQL计算属性间差值(MySQL两属性相减)
- python创建只读属性对象的方法(ReadOnlyObject)
- javascript检测对象中是否存在某个属性判断方法小结
- js兼容的placeholder属性详解
- IE里button设置border:none属性无效解决方法
- python通过ElementTree操作XML获取结点读取属性美化XML
- JS操作Array数组的方法及属性实例解析
- C#实现ProperTyGrid自定义属性的方法