mybatis Mapper文件中resultType与resultMap的区别
resultType与resultMap都用来定义返回值的类型。
resultType, 可以是Java 代码中的vo、po、entity的任意一个,使用的时候要写全包名路径。如下图所示:
<select id="countClearingData" resultType="com.money56.amp.api.module.fm.po.ClearingPO" parameterType="com.money56.amp.api.module.fm.vo.ClearingVo"> select * from fm_clearing </select>
resultMap, 只能是当前mapper文件中定义的返回数据。如下图所示:
<resultMap id="BaseResultMap" type="com.money56.amp.api.module.fm.entity.Clearing" > <id column="clearing_id" property="clearingId" jdbcType="CHAR" /> <result column="total_money" property="totalMoney" jdbcType="DECIMAL" /> <result column="line_no" property="lineNo" jdbcType="CHAR" /> <result column="clearing_status" property="clearingStatus" jdbcType="INTEGER" /> <result column="clearing_time" property="clearingTime" jdbcType="TIMESTAMP" /> <result column="remarks" property="remarks" jdbcType="VARCHAR" /> </resultMap>
<delete id="delete" parameterType="java.lang.String" > delete from fm_clearing where clearing_id = #{clearingId,jdbcType=CHAR} </delete>
resultMap 与 resultType,根据实际情况分别使用。
注意:使用resultType,select后面必须加别名,且要与resultType的实体类的属性一一对应。
如下图所示:select 后面as的别名与FinanceApplyPO里的属性是对应的,否则会出现匹配不到的情况,造成空指针。
<select id="getClearingDetail" resultType="com.money56.amp.api.module.lms.po.FinanceApplyPO" parameterType="com.money56.amp.api.module.fm.entity.ClearingDetail" > SELECT a.borrow_apply_id as borrowApplyId,a.cost_interest as costInterest,a.rate as rate,a.interest_date as interestDate,a.deadline_date as deadlineDate,(SELECT SUM(b.repayment_interest) FROM lms_repayment_plan as b WHERE b.borrow_apply_id = #{borrowApplyId,jdbcType=CHAR}) as suminterest FROM lms_finance_apply as a WHERE a.borrow_apply_id = #{borrowApplyId,jdbcType=CHAR} </select>
查询多个状态的数据的操作
含义:在一个数据表中一次查询多个状态的数据。
示例:一张结算表,有新建、已对账、已结清、已作废4个状态。页面需要展示待处理的列表,需要查新建、已对账的记录总和。
方法:在mybatis中使用foreach语句
代码如下:
<select id="listClearing" resultMap="BaseResultMap" parameterType="com.money56.amp.api.module.fm.vo.ClearingVo" > select <include refid="Base_Column_List" /> from fm_clearing as a where 1=1 <if test="clearingStatusList != null"> AND a.clearing_status in <foreach collection="clearingStatusList" item="status" open="(" separator="," close=")"> '${status}' </foreach> </if> <if test="startTime != null and startTime != ''" > and a.clearing_begin_month >= #{startTime} </if> <if test="endTime != null and endTime != '' " > and a.clearing_end_month <= #{endTime} </if> </select>
service代码如下:
public String getByPageList(ClearingVo vo,PageParameter pageParameter) { if (StringUtils.isBlank(vo.getClearingStatusReunites())) { //默认0,1 String defaultStatus = "0,1"; vo.setClearingStatusList(Arrays.asList(defaultStatus.split(","))); } else { vo.setClearingStatusList(Arrays.asList(vo.getClearingStatusReunites().split(","))); } //查询结果 List<Clearing> list = dao.listClearing(vo, getPageBounds(pageParameter, new ArrayList<>())); //转换 PageList<ClearingVo> pageList = toVos((PageList<Clearing>)list); if (pageList == null || pageList.size() == 0) { return buildFailResult(SystemStatus.NoData); } else { return buildSuccessResult(pageList); } }