2.7 Mybatis——返回值处理

本文详细介绍了在MyBatis中如何处理返回自定义对象及其属性值的方法,包括直接返回对象、使用HashMap接收、通过对象接收以及DTO设计模式的应用。通过实例展示了在DAO层和映射文件中的配置,以及测试结果,强调了DTO设计模式在处理多个属性值时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.返回值为自定义对象类型

2. 返回值为自定义对象的一个属性

 3.返回值为自定义对象多个属性的值

        方法一:使用HashMap接收

        方法二:使用对象接收

         方法三:使用DTO设计模式接收

拓展:DTO设计模式

4.使用DTO设计模式接收两个表中的多个属性


1.返回值为自定义对象类型

2. 返回值为自定义对象的一个属性

返回值类型为具体返回属性的数据类型。

(1)Dao层方法:

 (2)Dao层对应的映射文件

 (3)运行测试

 3.返回值为自定义对象多个属性的值

        方法一:使用HashMap接收

dao层方法:

 dao层的映射文件:

 

 运行测试:

测试结果:

        方法二:使用对象接收

dao层方法:

 //返回值为自定义对象多个属性的值——使用自定义对象User接收
    User getUnameAgeById2(int id);

对应映射文件  

<!--返回值为自定义对象多个属性的值——使用自定义对象User接收-->
    <select id="getUnameAgeById2" resultType="com.zx.pojo.User">
        select uname,age from user where id=#{id}
    </select>

运行测试:

 @Test  //User对象接收会将不需要的属性也展示出来,不过值为null
    public void getUnameAgeById2Test(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);

        User user = userDao.getUnameAgeById2(9);
        System.out.println(user);
    }

  测试结果:

         方法三:使用DTO设计模式接收

首先设计一个临时新类,属性为要查询的目标属性。

dao层方法:

 方法对应的映射文件:

运行测试:

 

运行结果:

 拓展:DTO设计模式

拓展:DTO设计模式——将需要的查询的属性临时封装在一个新的实体类,作为属性建立setget方法,重写toString方便打印。

4.使用DTO设计模式接收两个表中的多个属性

实例:查询user表的用户名(uname)和年龄(age),以及groups表对应的组名(gname)。

(1)新建一个临时新类,属性为所要查询到目标属性,写出对应的set、get方法,重写toString方法。

public class Temp {

    private String uname;//user表属性
    private int age;

    private String gname;//groups表属性
}

(2)dao层对应方法

//返回值为两个表中的属性——使用DTO设计模式,查询user表和groups表的属性
Temp getUnameAgeGnameById(int id);

(3) 方法对应的映射文件:

<!--返回值为两个表中的属性——使用DTO设计模式-->
 <select id="getUnameAgeGnameById" resultType="com.zx.pojo.Temp">
       SELECT uname,age,gname from user u,groups g where u.gid=g.gid and u.id=#{id};
 </select>

(4)运行测试:

 @Test
 public void getUnameAgeGnameByIdTest(){
     SqlSession sqlSession = MybatisUtil.getSqlSession();
     UserDao userDao = sqlSession.getMapper(UserDao.class);

     Temp temp = userDao.getUnameAgeGnameById(9);
     System.out.println(temp);
}

测试结果:

### MyBatis 中 Delete 操作的返回值含义及用法 #### 删除操作的结果反馈 在 MyBatis 下执行 `delete` 操作时,可以通过返回值来判断删除语句是否成功以及具体影响了多少行数据。对于 SQL 的 DELETE 语句而言,其返回的是受该命令影响的行数[^1]。 如果没有任何记录被删除,则返回值为 0 表明未找到符合条件的数据项并因此无任何更改发生;反之如果有 n 条满足条件的数据被执行了删除动作,则会得到正整数值 n 作为响应结果[^5]。 #### Mapper 接口中的方法签名设计 为了更好地处理这些情况,在编写对应的 Java Mapper 接口时可以采用不同类型的返回值: - **void 类型**: 这种方式不会提供关于操作成功的直接反馈信息给调用者。 - **boolean 类型**: 当映射函数完成之后能够告知客户端此次尝试是否有实际效果(即是否存在匹配项),但是无法得知具体的受影响数量。 - **int 或 long 类型**: 此类最为常用也最直观的方式之一就是让接口函数返回 int 或 long 值表示所修改/移除的目标数目[^4]。 ```java // 返回值为空 void deleteById(Long id); // 返回值为布尔类型 boolean deleteUserById(Long id); // 返回值为删除的条数 long removeUserById(Long id); ``` 上述代码片段展示了三种不同的方法定义风格及其预期行为。 #### XML 映射文件配置实例 配合以上提到的方法声明形式,在相应的 XML 文件里也需要做适当调整以确保二者之间的一致性和正确性。这里给出一个简单的例子用于说明如何实现带有参数传递功能的标准删除逻辑[^2]。 ```xml <delete id="removeUserById" parameterType="Long"> DELETE FROM t_user WHERE id = #{id} </delete> ``` 此段 XML 定义了一个名为 `removeUserById` 的删除指令,并指定了它接受 Long 类型的输入参数 `id`,同时将要作用于表 `t_user` 上面去查找具有指定 ID 属性的对象然后将其从数据库中清除掉。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值