Mybatis的返回值深入

简介: Mybatis的返回值深入

resultType 配置结果类型


(1)resultType 属性可以指定结果集的类型,它支持基本类型和实体类类型。我们在前面的 CRUD 案例中已经对此属性进行过应用了。

(2)需要注意的是,它和 parameterType 一样,如果注册过类型别名的,可以直接使用别名。没有注册过的必须使用全限定类名。例如:我们的实体类此时必须是全限定类名(今天最后一个章节会讲解如何配置实体类的别名)

(3)同时,当是实体类名称是,还有一个要求,实体类中的属性名称必须和查询语句中的列名保持一致,否则无法实现封装。


基本类型示例


Dao 接口


/**
* 查询总记录条数
* @return
*/
int findTotal();

映射配置


<!-- 查询总记录条数 --> 
<select id="findTotal" resultType="int">
select count(*) from user;
</select>

实体类类型示例


Dao 接口


/**
* 查询所有用户
* @return
*/
List<User> findAll();

映射配置

<!-- 配置查询所有操作 --> 
<select id="findAll" resultType="com.keafmd.domain.User">
select * from user
</select>

特殊情况示例


修改实体类


实体类代码如下:(此时的实体类属性和数据库表的列名已经不一致了)


public class User implements Serializable {
    private Integer userId;
    private String userName;
    private Date userBirthday;
    private String userSex;
    private String userAddress;
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public Date getUserBirthday() {
        return userBirthday;
    }
    public void setUserBirthday(Date userBirthday) {
        this.userBirthday = userBirthday;
    }
    public String getUserSex() {
        return userSex;
    }
    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }
    public String getUserAddress() {
        return userAddress;
    }
    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }
    @Override
    public String toString() {
        return "User [userId=" + userId + ", userName=" + userName + ", userBirthday="
                + userBirthday + ", userSex="
                + userSex + ", userAddress=" + userAddress + "]";
    }
}

Dao 接口

/**
* 查询所有用户
* @return
*/
List<User> findAll();

映射配置


<!-- 配置查询所有操作 --> 
<select id="findAll" resultType="com.keafmd.domain.User">
select * from user
</select>

测试查询结果


@Test
public void testFindAll() {
   List<User> users = userDao.findAll();
   for(User user : users) {
       System.out.println(user);
   } 
}

输出结果:

1.png

名称会有值,是因为:mysql 在 windows 系统中不区分大小写!


修改映射配置


使用别名查询


<!-- 配置查询所有操作 --> 
<select id="findAll" resultType="com.keafmd.domain.User">
select id as userId,username as userName,birthday as userBirthday,sex as userSex,address as userAddress from user
</select>

输出结果:

1.png


如果我们的查询很多,都使用别名的话写起来会很麻烦,有别的解决办法,继续往下面看。


resultMap 结果类型


(1)resultMap 标签可以建立查询的列名和实体类的属性名称不一致时建立对应关系。从而实现封装。

(2)在 select 标签中使用 resultMap 属性指定引用即可。同时 resultMap 可以实现将查询结果映射为复杂类型的 pojo,比如在查询结果映射对象中包括 pojo 和 list 实现一对一查询和一对多查询。


定义 resultMap


<!-- 建立 User 实体和数据库表的对应关系
type 属性:指定实体类的全限定类名
id 属性:给定一个唯一标识,是给查询 select 标签引用用的。--> 
<resultMap type="com.itheima.keafmd.User" id="userMap"> <id column="id" property="userId"/>
<result column="username" property="userName"/>
<result column="sex" property="userSex"/>
<result column="address" property="userAddress"/>
<result column="birthday" property="userBirthday"/>
</resultMap>
<!-- id 标签:用于指定主键字段
result 标签:用于指定非主键字段
column 属性:用于指定数据库列名
property 属性:用于指定实体类属性名称--> 

映射配置


<!-- 配置查询所有操作 --> 
<select id="findAll" resultMap="userMap">
     select * from user
</select>

测试结果


@Test
public void testFindAll() {
   List<User> users = userDao.findAll();
   for(User user : users) {
      System.out.println(user);
   } 
}

输出结果:

1.png


这样即使是别名,也都可以查询到,同时相比于上面的在sql语句中进行别名操作对于开发更加方便,但是上面的方法更高效。


以上就是Mybatis的返回值深入的全部内容。

相关文章
|
SQL Java 数据库连接
详解Mybatis查询之resultType返回值类型问题【4种情况】
详解Mybatis查询之resultType返回值类型问题【4种情况】
|
Java 数据库连接 mybatis
【SSM框架】Mybatis详解10(源码自取)之入参、返回值map
本节主要复习入参和返回值。 指定参数位置、入参是map、返回值是map 和我一起复习下去你可以获得一个比较完美框架demo,并且深刻体会框架。 坚持到最后的源码解析你会收获更多哦,加油坚持!!!
【SSM框架】Mybatis详解10(源码自取)之入参、返回值map
|
Java 数据库连接 数据库
Mybatis查询数据库时没有查询到数据返回值的类型
Mybatis查询数据库时没有查询到数据返回值的类型
263 0
Mybatis查询数据库时没有查询到数据返回值的类型
|
XML Java 关系型数据库
Spring boot(SpringMVC)使用mybatis的delete方法返回值
Spring boot(SpringMVC)使用mybatis的delete方法返回值
1311 0
|
XML 关系型数据库 MySQL
MyBatis传递中文参数返回值为空
本文目录 1. 现象 2. 跟踪 3. 定位 4. 解决
477 0
|
SQL 关系型数据库 数据库
03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
 1 PersonTestMapper.xml中的内容如下: &lt;?xmlversion="1.0"encoding="UTF-8"?&gt; &lt;!DOCTYPEmapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapp
1276 0
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1751 1
Spring boot 使用mybatis generator 自动生成代码插件
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
919 2
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
1213 0