Mybatis查询select操作
Posted 汪神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
以上是关于Mybatis查询select操作的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis-Plus:条件构造器(allEq基本比较操作模糊查询排序逻辑查询select)
6.mybatis里面的动态sql是怎么设定的,常用标签有那些以及其
mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select 或者 select (*))