目录
- 引言
- 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是一个强大而灵活的持久层框架,广泛应用于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时有所帮助,并能够在实际项目中灵活运用这些高级功能。