MyBatis的各种查询功能
- 如果查询出的数据只有一条,可以通过
- 实体类对象接收
- List集合接收
- Map集合接收
- 如果查询出的数据有多条,一定不能用实体对象接收,会抛TooManyResultsException,可以通过
- 实体类类型的List集合接收
- Map类型的List集合接收
- 在mapper接口的方法上添加@MapKey注解
1.查询一个实体类对象----根据id查询用户信息
①在UserMapper接口里面定义方法
②在UserMapper.xml配置
2.查询一个List集合--所有用户信息
①UserMapper接口
②在UserMapper配置类里面
3.查询单个数据—查询用户数量
- 在MyBatis中,java常用类型都设置了类型别名
- java.lang.Integeràint或integer
- int->_int(基本数据类型就是_类型)
- Map->map
- String->string
①在UserMaper接口写上方法名
②在UserMapper.xml,resultType查询出结果的类型
4.查询一条数据为map集合
①在UserMapper接口里,Map<String,Object>,String代表属性名,Object代表属性值
/**
* 根据id查询出用户信息,返回map
*/
Map<String,Object> getUserById(@Param("id") Integer id);
②在UserMapper.xml配置类
③测试
public class test {
@Test
public void t1() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
Map<String, Object> userById = mapper.getUserById(45);
for (String key:userById.keySet()) {
Object values = userById.get(key);
System.out.println(key+"=="+values);
}
}
}
结果是 属性名==属性值 组合成的map集合
4.查询多条数据为map集合
- 查询所有用户信息为map集合
- 将表中的数据以map集合查询,一条数据对应一个map
- 多条数据,多个map集合,存放在一个list集合中获取
方式一
①在UserMapper接口,List<Map<String,Object>>,把多个map放在list集合中。每一个list集合是map
/**
* 根据id查询出用户信息,返回map
* @return
*/
List<Map<String,Object>> getAllUser();
②在UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.mapper.ParameterMapper">
<select id="getAllUser" resultType="java.util.Map">
select * from t_user
</select>
</mapper>
③测试
public class test {
@Test
public void t1() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
List<Map<String, Object>> allUser = mapper.getAllUser();
for (Map<String, Object> map:allUser
) {
System.out.println("每个map信息如下========");
for (String key:map.keySet()) {
Object value = map.get(key);
System.out.println(key+"=="+value);
}
}
}
}
方式二 通过添加@MapKey(”id”)注解,此时键是id,值是每条数据转换为map集合
①在UserMapper接口里
/**
* 根据id查询出用户信息,返回map
*/
@MapKey("id")
Map<Integer,Object> getAllUser();
②在UserMapper.xml里
<select id="getAllUser" resultType="java.util.Map">
select * from t_user
</select>
③测试
public void t1() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
Map<Integer, Object> allUser = mapper.getAllUser();
for (Integer id : allUser.keySet()) {
Object user = allUser.get(id);
System.out.println(id+"=="+user);
}
}