学习MyBatis Day3

1. 结果集映射

在MyBatis中,结果集映射是将数据库查询结果映射到Java对象的过程。通过定义<resultMap>元素,可以指定如何将数据库结果集的列与Java对象的属性进行映射。

下面是一个简单的示例:

在上述示例中,我们定义了一个名为userResultMap的结果映射。type属性指定了映射的目标对象类型为com.example.User。接着,使用<id><result>元素分别指定了主键属性和普通属性的映射关系。

  • <id>元素用于指定对象的主键属性的映射,通过property属性指定Java对象的属性名,通过column属性指定数据库结果集中对应的列名。
  • <result>元素用于指定普通属性的映射,使用方式类似于<id>元素。

当执行查询语句时,MyBatis会根据结果映射将数据库查询结果转换为Java对象。例如,执行以下查询语句:

查询结果中的idnameage列的值会分别设置到User对象的对应属性中。

除了基本映射外,MyBatis还支持复杂的关联映射,可以通过<association><collection>元素来定义一对一和一对多的关联关系。这样可以方便地处理数据库表之间的关系。

结果集映射是MyBatis中非常重要的特性,它可以简化数据查询过程,减少手动的对象赋值操作。同时,通过合理定义映射关系,可以提高代码的可读性和可维护性。

1.1 基本映射

基本映射是一种简单直观的结果集映射方式,在MyBatis中通过<resultMap>元素进行定义。基本映射的原理是将数据库查询结果的列与Java对象的属性一一对应。

以下是一个基本映射的示例:

在上述示例中,我们定义了一个名为userResultMap的结果映射。type属性指定了映射的目标对象类型为com.example.User。接着,使用<id><result>元素分别指定了主键属性和普通属性的映射关系。

  • <id>元素用于指定对象的主键属性的映射,通过property属性指定Java对象的属性名,通过column属性指定数据库结果集中对应的列名。
  • <result>元素用于指定普通属性的映射,使用方式类似于<id>元素。

当执行查询语句时,MyBatis会根据结果映射将数据库查询结果转换为Java对象。例如,执行以下查询语句:

查询结果中的idnameage列的值会分别设置到User对象的对应属性中。

基本映射非常适用于简单的查询场景,可以快速将数据库查询结果映射为Java对象。但对于复杂关联关系的查询,可能需要使用关联映射或动态SQL等更高级的映射技术来处理。

总而言之,基本映射是MyBatis中常用且简洁的结果集映射方式,通过一一对应的方式将数据库查询结果映射为Java对象的属性值。

 

1.2 关联映射

关联映射是MyBatis中用于处理多表关联查询的一种结果集映射方式。通过定义<association><collection>元素,可以将数据库查询结果中的关联列映射到Java对象的关联属性中。

下面是一个关联映射的示例:

 

在上述示例中,我们定义了一个名为userResultMap的结果映射。type属性指定了映射的目标对象类型为com.example.User。接着,使用<id><result>元素分别指定了User对象的主键属性和普通属性的映射关系。然后,使用<association>元素指定了User对象的关联属性department的映射关系。

  • <association>元素用于表示一对一的关联关系。其中,property属性指定了Java对象中的关联属性名,javaType属性指定了关联对象的类型,<id><result>元素则用于指定关联对象的属性映射关系。

当执行查询语句时,MyBatis会根据结果映射将数据库查询结果转换为Java对象。例如,执行以下查询语句:

查询结果中的u.idu.nameu.age列的值会分别设置到User对象的对应属性中,而d.idd.name列的值则会设置到User对象的关联属性department对应的属性中。

关联映射可以方便地处理多表关联查询场景,使得在查询结果中能够直接获得关联对象的属性值,避免了手动关联查询和赋值的繁琐操作。

需要注意的是,在进行关联映射时,要确保查询语句中包含了所有需要映射的列,并且别名与结果映射中的column属性一致,以便正确进行映射。

总结起来,关联映射是MyBatis中用于处理多表关联查询的一种重要的结果集映射方式,通过定义<association><collection>元素,可以将数据库查询结果中的关联列映射到Java对象的关联属性中,简化了多表关联查询的操作。

2. 动态SQL

动态SQL是MyBatis中用于根据不同条件生成动态SQL语句的一种特性。通过使用动态SQL,可以灵活地拼接和控制SQL语句的内容,以满足不同的查询需求。

MyBatis提供了以下几种方式来实现动态SQL:

        1.if元素:通过<if>元素可以在SQL语句中添加条件判断,根据条件动态生成SQL片段。

在上述示例中,<if>元素根据UserQuery对象中的nameage属性是否为null来判断是否添加对应的条件到SQL语句中。

        2.choose元素:通过<choose>元素可以根据条件选择不同的分支,在SQL语句中生成可选的内容。

在上述示例中,<choose>元素根据UserQuery对象中的nameage属性是否为null来选择不同的分支。如果都为null,则会执行<otherwise>中的条件。

        3.trim元素:通过<trim>元素可以在SQL语句中添加自定义的定界符,用于修剪或拼接SQL片段。

 

在上述示例中,<trim>元素通过prefix属性指定前缀,在这里是AND。通过prefixOverrides属性指定要修剪的内容,在这里是OR。这样,当<if>元素被执行时,如果满足条件,则会拼接对应的SQL片段,并且去除前面多余的OR关键字。

        4.foreach元素:通过<foreach>元素可以遍历集合或数组,生成对应的SQL语句片段。

在上述示例中,<foreach>元素通过collection属性指定要遍历的集合或数组,通过item属性指定遍历时的变量名,open属性指定起始字符,close属性指定结束字符,separator属性指定分隔符。

通过以上这些动态SQL的技巧,可以根据不同的条件动态生成SQL语句,使查询更加灵活和可扩展。在实际应用中,可以根据具体需求,灵活使用这些动态SQL的功能,提高查询效率和代码的可读性。

2.1 if元素

<if>元素可以根据判断条件决定是否包含某段SQL语句。例如,我们有一个查询用户列表的功能,可以根据用户名和年龄进行筛选:

这样,在执行查询时,如果name参数不为空,则会添加AND name = #{name}的条件;如果age参数不为空,则会添加AND age = #{age}的条件。

2.2 choose、when、otherwise元素

<choose><when><otherwise>元素可以实现类似于Java中的if-else逻辑判断。例如,我们有一个查询用户列表的功能,可以根据不同的条件进行排序:

这样,在执行查询时,根据orderBy参数的不同取值,会动态添加不同的排序条件。 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值