2、MyBatis 框架 顶级标签详解(select、insert、update、delete、sql、typeAliases、resultMap)以及 OGNL 表达式的使用

文章目录

  • 一、MyBatis 框架 顶级标签以及 ognl 表达式的作用以及使用方式
    • 1、select 标签
      • 1.1、ognl 表达式 : ${参数} & #{参数}
    • 2、insert 标签
    • 3、update 标签
    • 4、delete 标签
    • 5、sql 标签
    • 6、resultMap 标签
      • 6.1、匹配实体类属性与数据库字段(简单映射)
      • 6.2、MyBatis 高级映射(resultMap 标签多表联查,一对多,多对一关系)



一、MyBatis 框架 顶级标签以及 ognl 表达式的作用以及使用方式

       顶级标签是除却最外层的 mapper 标签之外最高级别元素,直接编写的外层标签内部。



1、select 标签

       select 标签的作用主要是用来映射数据库的查询语句
  • select 标签基本属性

    • id 属性: 指定 mapper 接口中的抽象方法名称,与之形成映射关系(注:必须是mapper标签指定的mapper 接口中的抽象方法)

    • parapeterType 属性: 配置传入到 SQL 语句中的参数类型,可以理解为用来接收参数的属性。如果不配置,mybatis 会通过 ParamterHandler 根据参数类型默认选择合适的类型进行处理。

    • resultType 属性: 配置返回结果集返回的类型,指定的类型可以是基本类型,也可以是java容器,也可以是 javaBean 对象(实体类对象)。

    • resultMap 属性: 用于引用 resultMap 标签定义的映射类型,这也是mybatis组件高级复杂映射的关键(resultType 与 resultMap 二选一配置,不可同时出现)。

  • XML 文件示例:


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.demo.mapper.XXXMapper" >

  
  <select id="接口方法名称" parapeterType ="传入参数类型" (resultType ="返回值参数类型"  resultMap="标签定义的映射类型">
      select 字段 from 表名 where 字段 = ${参数}
  select>

mapper>



1.1、ognl 表达式 : ${参数} & #{参数}


${参数} 就是ognl表达式,当我们使用标签映射 SQL 语句时,可以通过 ognl 表达式向 sql 中传参。

       当我们使用 ognl 表达式向 SQL 中传参时,其实就是获取 parameterType 属性所指定的参数类型中的某个属性所对应的值。

打个比方,如果 parameterType 属性所指定的属性是实体类(User)其中有 id,name这些属性,当我们在 select 标签中使用 ${id} 时,其实就是获取实体类中存储的属性值,就相当于调用 parameterType指定User类对象的 getId()方法,即:user.getId()。
       注:调用 ${id} 时 User 类中必须有 id 属性 或者 getId() 方法(二者有其一即可),否则报错。

  • ognl 表达式的编写格式:#{}${}
    • 两种格式的区别
      • #{} :占位符:通过praparedStatment对象预编译处理
      • ${} :拼接符:sql拼接,通过statement对象处理,没有预编译处理,有sql注入的风险

推荐使用的格式: #{}




2、insert 标签

       insert 标签的作用主要是用来映射数据库的新增语句
  • insert 标签基本属性

    • id 属性: 与select 标签的ID属性同理

    • parapeterType 属性: 与 select 标签的 parapeterType 属性同理

  • XML 文件示例:


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.demo.mapper.XXXMapper" >

  
  <insert id="接口方法名称" parapeterType ="传入参数类型" >
      insert into 表名 (字段....) values(${参数}....)
  insert>

mapper>



3、update 标签

       insert 标签的作用主要是用来映射数据库的新增语句
  • update 标签基本属性

    • id 属性: 与select 标签的ID属性同理

    • parapeterType 属性: 与 select 标签的 parapeterType 属性同理

  • XML 文件示例:


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.demo.mapper.XXXMapper" >

  
  <update id="接口方法名称" parapeterType ="传入参数类型" >
       update 表名 set 列名 = ${参数} where 修改条件
  update >

mapper>



4、delete 标签

       delete 标签的作用主要是用来映射数据库的新增语句
  • delete 标签基本属性

    • id 属性: 与select 标签的ID属性同理

    • parapeterType 属性: 与 select 标签的 parapeterType 属性同理

  • XML 文件示例:


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.demo.mapper.XXXMapper" >

  
  <delete id="接口方法名称" parapeterType ="传入参数类型" >
       delete from 表名 where 字段 = ${参数} 
  delete>

mapper>



5、sql 标签

        配置可以重复使用的 sql 代码块,类似于 Java 的全局变量,以此来实现 SQL 语句的动态拼接。
  • sql 标签基本属性

    • id 属性: 自定义一个 sql 代码块别名,用于后续引用

  • 搭配 sql 标签使用的标签

    • include 标签: 引入 sql 标签定义的 sql 代码块

      • refid 属性: 对应 sql 标签的 id 属性,用于指定 sql 标签

  • XML 文件示例:

DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.demo.mapper.XXXMapper" >

  <sql id="代码块别名">id,username,passwordsql>

  
  <select id="接口方法名称" parapeterType ="传入参数类型"  resultType ="返回值参数类型">    
     SELECT 
    <include refid="代码块别名"/>
  FROM 
    表名
  select>

mapper>



6、resultMap 标签

resultMap标签是 MyBatis 框架中最强大,最复杂的标签元素,为 MyBatis 提供了结果集映射的能力。

       简单映射:MyBatis 在映射查询结果时,如果实体类中的属性和数据库的列名存在出入,就会出现查询的结果集无法赋值到对应的实体类属性当中,导致结果缺失,这种状况使用 resultMap 标签的子标签(id 标签、result 标签)将实体类的属性和数据库列名相互映射,即可解决。

       复杂映射:实现多表联查,多对一、一对多等复杂关系的映射,这也是体现这个标签复杂与强大功能。

  • resultMap 标签属性

    • id 属性: 定义 resultMap 标签的唯一标识,在同一个 XML 文件中允许存在多个 resultMap 标签,但是这些标签的 id 属性必须唯一。在使用 resultMap 的时候,通过 id 引用 resultMap 内定义的内容。

    • type 属性: 映射的实体类对象的绝对路径

    • extends 属性: 继承其他 resultMap 标签(通常 resultMap 标签都代表了一个实体类,在多表联查时候,如果都需要配置 resultMap 的话,子类的 resultMap 就可以继承父类的 resultMap,然后父类有的那一部分属性标签(id、result标签)就不用在重写了)



resultMap 标签的子标签

  • id 标签: 用于标注这个 javabean 对象的唯一性, 不一定会是数据库的主键(不要把它理解为数据库对应表的主键)

    • id 标签的属性

      • property 属性: 配置 java Bean 的属性名(实体类字段名)

      • column 属性: 配置数据库表的列名,与 property 属性形成映射关系。(注:如果SQL中使用字段别名,那么此属性也可以指定字段别名,当然也可以使用数据库原本的列名)


  • result 标签: 将实体类的普通属性与数据库列名形成映射关系,该标签的属性和 id标签一致,只是不标注 javabean 对象的唯一性



6.1、匹配实体类属性与数据库字段(简单映射)


  • XML 文件示例:

DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.UserMapper" >

  
  <resultMap id="UserMap" type="com.modules.dto.User">
      <id property="userId" column="user_id"/>
      <result property="userName" column="user_name"/>
      <result property="password" column="password"/>
  resultMap>

  <select id="quertUser" resultMap="UserMap">    
     SELECT 
       user_id,user_name,password
    FROM 
       user
  select>

mapper>



6.2、MyBatis 高级映射(resultMap 标签多表联查,一对多,多对一关系)

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