【SSM框架】MyBatis的各种查询功能

简介: 1.查询一个实体类对象2.查询一个list集合3.查询单个数据4.查询一条数据为map集合5.查询多条数据为map集合

1.查询一个实体类对象

/**

* 根据用户id查询用户信息

* @param id

* @return

*/

User getUserById(@Param("id") int id);

  <select id="getUserById" resultType="User">
       select * from t_user where id=#{id};
    </select>
    @Test
    public void test() {
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        User user = mapper.getUserById(2);
        System.out.println(user);
    }

表:

查询结果:

假如,我把后面的条件删除,会发生什么情况呢?


org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3


当查询的数据为多条时,不能使用实体类作为返回值,否则会抛出异常


TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值


2.查询一个list集合

/**


* 查询所有用户信息


* @return


*/


List getUserList();

    <select id="getAllUser" resultType="User">
select * from t_user;
    </select>

测试类:

   @Test
    public void test2(){
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        List<User> allUser = mapper.getAllUser();
        allUser.forEach(System.out::println);
    }

查询结果:


3.查询单个数据

/**

* 查询用户的总记录数

* @return

* 在 MyBatis 中,对于 Java 中常用的类型都设置了类型别名

* 例如: java.lang.Integer-->int|integer

* 例如: int-->_int|_integer

* 例如: Map-->map,List-->list

*/

int getCount ();

    <select id="getCount" resultType="java.lang.Integer">
        select count(id) from t_user;
    </select>

测试类:

    @Test
    public void test3(){
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Integer count = mapper.getCount();
        System.out.println(count);
    }


查询结果:



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

/**

* 根据用户 id 查询用户信息为 map 集合

* @param id

* @return

*/

Map < String , Object > getUserToMap ( @Param ( "id" ) int id );

<!--Map<String, Object> getUserToMap(@Param("id") int id);--> 
 <select id="getUserToMap" resultType="map"> 
select * from t_user where id = #{id} 
</select>

测试类:

  @Test
    public  void  test4(){
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Map<String, Object> map = mapper.getUserToMap(4);
        System.out.println(map);
    }

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


①方式一


/**

* 查询所有用户信息为 map 集合


* @return


* 将表中的数据以 map 集合的方式查询,一条数据对应一个 map ;若有多条数据,就会产生多个 map 集合,此


时可以将这些 map 放在一个 list 集合中获取

*/

List < Map < String , Object >> getAllUserToMap ();

<!--Map<String, Object> getAllUserToMap();-->
 <select id="getAllUserToMap" resultType="map"> 
select * from t_user
 </select>

②方式二

/**

* 查询所有用户信息为 map 集合


* @return


* 将表中的数据以 map 集合的方式查询,一条数据对应一个 map ;若有多条数据,就会产生多个 map 集合,并且最终要以一个 map 的方式返回数据,此时需要通过


@MapKey 注解设置 map 集合的键,值是每条数据所对应的

map 集合

*/

@MapKey ( "id" )

Map < String , Object > getAllUserToMap ();

 <select id="getAllUserToMap" resultType="map"> 
select * from t_user
 </select>

测试类:

    @Test
    public  void  test6(){
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Map<String, Object> allUserToMap = mapper.getAllUserToMap();
        System.out.println(allUserToMap);
    }

运行结果:


{1={password=123, sex=男, id=1, age=23, email=11111@qq.com, username=张三},


2={password=root, sex=女, id=2, age=23, email=11111@qq.com, username=root},


3={password=789123, sex=女, id=3, age=28, email=9090889@qq.com, username=小王}, 4={password=1234567, sex=男, id=4, age=34, email=1487418@qq.com, username=小李}}


相关文章
|
2月前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
176 8
|
13天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
31 1
持久层框架MyBatisPlus
|
19天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
13 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
25天前
|
SQL Java 数据库连接
mybatis如何仅仅查询某个表的几个字段
【10月更文挑战第19天】mybatis如何仅仅查询某个表的几个字段
27 1
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
27天前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
28 0
|
3月前
|
SQL Java 数据库连接
【Java 第十三篇章】MyBatis 框架介绍
MyBatis 原名 iBATIS,2001 年由 Clinton Begin 创建,以其简易灵活著称。2010 年更名以重塑品牌形象。MyBatis 通过 SQL 映射文件将 SQL 语句与 Java 代码分离,支持编写原生 SQL 并与方法映射。具备对象关系映射功能,简化数据库记录处理。支持动态 SQL 构建,灵活应对不同查询条件。内置缓存机制,提升查询效率。相比全功能 ORM,MyBatis 提供更高 SQL 控制度和更好的维护性,并易于与 Spring 等框架集成,广泛应用于 Java 数据访问层。
38 0
|
3月前
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
2月前
|
Java 应用服务中间件 数据库连接
ssm项目整合,简单的用户管理系统
文章介绍了一个使用SSM框架(Spring、SpringMVC、MyBatis)构建的简单用户管理系统的整合过程,包括项目搭建、数据库配置、各层代码实现以及视图展示。
ssm项目整合,简单的用户管理系统
|
2月前
|
XML Java 数据库连接
如何搭建SSM框架、图书商城系统
这是一份详尽的《Spring + SpringMVC + Mybatis 整合指南》,作者耗时良久整理出约五万字的内容,现已经全部笔记公开。此文档详细地介绍了如何搭建与整合SSM框架,具体步骤包括创建Maven项目、添加web骨架、配置pom文件以及整合Spring、SpringMVC和Mybatis等。无论是对初学者还是有一定基础的开发者来说,都是很好的学习资源。此外,作者还提供了项目源码的GitHub链接,方便读者实践。虽然当前主流推荐学习SpringBoot,但了解SSM框架仍然是不可或缺的基础。
35 0