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

目录

  • 引言
    • 1. MyBatis中的动态SQL
      • 1.1 if元素
      • 1.2 foreach标签
    • 2. MyBatis中的模糊查询三种形式
      • 2.1 #{} 模糊查询
      • 2.2 ${} 模糊查询
      • 2.3 concat() 模糊查询
      • 2.4 MyBatis中#与$的区别
    • 3. MyBatis中的结果映射
      • resultType与resultMap的区别
    • 总结

“MyBatis中的动态SQL、模糊查询与结果映射“_第1张图片

引言

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时有所帮助,并能够在实际项目中灵活运用这些高级功能。

你可能感兴趣的:(mybatis,sql,数据库,spring,java,tomcat,ssm)