- select 标签属性。
- select 标签的简单使用。
- resultType 返回值类型。
- 多参数传递。
开发中对数据库的操作,基本上都是查询操作远多于其他几种操作。因此 select 标签的使用也是最多的。
下面列出了 select 标签支持的属性:
1 <select 2 id="" 3 parameterType="" 4 parameterMap="" 5 resultType="" 6 resultMap="" 7 flushCache="" 8 useCache="" 9 timeout="" 10 fetchSize="" 11 statementType="" 12 resultSetType=""> 13 </select>
- id 命名空间的唯一标识符,一般是 dao 中对应的方法名。
- parameterType 参数类型,可选属性。MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数,默认值为 unset。
- resultType 期望返回的数据类型的类的全限定名。
- resultMap 结果集映射,不可以和 resultType 同时使用。一般如果返回数据类型是常用的类型,比如 String Map List 的时候,可以使用 resultType。如果返回的是简单 POJO 类的时候,也可以直接使用 resultType,如果是复杂的映射或者连级查询的时候就需要使用 resultMap。
- flushCache 将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false。
- useCache 将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:对 select 元素为 true。
简单查询
下面是一个简单的查询,查询 user_info 表里的所有数据,并返回 UserInfo 类型的 List 集合。
1 //POJO 类定义 2 public class UserInfo { 3 Integer user_id; 4 String userName; 5 String password; 6 Integer age; 7 String address; 8 9 //构造器和 get/set 方法此次省略。 10 } 11 12 //mapper xml 配置 13 <select id="queryUserAll" resultType="util.UserInfo"> 14 SELECT * FROM USER_INFO 15 </select> 16 17 //dao 接口方法定义 18 public interface IResmDao { 19 List<UserInfo> queryUserAll(); 20 } 21 22 //test 23 IResmDao iResmDao = session.getMapper(IResmDao.class); 24 List<UserInfo> userInfos = iResmDao.queryUserAll();
resultType 返回值类型
当我们使用 select 标签查询的时候,根据业务的不同,会对返回的数据类型有不同的要求。
比如返回值可能是基本数据类型,String,Integer,POJO,List,Map 等。又应该怎样使用呢?
返回基本数据类型
以基本数据类型 int 为例。
dao 层接口定义:
1 int queryUserAgeById(int userId);
mapper.xml 配置文件:
1 <select id="queryUserAgeById" resultType="int"> 2 select age from user_info where user_id = #{userId} 3 </select>
返回 List 集合
dao 层接口定义:
1 List<UserInfo> queryUserListByIds(List<Integer> ids);
mapper.xml 配置文件:
1 <select id="queryUserListByIds" resultType="util.UserInfo"> 2 <if test="list != null and list.size > 0"> 3 select * from user_info where user_id in 4 <foreach collection="list" index="index" item="item" open="(" close=")" separator=","> 5 #{item} 6 </foreach> 7 </if> 8 </select>
返回 Map 集合
dao 层接口定义:
注解 @MapKey("user_id") 用于指定 Map 的 key,也是 POJO 定义的字段。例子里的 value 是封装的 POJO 类。
1 @MapKey("user_id") 2 Map<Integer,UserInfo> queryUserMapByIds(List<Integer> ids);
mapper.xml 配置文件:
<select id="queryUserMapByIds" resultType="util.UserInfo"> select * from user_info where user_id in <foreach collection="list" index="index" item="item" open="(" close=")" separator=","> #{item} </foreach> </select>
返回实体字段与数据库字段不一致的 Map 集合
dao 层接口定义:
注解 @MapKey("user_id") 用于指定 Map 的 key,是 POJO 字段属性。例子里的 value 是封装的 POJO 类。
1 @MapKey("user_id") 2 Map<Integer,UserInfo> queryAllMap();
mapper.xml
1 <resultMap id="userInfoEntry" type="util.UserInfo"> 2 <result column="id" property="user_id"/> 3 <result column="username" property="userName"/> 4 <result column="password" property="password"/> 5 <result column="age" property="age"/> 6 <result column="address" property="address"/> 7 </resultMap> 8 9 <select id="queryAllMap" resultMap="userInfoEntry"> 10 select * from USER_INFO 11 </select>
返回 POJO 类:
dao 层接口定义:
1 UserInfo queryPOJOById(int userId);
mapper.xml 配置文件:
1 <select id="queryPOJOById" resultType="util.UserInfo"> 2 select * from user_info where user_id = #{userId} 3 </select>
多个参数传递的情况
使用注解
dao 层接口定义:
1 List<UserInfo> queryUserByMultPara(@Param("age") Integer age, @Param("userName") String userName, @Param("address") String address);
mapper.xml 配置文件:
1 <select id="queryUserByMultPara" resultType="util.UserInfo"> 2 select * from user_info 3 where age = #{age} and username = #{userName} and address = #{address} 4 </select>
使用 Map 传参
使用 Map 传参,value 值就是参数值。
dao 层接口定义:
1 List<UserInfo> queryUserByMultMap(Map<String,Object> param);
mapper.xml 配置文件:
#{age} 中的 age 即 Map 中的 key,#{age} 可以直接获取 Map 的 value。
1 <select id="queryUserByMultMap" resultType="util.UserInfo"> 2 select * from user_info 3 where age = #{age} and username = #{userName} and address = #{address} 4 </select>
使用 POJO 来传参
dao 层接口定义:
1 List<UserInfo> queryUserByMultPOJO(UserInfo userInfo);
mapper.xml 配置文件:
#{age} 其实就是 UserInfo 的属性。
1 <select id="queryUserByMultPOJO" resultType="util.UserInfo"> 2 select * from user_info 3 where age = #{age} and username = #{userName} and address = #{address} 4 </select>
参考:
https://blog.csdn.net/moakun/article/details/80057181
https://www.w3cschool.cn/mybatis/f4uw1ilx.html
https://blog.csdn.net/codejas/article/details/79520246