zoukankan      html  css  js  c++  java
  • mybatis学习笔记(7)-输出映射

    mybatis学习笔记(7)-输出映射

    标签: mybatis



    本文主要解说mybatis的输出映射。

    输出映射有两种方式

    • resultType
    • resultMap

    resultType

    • 使用resultType进行输出映射,仅仅有查询出来的列名和pojo中的属性名一致。该列才干够映射成功。
    • 假设查询出来的列名和pojo中的属性名所有不一致。没有创建pojo对象。

    • 仅仅要查询出来的列名和pojo中的属性有一个一致。就会创建pojo对象。

    输出简单类型

    • mapper.xml
     <!-- 用户信息综合查询总数
            parameterType:指定输入类型和findUserList一样
            resultType:输出结果类型
        -->
        <select id="findUserCount" parameterType="com.iot.mybatis.po.UserQueryVo" resultType="int">
            SELECT count(*) FROM user WHERE user.sex=#{userCustom.sex} AND user.username LIKE '%${userCustom.username}%'
        </select>
    • mapper.java
        //用户信息综合查询总数
        @Test
        public void testFindUserCount() throws Exception {
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            //创建UserMapper对象,mybatis自己主动生成mapper代理对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    
            //创建包装对象,设置查询条件
            UserQueryVo userQueryVo = new UserQueryVo();
            UserCustom userCustom = new UserCustom();
            //因为这里使用动态sql。假设不设置某个值,条件不会拼接在sql中
            userCustom.setSex("1");
            userCustom.setUsername("小");
            userQueryVo.setUserCustom(userCustom);
            //调用userMapper的方法
    
            int count = userMapper.findUserCount(userQueryVo);
    
            System.out.println(count);
    
    
        }
    • 小结

    查询出来的结果集仅仅有一行且一列。能够使用简单类型进行输出映射。

    输出pojo对象和pojo列表

    无论是输出的pojo单个对象还是一个列表(list中包含pojo),在mapper.xml中resultType指定的类型是一样的。

    在mapper.java指定的方法返回值类型不一样:

    • 输出单个pojo对象。方法返回值是单个对象类型
    //依据id查询用户信息
    public User findUserById(int id) throws Exception;
    • 输出pojo对象list。方法返回值是List
    //依据用户名列查询用户列表
    public List<User> findUserByName(String name) throws Exception;

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

    resultMap

    mybatis中使用resultMap完毕高级输出结果映射。(一对多,多对多)

    resultMap用法

    假设查询出来的列名和pojo的属性名不一致。通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

    1.定义resultMap

    2.使用resultMap作为statement的输出映射类型

    • 定义reusltMap
    <!-- 定义resultMap
        将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系
    
        type:resultMap终于映射的java对象类型,能够使用别名
        id:对resultMap的唯一标识
         -->
         <resultMap type="user" id="userResultMap">
            <!-- id表示查询结果集中唯一标识 
            column:查询出来的列名
            property:type指定的pojo类型中的属性名
            终于resultMap对column和property作一个映射关系 (相应关系)
            -->
            <id column="id_" property="id"/>
            <!-- 
            result:对普通名映射定义
            column:查询出来的列名
            property:type指定的pojo类型中的属性名
            终于resultMap对column和property作一个映射关系 (相应关系)
             -->
            <result column="username_" property="username"/>
    
         </resultMap>
    • 使用resultMap作为statement的输出映射类型
    <!-- 使用resultMap进行输出映射
            resultMap:指定定义的resultMap的id,假设这个resultMap在其他的mapper文件,前边须要加namespace
            -->
        <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
            SELECT id id_,username username_ FROM USER WHERE id=#{value}
        </select>
    
    • mapper.java
    //依据id查询用户信息。使用resultMap输出
    public User findUserByIdResultMap(int id) throws Exception;
    • 測试代码
    @Test
    public void testFindUserByIdResultMap() throws Exception {
    
        SqlSession sqlSession = sqlSessionFactory.openSession();
    
        //创建UserMapper对象,mybatis自己主动生成mapper代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    
        //调用userMapper的方法
    
        User user = userMapper.findUserByIdResultMap(1);
    
        System.out.println(user);
    
    
    }

    小结

    使用resultType进行输出映射,仅仅有查询出来的列名和pojo中的属性名一致。该列才干够映射成功。

    假设查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。


    作者@brianway很多其他文章:个人站点 | CSDN | oschina

  • 相关阅读:
    [译] 第二十天:Stanford CoreNLP
    [译] 第十九天: Ember
    [译] 第十八天:BoilerPipe
    [译] 第十七天:JBoss Forge
    [译] 第十六天: Goose Extractor
    [译] 第十五天:Meteor
    [译] 第十四天:Standford NER
    [译] 第十三天:Dropwizard
    [译] 第十二天: OpenCV
    hadoop-MR
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7066591.html
Copyright © 2011-2022 走看看