Myabtis入门(二)之映射

映射分为输出映射和出入映射

  • 输入映射(参数映射)

    • 简单类型:String和8种基本类型
    • pojo类型:我们自己封装pojo类型
    • 包装的pojo类型:pojo中有pojo的类型
    • map类型:HashMap类型

简单类型和pojo类型在前文中已经使用很多次了,下面着重来讲一下包装的pojo类型和map类型的参数映射。

  • 包装的pojo类型:单独写一个QueryVo类来包裹上文的User类;
    package cn.zw.pojo;
    
    import java.util.Date;
    
    public class User {
      private int id;
      private String username;// 用户姓名
      private String sex;// 性别
      private Date birthday;// 生日
      private String address;// 地址
      public User() {
          super();
          // TODO Auto-generated constructor stub
      }
      public User(int id, String username, String sex, Date birthday, String address) {
          super();
          this.id = id;
          this.username = username;
          this.sex = sex;
          this.birthday = birthday;
          this.address = 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 String getSex() {
          return sex;
      }
      public void setSex(String sex) {
          this.sex = sex;
      }
      public Date getBirthday() {
          return birthday;
      }
      public void setBirthday(Date birthday) {
          this.birthday = birthday;
      }
      public String getAddress() {
          return address;
      }
      public void setAddress(String address) {
          this.address = address;
      }
      @Override
      public String toString() {
          return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
                  + address + "]";
      }   
    }
    
    
    package cn.zw.pojo;
    
    public class QueryVo {
      private User user;
    
      public User getUser() {
          return user;
      }
    
      public void setUser(User user) {
          this.user = user;
      }
    }
    
    
    <select id="selectByQueryVo" parameterType="cn.zw.pojo.QueryVo" resultType="cn.zw.pojo.User">
          select *
          from user where id = #{user.id}
      </select>
    

    输入参数的映射的格式要求为包装类的属性名.属性

  • Map的类型(与pojo类型相同)

    把参数封装成map传给sql语句,占位表达式里面的值就是map中的key

    在mapper的接口中添加一个方法

    List<User> selectByMap(Map<String, String> map);
    
    <select id="selectByMap" parameterType="java.util.Map" resultType="cn.zw.pojo.User">
          SELECT
          *
          FROM
          `user`
          WHERE
          username LIKE #{username}
          AND address = #{address};
    </select>
    
    @Test
      public void fun02() throws IOException {
          SqlSession session = sqlSessionFactory.openSession();
          UserMapper mapper = session.getMapper(UserMapper.class);
          Map<String,String> map = new HashMap<>();
          map.put("username","%蟑螂%");
          map.put("address","大阪");
          List<User> users =  mapper.selectByMap(map);
          System.out.println(users);
      }
    
  • 输出映射(返回值映射)

    • 简单数据类型:string和八种基本类型
    • pojo类型:返回一行记录(前文使用过)
    • list:返回多行记录(前文使用过)
    • map:返回一行记录
    • list<map>:返回多行记录
  • 简单数据类型的演示
    • mapper接口中添加方法;
    int getCount();
    
    • 映射xml文件中添加查询语句
    <select id="getCount" resultType="int">
      select count(*) from user
    </select>
    
    • 执行映射语句获得结果
    @Test
    public void fun03() throws IOException {
      SqlSession session = sqlSessionFactory.openSession();
      UserMapper mapper = session.getMapper(UserMapper.class);
      System.out.println(mapper.getCount());
    }
    
  • map类型的输出映射:当返回结果没有对应的pojo类时
    • 模拟情况我们没有User类
    Map getUserByIdMap(int id);
    
    • 映射xml文件同添加查询语句
    <select id="getUserByIdMap" parameterType="int" resultType="map">
      select *
      from user where id = #{id}
    </select>
    
    • 执行映射语句获得结果
    @Test
    public void fun04() throws IOException {
      SqlSession session = sqlSessionFactory.openSession();
      Map map = session.getMapper(UserMapper.class).getUserByIdMap(4);
      System.out.println(map);
    }
    
  • list<map>相当于list<User>

    List<Map> getUserByIdList(int id);
    
    <select id="getUserByIdList" parameterType="int" resultType="map">
      select *
      from user where id > #{id}
    </select>
    
    @Test
    public void fun05() throws IOException {
      SqlSession session = sqlSessionFactory.openSession();
      List<Map> maps = session.getMapper(UserMapper.class).getUserByIdList(1);
      System.out.println(maps);
    }
    
    

现在有一个问题,那么有一天我们的参数映射或者输出映射中的属性名称与我们的参数映射中的参数名称和输出映射中的参数名称不相同怎么办呢?

问题描述

我们就要用到parameterMap和resultMap

假设把User类中的username属性改成name,那么结果就数据库中的结果中的username就不能映射到name属性上了。


Snipaste_2018-12-04_22-09-30.png
Snipaste_2018-12-04_22-15-17.png

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

推荐阅读更多精彩内容