MyBatis框架搭建及教程(详解)下

简介: MyBatis框架搭建及教程(详解)

3.4,where标签:处理查询条件:

如果在多重if条件的查询过程中,如果在where条件中,没有设置条件1=1那么可能就会变成下面这样一条错误的语句:


SELECT id,name,url,age,country FROM website AND name LIKE CONCAT('%',#{name},'%')


显然以上语句会出现 SQL 语法异常,但加入“1=1”这样的条件又非常奇怪,所以 MyBatis 提供了 where 标签。主要用来简化 SQL 语句中的条件判断,可以自动处理 AND/OR 条件,语法如下:


<where>
    <if test="判断条件">
        AND/OR ...
    </if>
</where>


if 语句中判断条件为 true 时,where 关键字才会加入到组装的 SQL 里面,否则就不加入。where 会检索语句,它会将 where 后的第一个 SQL 条件语句的 AND 或者 OR 关键词去掉。


3.5,set标签:动态更新:

在 Mybatis 中,update 语句可以使用 set 标签动态更新列。set 标签可以为 SQL 语句动态的添加 set 关键字,剔除追加到条件末尾多余的逗号。


<update id="updateRoute" parameterType="com.xinxi2.bean.Route">
        update route
        <set>
            <if test="id!=null">
                id=#{id},
            </if>
            <if test="name!=null">
                `name`=#{name},
            </if>
            <if test="mileage!=null">
                mileage=#{mileage},
            </if>
        </set>
            where id=#{id}
    </update>


3.6,foreach 标签:迭代遍历:

当SQL 语句中含有 in关键字进行列表值匹配时,需要迭代条件集合来生成的情况,可以使用 foreach来实现 SQL 条件的迭代。


Mybatis foreach 标签用于循环语句,它很好的支持了数据和 List、set接口的集合,并对此提供遍历的功能。语法格式如下:


<foreach item="item" index="index" collection="list|array|map key" open="(" separator="," close=")">
    参数值
</foreach>


foreach 标签主要有以下属性,说明如下。


  1. item:表示集合中每一个元素进行迭代时的别名。
  2. index:指定一个名字,表示在迭代过程中每次迭代到的位置。
  3. open:表示该语句以什么开始,既然是 in 条件语句,所以必然以(开始。
  4. separator:表示在每次进行迭代之间以什么符号作为分隔符,既然是 in 条件语句,所以必然以,作为分隔符。
  5. close:表示该语句以什么结束,既然是 in 条件语句,所以必然以)结束。
  6. 使用 foreach 标签时, collection属性是必选,但在不同情况下该属性的值是不一样的,主要有以下 3种情况
  7. 如果传入的是单参数且参数类型是一个 List,collection属性值为 list。
  8. 如果传入的是单参数且参数类型是一个 array 数组,collection的属性值为 array。
  9. 如果传入的参数是多个,需要把它们封装成一个Map,当然单参数也可以封装成 Map。Map 的 key 是参数名,collection 属性值是传入的 List 或 array 对象在自己封装的 Map 中的 key。


四,关联查询:


4.1,概述:

关联关系是一个数据库实体的概念,有 3 种级联关系,分别是一对一级联、一对多级联以及多对多级联。例如,一个角色可以分配给多个用户,也可以只分配给一个用户。大部分场景下,我们都需要获取角色信息和用户信息,所以会经常遇见以下 SQL。


SELECT r.*,u.* FROM t_role r
INNER JOIN t_user_role ur ON r.id = ur.id
INNER JOIN t_user u ON ur.user_id = u.id
WHERE r.id = #{id}


在级联中存在 3 种对应关系。


  1. 一对多,例如:角色和用户、项目组和软件工程师、用户和收货地址。
  2. 一对一,例如:商品简介和商品详情、学生基本信息和学籍档案信息。
  3. 多对多,例如:订单与商品、玩家与组队,例如:订单与商品、玩家与组队


4.2,一对一关联查询:

一对一级联关系在现实生活中是十分常见的,例如:一个学生基本信息对应一个学籍档案。


在 MyBatis 中,通过 元素的子元素 处理一对一级联关系。示例代码如下:


<association property="studentCard" column="cardId"
            javaType="com.apesource.entity.StudentCard"
            select="com.apesource.mapper.StudentCardMapper.selectStuCardById" />


在 元素中通常使用以下属性。


  1. property:指定映射到实体类的对象属性。
  2. column:指定表中对应的字段(即查询返回的列名)。
  3. javaType:指定映射到实体对象属性的类型。
  4. select:指定引入嵌套查询的子 SQL 语句,该属性用于关联映射中的嵌套查询
  5. 一对一关联查询可采用以下两种方式:
  6. 分步查询,通过两次或多次查询,为一对一关系的实体 Bean 赋值。
  7. 单步查询,通过关联查询实现。


4.3,多对多关联查询:

实际应用中,由于多对多的关系比较复杂,会增加理解和关联的复杂度,所以应用较少。MyBatis没有实现多对多级联,推荐通过两个一对多级联替换多对多级联,以降低关系的复杂度,简化程序。


例如,一个订单可以有多种商品,一种商品可以对应多个订单,订单与商品就是多对多的级联关系。可以使用一个中间表(订单记录表)将多对多级联转换成两个一对多的关系。


相关文章
|
6天前
|
SQL Java 数据库连接
MyBatis 框架入门理论与实践
MyBatis 框架入门理论与实践
23 6
|
SQL Java 数据库连接
MyBatis 优秀的持久层框架(一)
MyBatis 优秀的持久层框架
69 0
|
2月前
|
SQL 关系型数据库 Java
Mybatis-Flex框架初体验
Mybatis-Flex框架初体验
|
3月前
|
SQL Java 数据库连接
|
7天前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
18天前
|
SQL Java 数据库连接
什么是MyBatis持久层框架?
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象) 映射成数据库中的记录。
33 5
|
18天前
|
开发框架 Java 测试技术
XwFast,我开发了一个基于SpringBoot和MyBatisPlus的敏捷开发框架!
XwFast,我开发了一个基于SpringBoot和MyBatisPlus的敏捷开发框架!
32 1
|
2月前
|
SQL XML Java
这样使用MyBatis框架,被攻击了
这样使用MyBatis框架,被攻击了
14 0
|
2月前
|
Java fastjson Apache
Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
31 1
|
2月前
|
XML Java 数据库连接
Mybatis-Plus学习小项目及详细教程
Mybatis-Plus学习小项目及详细教程