zoukankan      html  css  js  c++  java
  • Mybatis查询select操作

    先看select标签的属性:

    说几点:

    resultType和resultMap都是用来表示结果集的类型的,resultType用于简单的HashMap或者是简单的pojo对象,而resultSet是用于比较复杂的对象映射。

    现在来研究一下这个传入参数:

    这里讲传入参数的两种形式,一种是hashmap,一种是对象

    看这个sql语句:

    <select id="loginSelect" resultType="JikeUser"  parameterType=""hashmap>
        select * from JikeUser where userName=#{userName} and password=#{password}
    </select>

    这个sql语句的id是loginSelect,返回类型是对象JikeUser,传入参数的类型是hashmap,但是可以看到,这里明明要两个参数啊,一个userName,一个password

    然后我们来测试:(这里也会看到,这个resultType的值没有用完整的路径名,这是采用了简写机制,就是为类起了个别名,这个操作在基本配置文件用typeAliases来标识)

    HashMap<String,String> hm = new HashMap();
    hm.put("userName","JIkeBen");
    hm.put("password","1111");
    JikeUser oneTemp = session.selectOne("loginSelect",hm);

    这里两个元素,一个键是userName,一个键是password,同时也是我们参数的名称,就是sql#{userName},而hashmap里的值就是我们要传入sql语句的相关信息。

    也就是说,传入一个hashmap后sql会自己找到相应的键,传入相应的值。

    parameterType还可以设置为对象,当传入一个对象的时候,mybatis会自动完成对象的属性到sql语句参数的自动匹配,只有在一致的情况下,它才可以自动的匹配。 然后返回的对象也可以设置为对象,这里也需要一个匹配的过程,也就是从数据库表的  列名   到   对象属性的匹配。  如果列名和对象的属性不一致的话,有两种方法,一种是采用resultMap的形式,很灵活;另一种是为sql语句中的列名起一个别名,这个别名和对象属性一致就行了。

    刚刚我们都只是获得一个结果,那么如果是多个结果,获得多个对象呢?

    如果返回多行记录的话,Mybatis会自动把它封装成一个list

    <select id="selectJiKeUserList" resultType="JiKeUser">
        select * from JiKeUser
    </select>
    List<JiKeUser> ap  = session.selectList("selectJiKeUserList");

    下面讲一下resultMap,这也是一个返回操作的设定,但这个和resultType只能有一个成立。

    resultMap可以解决一些比较复杂的映射关系,比如对象当中含有另一个对象的引用,首先要使用的话要设定一个resultMap标签

    <resultMap id="JiKeUserMap" type="JiKeUser">
    
        //指定对象的属性,到列名之间的关系关系,下面几个也都是
        <id property="id" colum="id"/>
       <result property="userName" colum="userName"/>
        <result property="password" colum-"password"/>
    </resultMap>

    这里我么的类名和属性名是一致的,如果不一致,也可以在map当中设定这样的一个匹配关系。

    然后再使用的时候,要在sql语句中说明resultMap是哪一个

    <select id="selectUsers" resultMap="JiKeUserMap">
        select id,userName,password from JiKeUser
    </select>
  • 相关阅读:
    Alpha版与Beta版
    URL的概念
    正则表达式(即:匹配模式Pattern)
    前置与后置的递增/递减操作符
    【平板电脑模拟器】PC端-Chrome自带的功能
    【HOSTS相关】前端提供测试模板地址
    【netlimiter】的使用
    <转>window.event对象在ie与ff中的区别
    <转>全面理解javascript的caller,callee,call,apply概念(修改版)
    document.styleSheets以及js中实现样式表的切换、样式的增加减少
  • 原文地址:https://www.cnblogs.com/wangshen31/p/7746960.html
Copyright © 2011-2022 走看看