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>
原文地址:https://www.cnblogs.com/wangshen31/p/7746960.html