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>
  • 相关阅读:
    SpringBoot2.1.6 整合CXF 实现Webservice
    一次线上CPU高的问题排查实践
    SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】
    Web服务器☞Apache VS Nginx
    PHP 遍历一个文件夹下所有文件和子文件夹的方法
    PHP 使用 header 方式实现文件下载功能
    PHP gd 库添加 freetype
    MySQL varchar 最大长度,text 类型占用空间剖析
    S.O.L.I.D: PHP 面向对象设计的五个基准原则
    PHP不重新编译,单独添加模块扩展的方法
  • 原文地址:https://www.cnblogs.com/wangshen31/p/7746960.html
Copyright © 2011-2022 走看看