MyBatis-各种查询功能

四、MyBatis的各种查询功能

1、查询一个实体类对象

若查询出的数据只有一条,则可以通过实体类对象或者集合接收。如果使用实体类接收多条数据,就会报异常TooManyResultsException。

1)和第三章一样创建一个模块,名为MyBatis-查询功能(可以直接复制第三章的模块然后导入)。

2)在mapper包下新建mapper接口SelectMapper.java

3)在mapper目录下新建mapper映射文件SelectMapper.xml

4)使用实体类或者list集合接收一条数据

  • 使用实体类接收:

编写SelectMapper.java文件:

//根据id查询用户信息
User getUserById(@Param("id") Integer id);

编写SelectMapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!--mybatis配置文件中的约束-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
​
<!--将该mapper映射文件与UserMapper接口关联-->
<mapper namespace="com.atguigu.mybatis.mapper.SelectMapper">
​
    <!--根据id获取用户信息,关联SelectMapper接口中的getUserById(@Param("id") Integer id)方法-->
    <select id="getUserById" resultType="User">
        select * from t_user where id = #{id}
    </select>
​
</mapper>

在test包下创建TestSelectMapper测试类并编写:

/**
 * MyBatis的各种查询功能:
 *   1.若查询出的数据只有一条
 *     a>可以通过实体类对象接收
 *     b>可以通过list集合接收
 *     c>可以通过map集合接收
 *       结果:{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}
 *   2.若查询处出的数据有多条
 *     a>可以通过list集合来接收
 *     b>可以通过map集合接收
 *     c>可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为value,
 *       以某个字段的的值作为key,放在同一个map集合中
 *     注意:一定不能通过实体类对象接收,否则会抛出异常TooManyResultsException
 *
 * MyBatis中设置了默认的类型别名:
 *   java.lang.Integer --> int, Integer
 *   int --> _int, _integer
 *   Map --> map
 *   String --> string
 */
//测试根据id查询用户信息的功能
@Test
public void testGetUserById(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    System.out.println(mapper.getUserById(3));
}
  • 使用map集合接收:

编写SelectMapper.java文件:

//根据id查询用户信息
//User getUserById(@Param("id") Integer id);
List<User> getUserById(@Param("id") Integer id);

编写SelectMapper.xml文件:

<!--根据id获取用户信息,关联SelectMapper接口中的getUserById(@Param("id") Integer id)方法-->
<select id="getUserById" resultType="User">
    select * from t_user where id = #{id}
</select>

在test包下创建TestSelectMapper测试类并编写:

/**
 * MyBatis的各种查询功能:
 *   1.若查询出的数据只有一条
 *     a>可以通过实体类对象接收
 *     b>可以通过list集合接收
 *     c>可以通过map集合接收
 *       结果:{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}
 *   2.若查询处出的数据有多条
 *     a>可以通过list集合来接收
 *     b>可以通过map集合接收
 *     c>可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为value,
 *       以某个字段的的值作为key,放在同一个map集合中
 *     注意:一定不能通过实体类对象接收,否则会抛出异常TooManyResultsException
 *
 * MyBatis中设置了默认的类型别名:
 *   java.lang.Integer --> int, Integer
 *   int --> _int, _integer
 *   Map --> map
 *   String --> string
 */
//测试根据id查询用户信息的功能
@Test
public void testGetUserById(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    System.out.println(mapper.getUserById(3));
}

2、查询一个list集合

编写SelectMapper.java文件:

//根据id查询用户信息(使用list集合接收)
List<User> getAllUser();

编写SelectMapper.xml文件:

<!--获取所有用户信息,关联SelectMapper接口中的getAllUser()方法-->
<select id="getAllUser" resultType="User">
    select * from t_user
</select>

在test包下创建TestSelectMapper测试类并编写:

//测试获取所有用户信息的功能
@Test
public void testGetAllUser(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    System.out.println(mapper.getAllUser());
}

3、查询单个数据

  • 查询单行单列时:

编写SelectMapper.java文件:

//查询用户信息的总记录数
Integer getCount();

编写SelectMapper.xml文件:

<!--查询用户信息的总记录数,关联SelectMapper接口中的getCount()方法-->
<!--
    因为getCount()方法的返回值为Integer,所以resultType应该为java.lang.Integer
    或者Integer或者int或者Int,而非User
-->
<select id="getCount" resultType="java.lang.Integer">
    select count(*) from t_user
</select>

在test包下创建TestSelectMapper测试类并编写:

