六、MyBatis 的各种查询功能
- 若查询出的数据
只有一条
,可以通过 实体类对象 / list 集合 / map 集合 来接收 - 若查询处的数据
有多条
,一定不能通过实体类对象来接收,此时会抛出 TooManyResultsException
为方便查看查询结果引入 json 依赖
xml
<!--json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
建立工具类
java
package com.atguigu.mybatis.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class JsonUtil {
/**
* 美化输出
*/
public static void prettyPrint(Object obj) {
ObjectMapper objectMapper = new ObjectMapper();
try {
String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
System.out.println(json);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
1、查询一个实体类对象
java
public interface SelectMapper {
/**
* 根据id查询用户信息
*/
User getUserById(@Param("id") Integer id);
}
xml
<select id="getUserById" resultType="User">
select * from t_user where id = #{id}
</select>
java
public class SelectMapperTest {
@Test
public void getUserById() {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
User user = mapper.getUserById(2);
JsonUtil.prettyPrint(user);
}
}
json
{
"id": 2,
"username": "admin",
"password": "123456",
"age": 23,
"gender": "男",
"email": "123456@qq.com"
}
2、查询一个 list 集合
java
public interface SelectMapper {
/**
* 查询所有用户信息
*/
List<User> getAllUser();
}
xml
<!--List<User> getAllUser();-->
<select id="getAllUser" resultType="User">
select * from t_user
</select>
java
public class SelectMapperTest {
@Test
public void getAllUser() {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<User> allUser = mapper.getAllUser();
JsonUtil.prettyPrint(allUser);
}
}
json
[
{
"id": 2,
"username": "admin",
"password": "123456",
"age": 23,
"gender": "男",
"email": "123456@qq.com"
},
{
"id": 3,
"username": "admin",
"password": "123456",
"age": 23,
"gender": "男",
"email": "123456@qq.com"
}
]
3、查询单个数据
java
public interface SelectMapper {
/**
* 查询用户信息的总记录数
*/
Integer getCount();
}
xml
<!--Integer getCount()-->
<!-- integer写大小写都可以,写 Integer/integer/_int/_integer 都可以,都是java.lang.Integer的别名 -->
<select id="getCount" resultType="integer">
select count(*) from t_user
</select>
java
public class SelectMapperTest {
@Test
public void getCount() {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Integer count = mapper.getCount();
System.out.println(count);
}
}
常用类型别名
映射的类型 | 别名 |
---|---|
Integer | int、integer |
int | _int、_integer |
Map | map |
String | string |
类型别名
别名 | 映射的类型 |
---|---|
_byte | byte |
_char (since 3.5.10) | char |
_character (since 3.5.10) | char |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
char (since 3.5.10) | Character |
character (since 3.5.10) | Character |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
biginteger | BigInteger |
object | Object |
date[] | Date[] |
decimal[] | BigDecimal[] |
bigdecimal[] | BigDecimal[] |
biginteger[] | BigInteger[] |
object[] | Object[] |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
4、查询一条数据为 map 集合
java
public interface SelectMapper {
/**
* 根据用户id查询用户信息为map集合
* @param id
* @return
*/
Map<String, Object> getUserByIdToMap(@Param("id") Integer id);
}
xml
<!-- Map<String, Object> getUserByIdToMap(@Param("id") Integer id)-->
<select id="getUserByIdToMap" resultType="map">
select * from t_user where id = #{id}
</select>
java
public class SelectMapperTest {
@Test
public void getUserByIdToMap() {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> user = mapper.getUserByIdToMap(2);
JsonUtil.prettyPrint(user);
}
}
json
{
"password": "123456",
"gender": "男",
"id": 2,
"age": 23,
"email": "123456@qq.com",
"username": "admin"
}
5、查询多条数据为 map 集合
java
public interface SelectMapper {
/**
* 查询所有用户信息为map集合
* @return
*/
List<Map<String, Object>> getAllUserToMap();
}
xml
<!-- List<Map<String, Object>> getAllUserToMap() -->
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
java
public class SelectMapperTest {
@Test
public void getAllUserToMap() {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<Map<String, Object>> allUserToMap = mapper.getAllUserToMap();
// allUserToMap.forEach(System.out::println);
JsonUtil.prettyPrint(allUserToMap);
}
}
json
[
{
"password": "123456",
"gender": "男",
"id": 2,
"age": 23,
"email": "123456@qq.com",
"username": "admin"
},
{
"password": "123456",
"gender": "男",
"id": 3,
"age": 23,
"email": "123456@qq.com",
"username": "admin"
}
]
6、查询多条数据为 MapKey
通过@MapKey 注解设置 map 集合的键,值是每条数据所对应的 map 集合
java
public interface SelectMapper {
/**
* 查询所有用户信息为MapKey集合
* @return
*/
@MapKey("id")
Map<String, Object> getAllUserToMapKey();
}
xml
<!-- Map<String, Object> getAllUserToMapKey()-->
<select id="getAllUserToMapKey" resultType="map">
select * from t_user
</select>
java
public class SelectMapperTest {
@Test
public void getAllUserToMapKey() throws JsonProcessingException {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> allUserToMapKey = mapper.getAllUserToMapKey();
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(allUserToMapKey);
System.out.println(json);
}
}
转为 json 后查看
json
{
"2": {
"password": "123456",
"gender": "男",
"id": 2,
"age": 23,
"email": "123456@qq.com",
"username": "admin"
},
"3": {
"password": "123456",
"gender": "男",
"id": 3,
"age": 23,
"email": "123456@qq.com",
"username": "admin"
}
}