美文网首页
传递pojo的包装对象

传递pojo的包装对象

作者: 咸鱼有梦想呀 | 来源:发表于2019-02-27 17:56 被阅读0次

一、输入映射-包装类型

通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型。
1.需求
条件查询用户的综合信息

User.java

package entity;

import java.util.Date;

public class User {
    private int id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

UserCustom.java

package entity;

public class UserCustom extends User {
    //扩展User类
}

UserQuerVo.java

package entity;

public class UserQuerVo {
    private UserCustom userCustom;
        //包装UserCustom
    public UserCustom getUserCustom() {
        return userCustom;
    }

    public void setUserCustom(UserCustom userCustom) {
        this.userCustom = userCustom;
    }
}

userMapper.xml

 <!--综合信息查询 根据姓名和性别-->
<!-- #{userCustom.username} 取出pojo包装对象中姓名-->
    <select id="findUserByinfo" parameterType="entity.UserQuerVo" resultType="entity.UserCustom">
    SELECT * FROM user WHERE username = #{userCustom.username} AND sex LIKE "%${userCustom.sex}%"
    </select>

UserDaoMapperTest.java

@Test
    public void findUserByinfo() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建userDaoMapper对象,mybatis自动生成mapper代理对象
        UserDaoMapper userDaoMapper = sqlSession.getMapper(UserDaoMapper.class);
        //创建包装对象,设置查询条件
        UserQuerVo userQuerVo = new UserQuerVo();
        UserCustom userCustom = new UserCustom();
        userCustom.setUsername("马云");
        userCustom.setSex("男");
        userQuerVo.setUserCustom(userCustom);
        UserCustom userCustom1= userDaoMapper.findUserByinfo(userQuerVo);
        System.out.println(userCustom1);
    }
运行结果

二、输出映射

  • resultType
    使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
    如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。
    只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。

1.输出简单类型
userMapper.xml

<!--输出映射 pojo resultType-->
    <select id="findUserCount" parameterType="entity.UserQuerVo" resultType="int">
        SELECT COUNT(*) FROM  user WHERE username LIKE "%${userCustom.username}%"
    </select>

UserDaoMapper.java

    //输出映射 pojo resultType
    public int findUserCount(UserQuerVo userQuerVo) throws Exception;

UserDaoMapperTest.java

@Test
    public void findUserCount() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDaoMapper userDaoMapper = sqlSession.getMapper(UserDaoMapper.class);
        UserQuerVo userQuerVo = new UserQuerVo();
        UserCustom userCustom = new UserCustom();
        userCustom.setUsername("马");
        userQuerVo.setUserCustom(userCustom);
        int num = userDaoMapper.findUserCount(userQuerVo);
        System.out.println(num);
    }
运行结果

2.输出pojo对象和pojo列表
不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。
mapper.java指定的方法返回值类型不一样

  • 输出单个pojo对象,方法返回值是单个对象类型
返回单个对象类型
  • 输出pojo对象list,方法返回值是List<Pojo>
返回List

生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用 ).

  • resultMap
    如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。
    • 1.定义resultMap
    • 2.使用 resultMap作为输出映射类型

userMapper.xml

<!--配置resultMap映射-->
        <resultMap id="PojoresultMap" type="entity.User">
<!-- id表示查询结果集中唯一标识
      column:查询出来的列名
      property:type指定的pojo类型中的属性名
      最终resultMap对column和property作为一个映射关系(对应关系)
-->
            <id column="i" property="id"></id>
            <!-- result:对普通名映射定义-->
            <result column="us" property="username"></result>
            <result column="ad" property="address"></result>
        </resultMap>

    <!--输出映射 pojo resultMap-->
    <select id="findUserByResultMap" parameterType="int" resultMap="PojoresultMap">
            SELECT id i,username us, address ad FROM user WHERE id = #{userCustom.id}
        </select>

UserDaoMapper.java

    //输出映射 pojo resultMap
    public User findUserByResultMap(int id) throws Exception;

UserDaoMapperTest.java

 @Test
    public void findUserByResultMap() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDaoMapper userDaoMapper = sqlSession.getMapper(UserDaoMapper.class);
        User user = userDaoMapper.findUserByResultMap(10);
        System.out.println(user);
    }
运行结果

总结
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

相关文章

  • 传递pojo的包装对象

    一、输入映射-包装类型 通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、po...

  • Mybatis(二)

    parameterType(输入类型) 传递简单类型 使用#{}占位符,或者${}进行sql拼接 传递pojo对象...

  • parameterType与resultType

    parameterType有三种: 1:基本类型 2:pojo类型 3:pojo包装类型 ...

  • java中基本数据类型和包装类型的区别

    1、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址;基本类型不是 2、包装类型是引用的传递;基本类...

  • mybatis02

    1. 输入参数之POJO包装类 1.1 内部嵌套有User的pojo 1.2 UserMapper的接口提供被动态...

  • PO VO POJO DTO分析

    POJO Plain Ordinary Java Object 简单无规则java对象首先POJO即为简单的普通...

  • DataBinding(下)

    Data Objects 任何的POJO对象都能用于数据绑定,但是当修改POJO对象并不会对UI进行更新。而Dat...

  • Springcloud feign文件上传

    四、GET请求传递POJO 1、问题 Feign 默认不支持GET方法直接绑定POJO的(只支持基本类型),建议使...

  • SpringCloud feign 常用功能

    四、GET请求传递POJO 1、问题 Feign 默认不支持GET方法直接绑定POJO的(只支持基本类型),建议使...

  • Android Kotlin 将函数作为参数传递

    Kotlin支持函数作为参数传递,无需构建对象来包装函数。 1、调用一个无返回的函数作为参数传递为:方法名()->...

网友评论

      本文标题:传递pojo的包装对象

      本文链接:https://www.haomeiwen.com/subject/hnpfuqtx.html