Mybatis之Mybatis的各种查询功能和特殊SQL的执行

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【1月更文挑战第3天】一、MyBatis的各种查询功能1、查询一个实体类对象2、查询一个List集合3、查询单个数据4、查询一条数据为map集合5、查询多条数据为map集合1、方法一2、方法二二、特殊SQL的执行1、模糊查询2、批量删除3、动态设置表名4、添加功能获取自增的主键


学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:

想系统/深入学习某技术知识点…

一个人摸索学习很难坚持,想组团高效学习…

想写博客但无从下手,急需写作干货注入能量…

热爱写作,愿意让自己成为更好的人…

文章目录

前言

一、MyBatis的各种查询功能

1、查询一个实体类对象

2、查询一个List集合

3、查询单个数据

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

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

1、方法一

2、方法二

二、特殊SQL的执行

1、模糊查询

2、批量删除

3、动态设置表名

4、添加功能获取自增的主键

总结


前言

一、MyBatis的各种查询功能

1、查询一个实体类对象

2、查询一个List集合

3、查询单个数据

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

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

1、方法一

2、方法二

二、特殊SQL的执行

1、模糊查询

2、批量删除

3、动态设置表名

4、添加功能获取自增的主键


一、MyBatis的各种查询功能

  1. 如果查询出的数据只有一条,可以通过
  1. 实体类对象接收
  2. List集合接收
  3. Map集合接收,结果{password=123456, sex=男, id=1, age=23, username=admin}
  1. 如果查询出的数据有多条,一定不能用实体类对象接收,会抛异常TooManyResultsException,可以通过
  1. 实体类类型的LIst集合接收
  2. Map类型的LIst集合接收
  3. 在mapper接口的方法上添加@MapKey注解

1、查询一个实体类对象

/*** 根据用户id查询用户信息* @param id* @return*/UsergetUserById(@Param("id") intid);
<!--UsergetUserById(@Param("id") intid);--><selectid="getUserById"resultType="User">select*fromt_userwhereid=#{id}
</select>
@TestpublicvoidtestGetUserById() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);
Useruser=userMapper.getUserById(1);
System.out.println(user);
    }

2、查询一个List集合

/*** 查询所有用户信息* @return*/List<User>getUserList();
<!--List<User>getUserList();--><selectid="getUserList"resultType="User">select*fromt_user</select>
@TestpublicvoidtestGetUserByList() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);
List<User>list=userMapper.getUserList();
System.out.println(list);
    }

3、查询单个数据

/**  * 查询用户的总记录数  * @return  * 在MyBatis中,对于Java中常用的类型都设置了类型别名  * 例如:java.lang.Integer-->int|integer  * 例如:int-->_int|_integer  * 例如:Map-->map,List-->list  */intgetCount();
<!--intgetCount();--><selectid="getCount"resultType="_integer">selectcount(id) fromt_user</select>
@TestpublicvoidtestGetUserByCount() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);
intl=userMapper.getCount();
System.out.println(l);
    }

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

/**  * 根据用户id查询用户信息为map集合  * @param id  * @return  */Map<String, Object>getUserToMap(@Param("id") intid);
<!--Map<String, Object>getUserToMap(@Param("id") intid);--><selectid="getUserToMap"resultType="map">select*fromt_userwhereid=#{id}
</select><!--结果:{password=123456, sex=, id=1, age=23, username=admin}-->
@TestpublicvoidtestGetUserByToMap() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);
Mapmap=userMapper.getUserToMap(1);
System.out.println(map);
    }

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

1、方法一

/**  * 查询所有用户信息为map集合  * @return  * 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取  */List<Map<String, Object>>getAllUserToMap();
<!--Map<String, Object>getAllUserToMap();--><selectid="getAllUserToMap"resultType="map">select*fromt_user</select>
@TestpublicvoidtestGetUserByAllToMap() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);
List<Map<String, Object>>list=userMapper.getAllUserToMap();
System.out.println(list);
    }

2、方法二

/*** 查询所有用户信息为map集合* @return* 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合*/@MapKey("id")
Map<String, Object>getAllUserToMap2();
<!--Map<String, Object>getAllUserToMap();--><selectid="getAllUserToMap2"resultType="map">select*fromt_user</select>
@TestpublicvoidtestGetUserByAllToMap2() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);
Map<String, Object>map=userMapper.getAllUserToMap2();
System.out.println(map);
    }

