MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射

简介: MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射

一、引言

在实际开发中,数据库操作是非常常见且重要的任务。而MyBatis作为一款优秀的持久层框架,提供了许多强大的功能来简化我们对数据库的操作。本文将介绍MyBatis中的动态SQL、模糊查询和结果映射等特性,帮助大家更好地使用MyBatis进行数据库操作。

二、MyBatis动态SQL

动态SQL是指根据不同的条件生成不同的SQL语句,以适应不同的查询需求。MyBatis提供了多种方式来实现动态SQL,其中最常用的有if元素和foreach元素。

2.1 if元素使用

if元素可用于根据条件包含或排除一部分SQL语句。它可以嵌套在其他元素内部,如where、set等。

xml
<select id="getUserList" resultType="User">
  SELECT * FROM user
  WHERE 1=1
    <if test="username != null and username != ''">
      AND username = #{username}
    </if>
    <if test="email != null and email != ''">
      AND email = #{email}
    </if>
</select>

2.2 foreach元素使用

foreach元素用于遍历集合或数组,并将每个元素应用到SQL语句中。

xml
<select id="getUserList" resultType="User">
  SELECT * FROM user
  WHERE id IN
    <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
      #{item}
    </foreach>
</select>

三、MyBatis模糊查询

模糊查询是在数据库查询中常见的需求之一。MyBatis提供了多种方式来实现模糊查询,其中包括使用#{字段名}、使用${字段名}和使用concat函数进行字符串拼接。

① 使用#{字段名}
xml
<select id="like1" resultType="com.niyin.model.Book" parameterType="java.lang.String">
    select
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bname like #{bname}
  </select>

① 使用#{字段名}:

这种方式是最常见且推荐的方式。

在SQL语句中使用#{字段名}会将字段值作为预编译参数进行处理,可以有效防止SQL注入攻击。

MyBatis会自动为参数添加引号和转义特殊字符,确保查询的准确性和安全性。

② 使用${字段名}

<select id="like2" resultType="com.niyin.model.Book" parameterType="java.lang.String">
    select
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bname like '${bname}'
  </select>

② 使用${字段名}:

这种方式是直接将字段值替换到SQL语句中。

在SQL语句中使用${字段名}会将字段值直接拼接到SQL语句中,没有经过预编译处理。

使用这种方式更加灵活,可以完成一些复杂的字符串拼接操作,但也增加了潜在的安全风险

③ 使用concat{‘%’, #{字段名}, ‘%’}

<select id="like3" resultType="com.niyin.model.Book" parameterType="java.lang.String">
    select
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bname like concat('%',#{bname},'%');
  </select>

③ 使用concat{‘%’,#{字段名},‘%’}:

这种方式使用concat函数将字段值与通配符’%'进行拼接。

类似于第一种方式,使用了预编译参数的方式,相对安全且可读性较好。

这种方式适用于需要在查询条件中同时使用通配符前后匹配的情况。

四、MyBatis结果映射

结果映射是指将查询结果映射到Java对象中的过程。MyBatis通过resultMap来定义结果映射关系。

在使用MyBatis中拥有多个场景,返回的结果是多样的,resultType/resultMap

①返回单表的对应的实体类,仅有一个查询结果,可以用resultType/resultMap。

②返回单表的对应的实体类,有多个查询结果,可以用resultType/resultMap。

③返回多表对应结果,仅有一个查询结果,通常用resultType也可以用resultMap。

④返回多表对应结果,有多个查询结果,通常用resultType也可以用resultMap。

⑤返回单个列段,仅有一个查询结果,就用resultType。

⑥返回单个列段,有多个查询结果,就用resultType。

如果是单表的情况下,resultType与resultMap都可以使用。

1 使用resultMap返回映射关系,指的是实体类与数据库字段的关系

2 使用resultType返回List

3 使用resultType返回单个对象

4 使用resultType返回List【适用于多表查询返回结果集】

5 使用resultType返回Map<String,Object>【适用于多表查询返回单个结果集】

总结

本文介绍了MyBatis中的动态SQL、模糊查询和结果映射等特性。通过灵活运用这些功能,我们可以更好地编写适应不同场景需求的数据库操作语句,并将查询结果映射到Java对象中。希望本文能够对大家的MyBatis开发有所帮助!如果有任何疑问或需要进一步了解的地方,请随时提问。谢谢阅读!

目录
相关文章
|
20天前
|
SQL XML Java
七、MyBatis自定义映射resultMap
七、MyBatis自定义映射resultMap
36 6
|
19天前
|
SQL XML Java
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
27 0
|
4月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
6月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
8月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
201 3
|
8月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
84 1
|
7月前
|
SQL JSON 关系型数据库
"SQL老司机大揭秘:如何在数据库中玩转数组、映射与JSON,解锁数据处理的无限可能,一场数据与技术的激情碰撞!"
【8月更文挑战第21天】SQL作为数据库语言,其能力不断进化,尤其是在处理复杂数据类型如数组、映射及JSON方面。例如,PostgreSQL自8.2版起支持数组类型,并提供`unnest()`和`array_agg()`等函数用于数组的操作。对于映射类型,虽然SQL标准未直接支持,但通过JSON数据类型间接实现了键值对的存储与查询。如在PostgreSQL中创建含JSONB类型的表,并使用`-&gt;&gt;`提取特定字段或`@&gt;`进行复杂条件筛选。掌握这些技巧对于高效管理现代数据至关重要,并预示着SQL在未来数据处理领域将持续扮演核心角色。
102 0
|
8月前
|
SQL Java 数据库连接
mybatis动态SQL常用语法总结
MyBatis 使用 OGNL 表达式语言处理动态SQL,如 `if` 标签进行条件判断,`choose`、`when`、`otherwise` 实现多条件选择,`where`、`set` 管理SQL关键字,`trim` 提供通用修剪功能,`foreach` 遍历集合数据。`sql` 和 `include` 用于代码重用,`selectKey` 处理插入后的返回值。参数传递支持匿名、具名、列表、Map、Java Bean和JSON方式。注意SQL转义及使用合适的jdbcType映射Java类型。
150 7
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
|
9月前
|
SQL XML Java
MyBatis第四课动态SQL
MyBatis第四课动态SQL