MyBatis Plus 将查询结果封装到指定实体
MyBatis Plus 将查询结果封装到指定实体
思路
自定义方法,使用Wrapper,自定义映射结果集
Mapper接口
package com.mozq.boot.mpsand01.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.mozq.boot.mpsand01.pojo.OrderInfo;
import com.mozq.boot.mpsand01.vo.OrderVO;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface OrderInfoDao extends BaseMapper<OrderInfo> {
@Select("select * from order_info ${ew.customSqlSegment}")
/* 只指定2个,其他列能自动匹配的,也会被映射。
@Results({
@Result(id = true, column = "ORDER_ID", property = "orderId", jdbcType = JdbcType.VARCHAR),
@Result(column = "USER_ID", property = "userId", jdbcType = JdbcType.INTEGER)
})
*/
List<OrderVO> findByCondition(@Param(Constants.WRAPPER)Wrapper wrapper);
List<OrderVO> selectOrderVOList(@Param(Constants.WRAPPER)Wrapper wrapper);
}
Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mozq.boot.mpsand01.dao.OrderInfoDao">
<resultMap id="BaseResultMapVO" type="com.mozq.boot.mpsand01.vo.OrderVO">
<id column="ORDER_ID" property="orderId" jdbcType="VARCHAR" />
<result column="USER_ID" property="userId" jdbcType="INTEGER" />
<result column="COMPANY_ID" property="companyId" jdbcType="INTEGER" />
<result column="CUSTOMER_ID" property="customerId" jdbcType="INTEGER" />
<result column="CUSTOMER_NAME" property="customerName" jdbcType="VARCHAR" />
<result column="MOBILE_PHONE" property="mobilePhone" jdbcType="VARCHAR" />
<result column="ACCOUNT_ID" property="accountId" jdbcType="VARCHAR" />
<result column="PRODUCT_ID" property="productId" jdbcType="INTEGER" />
<result column="PRODUCT_NAME" property="productName" jdbcType="VARCHAR" />
<result column="ORDER_TYPE" property="orderType" jdbcType="INTEGER" />
<result column="QUANTITY" property="quantity" jdbcType="DECIMAL" />
<result column="LICENSE_PLATE_NUMBER" property="licensePlateNumber" jdbcType="VARCHAR" />
<result column="PRICE" property="price" jdbcType="DECIMAL" />
<result column="TOTAL_MONEY" property="totalMoney" jdbcType="DECIMAL" />
<result column="PAY_QUANTITY" property="payQuantity" jdbcType="DECIMAL" />
<result column="PAY_MONEY" property="payMoney" jdbcType="DECIMAL" />
<result column="THE_WEIGHT" property="theWeight" jdbcType="INTEGER" />
<result column="DELIVERY_ADDRESS" property="deliveryAddress" jdbcType="VARCHAR" />
<result column="RECEIVE_ADDRESS" property="receiveAddress" jdbcType="VARCHAR" />
<result column="ORDER_STATUS" property="orderStatus" jdbcType="INTEGER" />
<result column="REMARK" property="remark" jdbcType="VARCHAR" />
<result column="PICKUP_TIME" property="pickupTime" jdbcType="TIMESTAMP" />
<result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP" />
<result column="UPDATE_TIME" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List">
ORDER_ID,
USER_ID,
COMPANY_ID,
CUSTOMER_ID,
CUSTOMER_NAME,
MOBILE_PHONE,
ACCOUNT_ID,
PRODUCT_ID,
PRODUCT_NAME,
ORDER_TYPE,
QUANTITY,
LICENSE_PLATE_NUMBER,
PRICE,
TOTAL_MONEY,
PAY_QUANTITY,
PAY_MONEY,
THE_WEIGHT,
DELIVERY_ADDRESS,
RECEIVE_ADDRESS,
ORDER_STATUS,
REMARK,
PICKUP_TIME,
CREATE_TIME,
UPDATE_TIME
</sql>
<select id="selectOrderVOList" resultMap="BaseResultMapVO">
select <include refid="Base_Column_List"></include>
from order_info
${ew.customSqlSegment}
</select>
</mapper>
测试类
@Test
public void selectOrderVOList(){
List<OrderVO> orderVOList = orderInfoDao.selectOrderVOList(
Wrappers.<OrderInfo>lambdaQuery()
.eq(OrderInfo::getUserId, 123456)
.eq(OrderInfo::getCompanyId, 1)
);
System.out.println(orderVOList.size());
List<OrderVO> byCondition = orderInfoDao.findByCondition(
Wrappers.<OrderInfo>lambdaQuery()
.eq(OrderInfo::getUserId, 123456)
.eq(OrderInfo::getCompanyId, 1)
);
System.out.println(byCondition.size());
List<OrderInfo> orderInfoList = orderInfoDao.selectList(
Wrappers.<OrderInfo>lambdaQuery()
.eq(OrderInfo::getUserId, 123456)
.eq(OrderInfo::getCompanyId, 1)
);
System.out.println(orderInfoList.size());
}