MyBatis的输出结果封装

resultType配置结果类型

resultType是用来指定结果集的类型,它支持基本类型和实体类类型.和parameterType一样,如果注册了类型的别名,可以直接使用别名,没有注册过别名必须使用类的全限定名.同时当是实体类名称时,实体类中的属性必须和查询语句中的列名保持一致.

基本数据类型

DAO层接口

//查询总用户数
int findTotal();

映射文件配置

<!--查询总用户数-->
<select id="findTotal" resultType="int">
    select count(id) from user;
</select>

测试方法

// 查询总用户数
@Test
public void testfindTotal() {
    Integer count = userDao.findTotal();
    System.out.println(count);
}

实体类类型

DAO层接口

/**
 * @Description: 查询所有用户
 * @Param: []
 * @return: java.util.List<domain.User>
 * @Author: Chen
 */
List<User> findAll();

映射文件的配置

<!--查询所有-->
<select id="findAll" resultType="domain.User">
    select * from user;
</select>

测试方法

@Test
public void testFindAll() {
    //使用代理对象执行查询所有方法
    List<User> users = userDao.findAll();
    for (User user : users
    ) {
        System.out.println(user);
    }
}

特殊情况

当实体类名称和数据库列名不一样的时候是查不出数据的.如果遇到这种情况有两种解决方法:

  1. 使用sql语句的as关键字给列名起别名.格式:列名 as 实体类属性名
  2. 使用resultMap

resultMap结果类型

resultMap标签可以建立查询的列名和实体类的属性名不一致时建立对应关系.从而实现封装.然后在select标签中使用resultMap属性指定引用即可.同时resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括POJO和List实现一对一,一对多查询.

实体类

package domain;

import java.util.Date;

/**
* @program: day2_1mybatisCRUD
* @description: 实体类
* @author: Mr.Wang
* @create: 2019-05-07 23:02
**/
public class User {
    //字段名字要和数据库中的字段名字一样
    private Integer userId;
    private String userUsername;
    private Date userBirthday;
    private String userSex;
    private String userAddress;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserUsername() {
        return userUsername;
    }

    public void setUserUsername(String userUsername) {
        this.userUsername = userUsername;
    }

    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 +
                ", userUsername='" + userUsername + '\'' +
                ", userBirthday=" + userBirthday +
                ", userSex='" + userSex + '\'' +
                ", userAddress='" + userAddress + '\'' +
                '}';
    }
}

数据库字段

id    int(11)    NO    PRI        auto_increment
username    varchar(32)    NO    ""        ""
birthday    datetime    YES    ""        ""
sex    char(1)    YES    ""        ""
address    varchar(256)    YES    ""        ""

DAO层接口

List<User> findAll();

映射文件

<resultMap id="userMap" type="domain.User">
    <id column="id" property="userId"/>
    <result column="username" property="userUsername"/>
    <result column="birthday" property="userBirthday"/>
    <result column="sex" property="userSex"/>
    <result column="address" property="userAddress"/>
</resultMap>

<select id="findAll" resultMap="userMap">
    select * from user;
</select>

 上一篇
MyBatisSqlMapConfig.xml配置文件 MyBatisSqlMapConfig.xml配置文件
SqlMapConfig.xml中配置的内容和顺序 properties(属性) property settings(全局配置参数) setting typeAliases(类型别名) typeAliases package t
2019-05-16
下一篇 
MyBatis的参数深入 MyBatis的参数深入
parameterType配置参数给Sql语句传参数使用parameterType属性进行设置.该属性可以读取基本数据类型也可以读取引用类型,还可以是POJO类,同时也可以使用实体类的包装类. 注意: 基本数据类型和String在传参数的时
2019-05-16
  目录