传递pojo的包装对象

一、输入映射-包装类型

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,520评论 0 4
  • 输出映射接下来说说有关Mapper.xml配置文件中查询标签中关于返回值类型resultType与resultMa...
    默默无痕阅读 13,834评论 1 10
  • 1.1mybatis下载 mybaits 的代码由github.com 管理,地址:https://github....
    暖熊熊阅读 859评论 0 5
  • 使用原生jdbc的问题 数据库连接, 使用时就创建,不使用就立即释放,对数据库进行频繁地链接开启和关闭,造成数据库...
    wtmxx阅读 722评论 1 3
  • 明与暗 黑与白 交错中拥有羁绊 一场涂满鲜血和罪恶的爱情 从来不敢以真面目示人 在黑暗的通风管中徘徊 凄美而又无法...
    薄荷糖Cora阅读 360评论 0 0