传递pojo的包装对象

2019-02-27  本文已影响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);
    }
运行结果

二、输出映射

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指定的方法返回值类型不一样

返回单个对象类型 返回List

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

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属性名之间作一个映射关系。

上一篇 下一篇

猜你喜欢

热点阅读