zoukankan      html  css  js  c++  java
  • Mybatis输入输出映射

    一、输入映射

      1、传递简单类型

    <select id="findUserById" parameterType="int" resultType="com.test.pojo.User">
            select * from user where id = #{id}
    </select>

      2、传递pojo对象

      Mybatis使用OGNL表达式解析对象字段的值。

    <select id="findUserByUser" parameterType="com.test.pojo.User" resultType="com.test.pojo.User">
           select * from user where id=#{id} and username like '%${username}%'
    </select>

      测试:

    @Test
        public void testFindUserByUser()
        {
            SqlSession sqlSession=sqlSessionFactory.openSession();    
            UserMapper userMapper=sqlSession.getMapper(UserMapper.class);    
            User user=new User();
            user.setId(1);
            user.setUsername("徐剑");
            
            List<User> user2=userMapper.findUserByUser(user);
            System.out.println(user2);        
            sqlSession.close();    
        }

      3、传递包装对象

      定义包装对象将查询条件(pojo)以类组合的方式包装起来。

    public class QueryVo
    {
        User user;
        
        //其他条件。。。
        
        public User getUser()
        {
            return user;
        }
        public void setUser(User user)
        {
            this.user = user;
        }
    }

      mapper.xml配置文件:

    <select id="findUserList" parameterType="com.test.pojo.QueryVo" resultType="com.test.pojo.User">
           select * from user where id=#{user.id} and username=#{user.username}
    </select>

      测试代码:

    @Test
        public void testFindUserList()
        {
            SqlSession sqlSession=sqlSessionFactory.openSession();    
            UserMapper userMapper=sqlSession.getMapper(UserMapper.class);    
            
            QueryVo queryVo=new QueryVo();
            User user=new User();
            user.setId(2);
            user.setUsername("谢伟");
            queryVo.setUser(user);
            List<User> user2=userMapper.findUserList(queryVo);
            System.out.println(user2);        
            sqlSession.close();    
        }

      4、传递HashMap

      sql映射文件:

      

      测试:

      @Test
        public void testFindUserByHashmap()
        {
            SqlSession session = sqlSessionFactory.openSession();
            //获限mapper接口实例
            UserMapper userMapper = session.getMapper(UserMapper.class);
            //构造查询条件Hashmap对象
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("id", 1);
            map.put("username", "徐剑");
            //传递Hashmap对象查询用户列表
            List<User> list = userMapper.findUserByHashmap(map);
            System.out.println(list);    
            //关闭session
            session.close();
        }

     二、输出映射

      1、输出简单类型

      输出简单类型必须查询出来的结果集有一条记录,最终讲第一个字段的值转换为输出类型。

      2、输出pojo对象

      参考输入pojo对象, 使用session调用selectOne查询单条记录。

      3、输出pojo列表

      使用session的selectList方法获取pojo列表。

      :输出pojo对象和输出pojo列表在sql中定义的resultType是一样的。

      返回单个pojo对象要保证sql查询出来的结果集为单条,内部使用session.selectOne方法调用,mapper接口使用pojo对象作为方法返回值。

       返回pojo列表表示查询出来的结果集可能为多条,内部使用session.selectList方法,mapper接口使用List<pojo>对象作为方法返回值。

      

      resultMap:可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。

          如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。

      resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

      定义resultMap:

      

      测试代码:

      @Test
        public void testFindUserListResultMap() throws Exception
        {
            SqlSession session = sqlSessionFactory.openSession();
            //获限mapper接口实例
            UserMapper userMapper = session.getMapper(UserMapper.class);
            List<User> list = userMapper.findUserListResultMap(1);
            System.out.println(list);    
            //关闭session
            session.close();
        }

      

  • 相关阅读:
    indexDB
    跨域 iframe和父页面的通信
    目标
    向往,热情,态度
    dns-prefetch/prefetch/preload/defer/async
    exports 和module.exports转
    【vue】--利用vue-cli--搭建项目------1912--(另一个种)
    【原生】 微任务和宏任务
    【vue】--路由解耦 传值的方式
    【vue】 vue中的query 路由传值的方式
  • 原文地址:https://www.cnblogs.com/xujian2014/p/5459641.html
Copyright © 2011-2022 走看看