A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我是楠楠 于 2017-12-11 09:39 编辑

【郑州校区】MyBatis 入门开发 —-输入,输出参数


第一: parameterType传入参数传递简单数据类型
[AppleScript] 纯文本查看 复制代码
<select id="findUserById" parameterType="int" resultType="cn.fy.domain.User">
    SELECT id,username,birthday,sex,address  FROM USER WHERE id = #{id}
    </select>


传递pojo对象
[AppleScript] 纯文本查看 复制代码
<!—传递pojo对象综合查询用户信息 -->
    user 使用了别名.
    <select id="findUserByUser" parameterType="user" resultType="user">
       select * from user where id=#{id} and username like '%${username}%'
    </select>

    #{id} : 使用 user中的id
    ${username}:使用user中的username.
    // 如果参数类型user 中有属性 order 类
    <select id="findUserByUser" parameterType="user" resultType="user">
       select * from user where id=#{order.id} and username like '%${username}%'
    </select>


mybatis可以通过ognl 表达式: #{属性.属性.属性}
传递hashmap
[AppleScript] 纯文本查看 复制代码
<!-- 传递hashmap综合查询用户信息 -->
    <select id="findUserByHashmap" parameterType="hashmap" resultType="user">
        select * from user where id=#{id} and username like '%${username}%'
    </select>

     @Test
    public void findUserByHashmap() {
        SqlSession session = MyBatisUtil.getSession();

        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);
        //关闭session
        session.close();
    }

    select * from user where id=? and username like '%管理员%'



第二: resultType(输出类型)输出简单类型
[AppleScript] 纯文本查看 复制代码
<!-- 获取用户列表总数 -->
    <select id="findUserCount" parameterType="user" resultType="int">
       select count(1) from user
    </select>

    Public void testFindUserCount() throws Exception{
        //获取session
        SqlSession session = sqlSessionFactory.openSession();
        //获取mapper接口实例
        UserMapper userMapper = session.getMapper(UserMapper.class);

        User user = new User();
        user.setUsername("管理员");

        //传递Hashmap对象查询用户列表
        int count = userMapper.findUserCount(user);

        //关闭session
        session.close();
    }



输出简单类型
[AppleScript] 纯文本查看 复制代码
<!-- 根据id查询用户信息 -->
    <select id="findUserById" parameterType="int" resultType="user">
        select * from user where id = #{id}
    </select>

    Public void testFindUserById() throws Exception {
        //获取session
        SqlSession session = sqlSessionFactory.openSession();
        //获限mapper接口实例
        UserMapper userMapper = session.getMapper(UserMapper.class);
        //通过mapper接口调用statement
        User user = userMapper.findUserById(1);
        System.out.println(user);
        //关闭session
        session.close();
    }



输出pojo列表
[AppleScript] 纯文本查看 复制代码
<!-- 根据名称模糊查询用户信息 -->
    <select id="findUserByUsername" parameterType="string" resultType="user">
       select * from user where username like '%${value}%'
    </select>

     @Test
    public void dimFind() {
        SqlSession session = MyBatisUtil.getSession();

        List<User> list = session.selectList("test1.findUserByUsername", "常山");
        System.out.println(list);

    }



输出hashmap
[AppleScript] 纯文本查看 复制代码
<!-- 返回hashmap
    输出pojo对象可以改用hashmap输出类型,将输出的字段名称作为map的key,value为字段值。
    -->
    <select id="findUserNameAndSex" resultType="hashmap">
        select username,sex from user
    </select>

     @Test
    public void findUserNameAndSex() {
        SqlSession session = MyBatisUtil.getSession();

        UserMapper userMapper = session.getMapper(UserMapper.class);
        //构造查询条件Hashmap对象

        // 传递Hashmap对象查询用户列表 
        // 注意不能返回HashMap,还是要返回list
        List list = userMapper.findUserNameAndSex();

        System.out.println("--list-" + list);
        //关闭session
        session.close();
    }

    --list-[{sex=2, username=王五}, {sex=1, username=张三}, {sex=1, username=张小明}]



resultMap
resultMap 替代 resultType.
[AppleScript] 纯文本查看 复制代码
resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
[AppleScript] 纯文本查看 复制代码
<!--resultMap 使用-->

    <select id="findUserResultMap" parameterType="int" resultMap="userResultMap">
        SELECT id,username,birthday,sex,address  FROM USER WHERE id = #{id}
    </select>

    <!-- 定义resultMap的映射
    <id />:此属性表示查询结果集的唯一标识,非常重要。如果是多个字段为复合唯一约束则定义多个<id />

    Column:表示sql查询出来的字段名。
    Property:表示person类的属性。
    Column和property放在一块儿表示将sql查询出来的字段映射到指定的pojo类属性上

    <result />:普通结果,即pojo的属性。
    -->
    <resultMap id="userResultMap" type="user">
        <id column="id" property="id"/>
        <result column="username" property="username"/>
    </resultMap>

    --------------------------------
     @Test
    public void findUserResultMap() throws Exception {
        SqlSession session = MyBatisUtil.getSession();

        UserMapper userMapper = session.getMapper(UserMapper.class);
        //构造查询条件Hashmap对象


        List list = userMapper.findUserResultMap(10);
    //--list-[User{id=10, username='张三', sex='1', birthday=Thu Jul 10 00:00:00 CST 2014, address='北京市'}]

        System.out.println("--list-" + list);
        //关闭session
        session.close();
    }


传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出


1 个回复

倒序浏览
总结的很不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马