“MyBatis中的动态SQL、模糊查询与结果映射“

简介: “MyBatis中的动态SQL、模糊查询与结果映射“

引言

MyBatis是一个强大而灵活的持久层框架,广泛应用于Java开发中。在使用MyBatis进行数据库操作时,动态SQL、模糊查询和结果映射是非常重要的功能。本文将深入探讨这些高级主题,并提供实例来帮助读者更好地理解和应用这些功能。

1. MyBatis中的动态SQL

动态SQL是MyBatis中非常强大和灵活的功能之一。它允许我们根据不同的条件生成不同的SQL语句,从而实现动态的数据库操作。在本节中,我们将介绍动态SQL的几个重要元素和用法。

1.1 if元素

if元素可以用于在SQL语句中添加条件判断。我们可以根据条件的真假来决定是否包含某个SQL片段。在本小节中,我们将学习如何使用if元素来实现动态SQL。

<select id="getUserList" parameterType="map" resultType="User">
  SELECT * FROM user
  <where>
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age = #{age}
    </if>
  </where>
</select>

1.2 foreach标签

foreach标签可以用于遍历集合或数组,并将集合或数组中的元素作为SQL语句的参数。例如,我们可以根据用户选择的条件列表来动态生成查询语句,如下所示:

<select id="getUserList" parameterType="map" resultType="User">
 select
 <include refid="Base_Column_List" />
 from t_user 
 where uid in 
  <foreach collection="uids" item="uid" separator=",">
      #{uid}
    </foreach>
</select>

2. MyBatis中的模糊查询三种形式

模糊查询是在查询时使用通配符来匹配模糊的数据。在MyBatis中,我们可以使用LIKE关键字和通配符来实现模糊查询。本节将重点介绍MyBatis中的模糊查询的用法和技巧。

2.1 #{} 模糊查询

<select id="getUserList" parameterType="map" resultType="User">
 select
 <include refid="Base_Column_List" />
 from t_user 
 where uname like #{uname}
</select>

2.2 ${} 模糊查询

<select id="getUserList" parameterType="map" resultType="User">
 select
 <include refid="Base_Column_List" />
 from t_user 
 where uname like ${uname}
</select>

2.3 concat() 模糊查询

<select id="getUserList" parameterType="map" resultType="User">
 select
 <include refid="Base_Column_List" />
 from t_user 
 where uname like concat('%',#{bname},'%')
</select>

2.4 MyBatis中#与$的区别

  • 1.$是占位符传参,#是预处理SQL
  • 2.外在形式,$传参不带引号,#传参自带引号
  • 3.$传参存在SQL注入,#不存在 (sql注入比如说你传了个 ${uname} ,name 的值是’张三’,实际传输的是’张三’ or 1=1
  • 4.$可以用来做动态列,完成动态SQL开发

3. MyBatis中的结果映射

结果映射是将查询结果映射到Java对象中的过程。在MyBatis中,我们可以使用映射文件或注解来定义结果映射。本节将重点介绍MyBatis中的结果映射的用法和技巧。

resultType与resultMap的区别

  • 1.返回单表对应的实体类,仅有一个查询结果,可以用resultType与resultMap
  • 2.返回单表对应的实体类,有多个查询结果,可以用resultType与resultMap
  • 3.返回多表对应的结果,仅有一个结果,通常用resultType,也可以用resultMap
  • 4.返回多表对应的结果,有多个结果,通常用resultType,也可以用resultMap
  • 5.返回单个列段仅有一个结果,就用resultType
  • 6.返回单个列段,有多个查询结果,就用resultType
  • resultType:对应的类型
  • sesultMap:对应的是返回映射关系,指的是实体类与数据表字段的关系。
    通常而言,单表查询,返回单列,发挥多表查询结果,是用resultType.
  • 查询的结果,需要有关联属性的体现,用resultMAp

总结

本文深入探讨了MyBatis中的动态SQL、模糊查询和结果映射的使用方法和技巧。动态SQL允许我们根据不同的条件生成不同的SQL语句,提高了查询的灵活性。模糊查询则是在查询时使用通配符来匹配模糊的数据,增加了查询的准确性。结果映射则是将查询结果映射到Java对象中,方便我们进行数据操作和处理。

通过学习本文,读者可以更好地理解和应用MyBatis中的动态SQL、模糊查询和结果映射。希望本文对读者在使用MyBatis时有所帮助,并能够在实际项目中灵活运用这些高级功能。


相关文章
|
18天前
|
SQL XML Java
九、MyBatis动态SQL
九、MyBatis动态SQL
23 2
|
4天前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
14天前
|
SQL XML Java
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
24 0
|
2月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
170 6
|
3月前
|
SQL XML Java
mybatis实现动态sql
MyBatis的动态SQL功能为开发人员提供了强大的工具来应对复杂的查询需求。通过使用 `<if>`、`<choose>`、`<foreach>`等标签,可以根据不同的条件动态生成SQL语句,从而提高代码的灵活性和可维护性。本文详细介绍了动态SQL的基本用法和实际应用示例,希望对您在实际项目中使用MyBatis有所帮助。
132 11
|
4月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
4月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
2月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
93 2
|
5月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
240 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
5月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
155 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块