二、特殊SQL的执行

1、模糊查询

/*** 根据用户名进行模糊查询* @param username * @return java.util.List<com.atguigu.mybatis.pojo.User>*/List<User>getUserByLike(@Param("username") Stringusername);
<!--List<User>getUserByLike(@Param("username") Stringusername);--><selectid="getUserByLike"resultType="User"><!--select*fromt_userwhereusernamelike'%${mohu}%'--><!--select*fromt_userwhereusernamelikeconcat('%',#{mohu},'%')-->select*fromt_userwhereusernamelike"%"#{mohu}"%"</select>
  • 其中select * from t_user where username like "%"#{mohu}"%"是最常用的

2、批量删除

  • 只能使用${},如果使用#{},则解析后的sql语句为delete from t_user where id in ('1,2,3'),这样是将1,2,3看做是一个整体,只有id为1,2,3的数据会被删除。正确的语句应该是delete from t_user where id in (1,2,3),或者delete from t_user where id in ('1','2','3')
/*** 根据id批量删除* @param ids * @return int*/intdeleteMore(@Param("ids") Stringids);
<deleteid="deleteMore">deletefromt_userwhereidin (${ids})
</delete>
//测试类@TestpublicvoiddeleteMore() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
SQLMappermapper=sqlSession.getMapper(SQLMapper.class);
intresult=mapper.deleteMore("1,2,3,8");
System.out.println(result);
}

3、动态设置表名

  • 只能使用${},因为表名不能加单引号
/*** 查询指定表中的数据* @param tableName * @return java.util.List<com.atguigu.mybatis.pojo.User>*/List<User>getUserByTable(@Param("tableName") StringtableName);
<!--List<User>getUserByTable(@Param("tableName") StringtableName);--><selectid="getUserByTable"resultType="User">select*from${tableName}
</select>

4、添加功能获取自增的主键

  • 使用场景
  • t_clazz(clazz_id,clazz_name)
  • t_student(student_id,student_name,clazz_id)
  1. 添加班级信息
  2. 获取新添加的班级的id
  3. 为班级分配学生,即将某学的班级id修改为新添加的班级的id
  • 在mapper.xml中设置两个属性
  • useGeneratedKeys:设置使用自增的主键
  • keyProperty:因为增删改有统一的返回值是受影响的行数,因此只能将获取的自增的主键放在传输的参数user对象的某个属性中
/*** 添加用户信息* @param user */voidinsertUser(Useruser);
<!--voidinsertUser(Useruser);--><insertid="insertUser"useGeneratedKeys="true"keyProperty="id">insertintot_uservalues (null,#{username},#{password},#{age},#{sex},#{email})
</insert>
//测试类@TestpublicvoidinsertUser() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
SQLMappermapper=sqlSession.getMapper(SQLMapper.class);
Useruser=newUser(null, "ton", "123", 23, "男", "123@321.com");
mapper.insertUser(user);
System.out.println(user);
//输出:User(id=3, username=ton, password=123, age=23, sex=男, email=123@321.com),自增主键存放到了user的id属性中}

总结

以上就是Mybatis之Mybatis的各种查询功能和特殊SQL的执行的相关知识点,希望对你有所帮助。

积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!

相关文章
|
11天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
44 9
|
1月前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
109 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
18天前
|
SQL XML Java
mybatis实现动态sql
MyBatis的动态SQL功能为开发人员提供了强大的工具来应对复杂的查询需求。通过使用 `<if>`、`<choose>`、`<foreach>`等标签,可以根据不同的条件动态生成SQL语句,从而提高代码的灵活性和可维护性。本文详细介绍了动态SQL的基本用法和实际应用示例,希望对您在实际项目中使用MyBatis有所帮助。
47 11
|
16天前
|
XML Java 数据库连接
Mybatis实现RBAC权限模型查询
通过对RBAC权限模型的理解和MyBatis的灵活使用,我们可以高效地实现复杂的权限管理功能,为应用程序的安全性和可维护性提供有力支持。
48 5
|
2月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
39 8
|
1月前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
65 3
|
2月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
67 4
|
2月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
3月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
163 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
3月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
92 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块