• MyBatis的各种查询功能


            若SQL语句查询的结果是多条时,不能用实体类类型作为方法的返回值,否则会抛出异常; 若SQL语句查询的结果只有一条,此时可以使用实体类类型或集合类型作为方法的返回值。

    1. 查询一个实体类对象

    SelectMapper.java接口

    1. /**
    2. * 根据id查询用户信息
    3. * @param id
    4. * @return
    5. */
    6. User getUserById(@Param("id") Integer id);

    SelectMapper.xml映射文件:

    1. <!--getUserById-->
    2. <select id="getUserById" resultType="User">
    3. select * from t_user where id = #{id};
    4. </select>

    测试代码:

    1. @Test
    2. public void testGetUserById(){
    3. // SqlSessionUtil是提前创建的一个工具类,文末给出SqlSessionUtil完整代码
    4. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    5. SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    6. User user = mapper.getUserById(1);
    7. System.out.println(user);
    8. sqlSession.close();
    9. }

    2. 查询一个List集合

    SelectMapper.java接口:

    1. /**
    2. * 查询所有用户信息
    3. * @return
    4. */
    5. List<User> getAllUsers();

    SelectMapper.xml映射文件:

    1. <!--getAllUsers-->
    2. <select id="getAllUsers" resultType="User">
    3. select * from t_user;
    4. </select>

    测试代码:

    1. @Test
    2. public void testGetAllUsers(){
    3. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    4. SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    5. List<User> list = mapper.getAllUsers();
    6. list.forEach(System.out::println); // 遍历输出List
    7. sqlSession.close();
    8. }

    3. 查询单个数据

    SelectMapper.java接口:

    1. <select id="getCount" resultType="integer">
    2. select count(*) from t_user;
    3. select>

    SelectMapper.xml映射文件:

    1. <!--getUserByIdToMap-->
    2. <select id="getUserByIdToMap" resultType="map">
    3. select * from t_user where id = #{id};
    4. </select>

    测试代码:

    1. @Test
    2. public void testGetCount(){
    3. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    4. SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    5. Integer count = mapper.getCount();
    6. System.out.println(count);
    7. sqlSession.close();
    8. }

    4. 查询一条数据为Map集合

    SelectMapper.java接口:

    1. /**
    2. * 根据Id查询用户信息为一个Map集合
    3. * @param id
    4. * @return
    5. */
    6. Map<String, Object> getUserByIdToMap(@Param("id") Integer id);

    SelectMapper.xml映射文件:

    1. <!--getUserByIdToMap-->
    2. <select id="getUserByIdToMap" resultType="map">
    3. select * from t_user where id = #{id};
    4. </select>

    测试代码:

    1. @Test
    2. public void testGetUserByIdToMap(){
    3. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    4. SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    5. // {password=123, gender=女, id=1, age=23, email=2436@qq.com, username=张三}
    6. Map<String, Object> map = mapper.getUserByIdToMap(1);
    7. System.out.println(map);
    8. sqlSession.close();
    9. }

    5. 查询多条数据为Map集合

        若查询的数据有多条时,要将每条数据转换为Map集合,此时有两种解决方案

            (1)将Mapper接口的返回值设置为范型为map的List集合

            (2)可以将每条数据转换的map集合放在一个大的map中,通过@MapKey注解实现,例如:@MapKey("id"),将id作为大map的键

    方法1:

    SelectMapper.java接口:

    1. /**
    2. * 查询所有的用户信息为Map集合
    3. * @return
    4. */
    5. List<Map<String, Object>> getAllUsersToMap();

    SelectMapper.xml映射文件:

    1. <!--getAllUsersToMap-->
    2. <select id="getAllUsersToMap" resultType="map">
    3. select * from t_user;
    4. </select>

    测试代码:

    1. @Test
    2. public void testGetAllUsersToMap(){
    3. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    4. SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    5. // 结果:{password=123, gender=女, id=1, age=23, email=2436@qq.com, username=张三}
    6. List<Map<String, Object>> list = mapper.getAllUsersToMap();
    7. list.forEach(System.out::println);
    8. sqlSession.close();

    方法2:

    SelectMapper.java接口:

    1. /**
    2. * 查询所有的用户信息为Map集合
    3. * @return
    4. */
    5. @MapKey("id")
    6. Map<String, Object> getAllUsersToMap();

    SelectMapper.xml映射文件:

    1. <!--getAllUsersToMap-->
    2. <select id="getAllUsersToMap" resultType="map">
    3. select * from t_user;
    4. </select>

    测试代码:

    1. @Test
    2. public void testGetAllUsersToMap(){
    3. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    4. SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    5. Map<String, Object> map = mapper.getAllUsersToMap();
    6. System.out.println(map);
    7. sqlSession.close();
    8. }

    补充:

         SqlSessionUtil工具类

    1. import java.io.IOException;
    2. import java.io.InputStream;
    3. public class SqlSessionUtil {
    4. public static SqlSession getSqlSession() {
    5. SqlSession sqlSession = null;
    6. try {
    7. // 获取核心配置文件的输入流
    8. InputStream is = Resources.getResourceAsStream("application.xml");
    9. // 获取SqlSessionFactoryBuilder
    10. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    11. // 获取sqlSessionFactoryBuilder对象
    12. SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
    13. // 获取SqlSession对象
    14. sqlSession = sqlSessionFactory.openSession(true);
    15. } catch (IOException e) {
    16. e.printStackTrace();
    17. }
    18. return sqlSession;
    19. }
    20. }
  • 相关阅读:
    Win10 桌面图标出现空文件夹的删除及桌面图标排列问题
    【JMeter】JMeter压测过程中遇到Non HTTP response code错误解决方案
    6.2 如何理解Go语言中的接口
    MFC工控项目实例一主菜单制作
    [deeplearning]深度学习框架torch的概念以及数学内容
    MATLAB中polyvalm函数用法
    Unity中动画系统的性能优化
    YOLO目标检测——PCB缺陷数据集下载分享【含对应voc、coco和yolo三种格式标签】
    哪些软件操作比较简单?手机拼图软件哪个好?
    JAVA计算机毕业设计食品点评及售卖系统源码+系统+mysql数据库+lw文档
  • 原文地址:https://blog.csdn.net/qq_48051316/article/details/128130311