MyBatis的返回参数类型

MyBatis的返回参数类型分两种

1.  对应的分类为:

1.1. resultMap :

1.2. resultType :


2 . 对应返回值类型:

2.1. resultMap : 结果集[对象等]

2.2. resultType : Integer,String ,Long ,class

3. 注意点:

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
     
3.1  当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时
候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
     
3.2  当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

4.案例

4.1:resultMap案例

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
    select 
    <include refid="Base_Column_List" />
    from common_car_make
    where id = #{id,jdbcType=BIGINT}
  </select>
4.2 resultType--Long案例

<select id="queryCarTypeByModelIdCount" resultType="java.lang.Long" parameterType="java.util.Map">
        select count(*)  from common_car_type cm
        where 1=1
        <if test="carModelId != null">
            and  cm.car_model_id = #{carModelId,jdbcType=DECIMAL}
        </if>
    </select>
4.3 resultType--Integer案例

<select id="queryCategoryBrandCount" resultType="java.lang.Integer" parameterType="java.util.HashMap" >
        select count(1)
        from common_category_brand
        where 1=1
        <if test="categoryId != null" >
            and category_id = #{categoryId,jdbcType=BIGINT}
        </if>
        <if test="brandId != null" >
            and brand_id = #{brandId,jdbcType=BIGINT}
        </if>
    </select>

4.4 resultType--class案例:查询结果对应类中的属性值

<select id="selectCommonBrand" resultType="com.epeit.api.model.CommonBrandPo" parameterType="java.lang.Long" >
        select
        id, brand_name brandName, brand_type brandType, icon, delete_flag deleteFlag
        from common_brand
        where id = #{id,jdbcType=BIGINT}
    </select>







### MyBatis 返回数值类型的处理方式 当使用 MyBatis 进行数据库操作并期望返回数值类型的结果时,通常有几种常见的方式可以实现这一目标。这些方法不仅限于简单查询,还包括复杂场景下的数据映射。 #### 使用 `selectOne` 方法返回单个数值 对于只需要获取单一数值的情况,可以直接通过 `selectOne` 来完成: ```java public Integer selectCount(); ``` 此接口定义了一个名为 `selectCount` 的方法,它不接受任何参数,并预期从数据库中检索到一个整型值作为结果[^1]。 #### 映射至 Java 基本数据类型或其包装类 MyBatis 支持直接将 SQL 查询的结果映射成 Java 中的基本数据类型(如 int, long)或是它们对应的包装类(Integer, Long)。这意味着如果 SQL 执行后的结果集中只有一列,则该列的数据会被自动转换为目标类型。 例如,在 XML 配置文件中的写法如下所示: ```xml <select id="getTotalSales" resultType="int"> SELECT SUM(sales_amount) FROM sales; </select> ``` 这里指定了 `resultType="int"` 表明希望得到的是一个整形数值;而实际的 SQL 语句计算销售总额并将这个总金额作为一个单独的数值返回给应用程序[^2]。 #### 处理多条记录中的特定字段 有时可能会遇到这样的需求——虽然有多行数据被查出来,但是只需提取其中某一行里的某个具体数值。此时可以通过指定 `columnLabel` 或者是在 resultMap 中精确配置来达成目的。 下面是一个基于 resultMap 实现的例子: ```xml <resultMap type="map" id="singleValueResultMap"> <result property="value" column="total"/> </resultMap> <select id="findSingleValue" resultMap="singleValueResultMap"> SELECT COUNT(*) AS total FROM users WHERE status = #{status}; </select> ``` 这段代码片段展示了如何创建一个仅含有所需属性的地图对象 (`property="value"` 对应着最终要获得的那个数值),并通过设置别名(`AS total`)使得它可以轻松地与 resultMap 关联起来[^3]。 为了防止潜在的安全风险,特别是涉及到动态构建 SQL 语句的时候,应当采取措施避免 SQL 注入攻击。比如采用预编译语句、严格验证输入以及对特殊字符做适当转义等手段加以防范[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值