内容简介:版权声明:本文由 低调小熊猫 发表于 低调小熊猫的博客转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032文章链接:
版权声明:本文由 低调小熊猫 发表于 低调小熊猫的博客
转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032
文章链接: https://aodeng.cc/archives/mybatisgaoji
简介
聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;
额,估计这样说大家听不懂,简单的意思就是把两张表联系起来,用于解决一些奇怪的需求
代码
1.定义简单的 sql 片段
<!-- 基本查询--> <sql id="vo_select"> SELECT vo.expenseId, vo.projectId, vo.expenseUserId, sua.realName as expenseUserName, vo.expenseTime, vo.expenseTypeId, vo.beneficialDepartmentId, sd.name as beneficialDepartmentName, vo.currencyId, vo.money, vo.paperCheckerId, vo.paperCheckerTime, vo.paidDepartmentId, vo.paidUserId, vo.paidTime, vo.expenseNote, vo.description, vo.currentStatus, vo.invoiceAmount, vo.paperFlag, vo.recordFlag, vo.createUserId, vo.createTime FROM p_expense vo INNER JOIN sys_user_archive sua ON sua.userId=vo.expenseUserId INNER JOIN sys_department sd ON sd.departmentId=vo.beneficialDepartmentId </sql>
2.查询条件拼接,返回resultMap
<select id="findAll" parameterType="Pasv" resultMap="pexpenseMap"> <include refid="vo_select"/> WHERE 1=1 <!--根据登陆人判断流程审核步骤的人是否一样 --> <if test="vo.userId !=null and vo.userId !=''"> AND ( EXISTS( select 0 from p_expense_flow pef where pef.flag=0 and pef.checkUserIds like concat('%#',#{vo.userId},'#%') AND pef.expenseID=vo.expenseId ) ) </if> <!-- 根据时间查询 --> <if test="vo.searchStartTime !=null and vo.searchStartTime !=''"> AND vo.createTime >=DATE_FORMAT(#{vo.searchStartTime},'%Y-%m-%d') </if> <if test="vo.searchEndTime !=null and vo.searchEndTime !=''"> AND vo.createTime <DATE_FORMAT(date_add(#{vo.searchEndTime}, INTERVAL 1 day),'%Y-%m-%d') </if> <!-- 注释掉是避免从我的任务中查询显示一条数据--> <!-- <if test="null!=vo.expenseId and ''!=vo.expenseId"> AND vo.expenseId = #{vo.expenseId} </if> --> <if test="null!=vo.projectId and ''!=vo.projectId"> AND vo.projectId = #{vo.projectId} </if> <if test="null!=vo.expenseUserId and ''!=vo.expenseUserId"> AND vo.expenseUserId = #{vo.expenseUserId} </if> <if test="null!=vo.expenseTime and ''!=vo.expenseTime"> AND vo.expenseTime = #{vo.expenseTime} </if> <if test="null!=vo.expenseTypeId and ''!=vo.expenseTypeId"> AND vo.expenseTypeId = #{vo.expenseTypeId} </if> <if test="null!=vo.beneficialDepartmentId and ''!=vo.beneficialDepartmentId"> AND vo.beneficialDepartmentId = #{vo.beneficialDepartmentId} </if> <if test="null!=vo.currencyId and ''!=vo.currencyId"> AND vo.currencyId = #{vo.currencyId} </if> <if test="null!=vo.money and ''!=vo.money"> AND vo.money = #{vo.money} </if> <!-- 根据报销人 --> <if test="vo.searchName !=null and vo.searchName !=''"> AND sua.realName LIKE CONCAT(CONCAT('%', #{vo.searchName}),'%') </if> <if test="null!=vo.paperCheckerId and ''!=vo.paperCheckerId"> AND vo.paperCheckerId = #{vo.paperCheckerId} </if> <if test="null!=vo.paperCheckerTime and ''!=vo.paperCheckerTime"> AND vo.paperCheckerTime = #{vo.paperCheckerTime} </if> <if test="null!=vo.paidDepartmentId and ''!=vo.paidDepartmentId"> AND vo.paidDepartmentId = #{vo.paidDepartmentId} </if> <if test="null!=vo.paidUserId and ''!=vo.paidUserId"> AND vo.paidUserId = #{vo.paidUserId} </if> <if test="null!=vo.paidTime and ''!=vo.paidTime"> AND vo.paidTime = #{vo.paidTime} </if> <if test="null!=vo.description and ''!=vo.description"> AND vo.description = #{vo.description} </if> <if test="null!=vo.currentStatus and ''!=vo.currentStatus"> AND vo.currentStatus = #{vo.currentStatus} </if> <if test="null!=vo.invoiceAmount and ''!=vo.invoiceAmount"> AND vo.invoiceAmount = #{vo.invoiceAmount} </if> <if test="null!=vo.paperFlag and ''!=vo.paperFlag"> AND vo.paperFlag = #{vo.paperFlag} </if> <if test="null!=vo.recordFlag and ''!=vo.recordFlag"> AND vo.recordFlag = #{vo.recordFlag} </if> <if test="null!=vo.createUserId and ''!=vo.createUserId"> AND vo.createUserId = #{vo.createUserId} </if> <if test="null!=vo.createTime and ''!=vo.createTime"> AND vo.createTime = #{vo.createTime} </if> <if test="null!=vo.enabled and ''!=vo.enabled"> AND vo.enabled = #{vo.enabled} </if> <!-- 根据报销金额范围查询 --> <if test="vo.searchStartMoney !=null and vo.searchStartMoney !='' and vo.searchStartMoney!=0"> and vo.money <![CDATA[ >= ]]> #{vo.searchStartMoney} </if> <if test="vo.searchEndMoney !=null and vo.searchEndMoney !='' and vo.searchEndMoney!=0"> and vo.money <![CDATA[ <= ]]> #{vo.searchEndMoney} </if> </select>
3.定义resultMap,用于上面返回的resultMap,重点在于collection,先看代码,我下面解释
<resultMap type="com.account.web.vo.project.PExpenseVo" id="pexpenseMap"> <id column="expenseId" property="expenseId"/> <result column="projectId" property="projectId"/> <result column="expenseUserId" property="expenseUserId"/> <result column="expenseUserName" property="expenseUserName"/> <result column="expenseTime" property="expenseTime"/> <result column="expenseTypeId" property="expenseTypeId"/> <result column="beneficialDepartmentId" property="beneficialDepartmentId"/> <result column="beneficialDepartmentName" property="beneficialDepartmentName"/> <result column="currencyId" property="currencyId"/> <result column="money" property="money"/> <result column="paperCheckerId" property="paperCheckerId"/> <result column="paperCheckerTime" property="paperCheckerTime"/> <result column="paidDepartmentId" property="paidDepartmentId"/> <result column="paidUserId" property="paidUserId"/> <result column="paidTime" property="paidTime"/> <result column="expenseNote" property="expenseNote"/> <result column="description" property="description"/> <result column="currentStatus" property="currentStatus"/> <result column="invoiceAmount" property="invoiceAmount"/> <result column="paperFlag" property="paperFlag"/> <result column="recordFlag" property="recordFlag"/> <result column="createUserId" property="createUserId"/> <result column="createTime" property="createTime"/> <collection property="checkers" ofType="com.account.web.vo.admin.system.SysUserArchiveVo" select="findChecker3" column="{expenseId2=expenseId}"> </collection> </resultMap>
4.定义collection用的sql片段
<select id="findChecker3" resultType="com.account.web.vo.admin.system.SysUserArchiveVo"> select pef.expenseFlowId,sua.userId,sua.realName,pef.folwMomentId as folwMomentId from sys_user_archive sua INNER JOIN p_expense_flow pef ON pef.checkUserId =sua.userId AND pef.expenseid=#{expenseId2} </select>
低调小熊猫独家解析
先给大家看一张图,我就是靠这一张图学会的
ok,这样聪明的估计就学会了,不会的看上面代码吧
额,还是解释几个地方
<collection property="checkers" ofType="com.account.web.vo.admin.system.SysUserArchiveVo" select="findChecker3" column="{expenseId2=expenseId}"> </collection>
1.property=”checkers”就是上面那个resultMap返回的实体类里面封装的一个集合属性。
2.ofType=”com.account.web.vo.admin.system.SysUserArchiveVo”就是集合的类型
3.select=”findChecker3”就是第四步使用的sql片段的id
4.column=”{expenseId2=expenseId}”那,这个就比较重要了,expenseId就是上面resultMap的字段的名字,expenseId2就是下面sql片段里面条件接收值的字段
以上所述就是小编给大家介绍的《Mybatis高级-resultMap之collection聚集》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机程序设计艺术:第4卷 第4册(双语版)
Donald E.Knuth / 苏运霖 / 机械工业出版社 / 2007-4 / 42.00元
关于算法分析的这多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷组成了程序设计理论和实践的惟一的珍贵源泉,无数读者都赞扬Knuth的著作对个人的深远影响。科学家们为他的分析的美丽和优雅所惊叹,而从事实践的程序员们已经成功地应用他的“菜谱式”的解到日常问题上,所有人都由于Knuth在书中所表现出的博学、清晰、精确和高度幽默而对他无比敬仰。 为开始后续各卷的写作并更......一起来看看 《计算机程序设计艺术:第4卷 第4册(双语版)》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
HSV CMYK 转换工具
HSV CMYK互换工具