/**
 * MyBatis的各种查询功能:
 *   1.若查询出的数据只有一条
 *     a>可以通过实体类对象接收
 *     b>可以通过list集合接收
 *     c>可以通过map集合接收
 *       结果:{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}
 *   2.若查询处出的数据有多条
 *     a>可以通过list集合来接收
 *     b>可以通过map集合接收
 *     c>可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为value,
 *       以某个字段的的值作为key,放在同一个map集合中
 *     注意:一定不能通过实体类对象接收,否则会抛出异常TooManyResultsException
 *
 * MyBatis中设置了默认的类型别名:
 *   java.lang.Integer --> int, Integer
 *   int --> _int, _integer
 *   Map --> map
 *   String --> string
 */
//测试查询用户信息的总记录数的功能
@Test
public void testGetCount(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    System.out.println(mapper.getCount());
}

4、查询一条数据为map集合

编写SelectMapper.java文件:

//根据id查询用户信息为一个map集合
Map<String, Object> getUserByIdToMap(@Param("id") Integer id);

编写SelectMapper.xml文件:

<!--根据id查询用户信息为一个map集合,关联SelectMapper接口中的getUserByIdToMap(@Param("id") Integer id)方法-->
<!--由于查询结果返回给getUserByIdToMap()方法是一个Map集合,所以resultType为map-->
<select id="getUserByIdToMap" resultType="map">
    select * from t_user where id = #{id}
</select>

在test包下创建TestSelectMapper测试类并编写:

/**
 * MyBatis的各种查询功能:
 *   1.若查询出的数据只有一条
 *     a>可以通过实体类对象接收
 *     b>可以通过list集合接收
 *     c>可以通过map集合接收
 *       结果:{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}
 *   2.若查询处出的数据有多条
 *     a>可以通过list集合来接收
 *     b>可以通过map集合接收
 *     c>可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为value,
 *       以某个字段的的值作为key,放在同一个map集合中
 *     注意:一定不能通过实体类对象接收,否则会抛出异常TooManyResultsException
 *
 * MyBatis中设置了默认的类型别名:
 *   java.lang.Integer --> int, Integer
 *   int --> _int, _integer
 *   Map --> map
 *   String --> string
 */
//测试根据id查询用户信息为一个map集合的功能
@Test
public void testUserByIdToMap(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    System.out.println(mapper.getUserByIdToMap(3));
}

5、查询多条数据为map集合

  • 通过map类型的list集合来接收数据:

编写SelectMapper.java文件:

//查询所有用户信息为map集合
//将多条Map集合放到一个list中返回
List<Map<String, Object>> getAllUserToMap();

编写SelectMapper.xml文件:

<!--查询所有用户信息为map集合,关联SelectMapper接口中的getAllUserToMap()方法-->
<select id="getAllUserToMap" resultType="map">
    select * from t_user
</select>

在test包下创建TestSelectMapper测试类并编写:

//测试根据id查询用户信息为一个map集合的功能
@Test
public void testGetAllUserToMap(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    System.out.println(mapper.getAllUserToMap());
}
  • 通过@MapKey注解来设置map集合键,并直接使用map集合来接收数据:

编写SelectMapper.java文件:

//查询所有用户信息为map集合
//将多条Map集合放到一个list中返回
//List<Map<String, Object>> getAllUserToMap();
//@MapKey("id"):设置当前map集合的键为id
@MapKey("id")
Map<String, Object> getAllUserToMap();

编写SelectMapper.xml文件:

<!--查询所有用户信息为map集合,关联SelectMapper接口中的getAllUserToMap()方法-->
<select id="getAllUserToMap" resultType="map">
    select * from t_user
</select>

在test包下创建TestSelectMapper测试类并编写:

/**
 * MyBatis的各种查询功能:
 *   1.若查询出的数据只有一条
 *     a>可以通过实体类对象接收
 *     b>可以通过list集合接收
 *     c>可以通过map集合接收
 *       结果:{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}
 *   2.若查询处出的数据有多条
 *     a>可以通过list集合来接收
 *     b>可以通过map集合接收
 *     c>可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为value,
 *       以某个字段的的值作为key,放在同一个map集合中
 *     注意:一定不能通过实体类对象接收,否则会抛出异常TooManyResultsException
 *
 * MyBatis中设置了默认的类型别名:
 *   java.lang.Integer --> int, Integer
 *   int --> _int, _integer
 *   Map --> map
 *   String --> string
 */
//测试根据id查询用户信息为一个map集合的功能
@Test
public void testGetAllUserToMap(){
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    System.out.println(mapper.getAllUserToMap());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值