美文网首页
MyBatis技术总结

MyBatis技术总结

作者: Responsibility_ | 来源:发表于2020-07-25 13:29 被阅读0次

MyBatis技术总结

分类:JavaEE框架技术原创文章
作者: 张岩

  • 什么是MyBatis?

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis中的主要组成部分

    Resource:MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易
    SqlSessionFactoryBuilder:可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例
    SqlSessionFactory:每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得
    SqlSession:既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。

    SqlSessionFactory创建代码示例:
    //1.读取配置文件
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    //2.创建SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
      ```
    >SqlSession:SqlSession 提供了在数据库执行 SQL 命令所需的所有方法,整合了JDBC中的数据库连接、SQL语句的执行,返回集的操作等。声明周期:从连接池中获取连接,到执行完毕归还连接
    
    ##### SqlSession创建代码示例:
    
    ```java
    //1.通过sqlSessionFactory创建SqlSession
    SqlSession sqlSession = sqlSessionFactory.openSession();
      ```
    
    
  • MyBatis配置

    • 设置(settings)

    主要作用:用来配置MyBatis的一些应用,例如日志等等。子节点是setting

    设置(settings)代码示例:
    <settings>
    <!-- 开启日志 -->
    <setting name= "logImpl" value= "STDOUT_LOGGING"/>
    </settings>
    
    • 类型别名(typeAliases)

    主要作用:实体类设置别名,在返回并保存数据库中的数据时用到,子节点是typeAlias
    type:数据类型,alias:别名

    类型别名(typeAliases)代码示例:
    <typeAliases>
    <typeAlias type="com.apesource.entity.Employee" alias="Employee"/>
    <typeAlias type="com.apesource.entity.EmployeeParam"                     alias="EmployeeParam"/>
    <typeAlias type="com.apesource.entity.Order" alias="Order"/>
    </typeAliases>
    
    • 环境配置(environments)

    主要作用:环境集,配置多个环境,例如开发环境,测试环境等等,子节点是environment

    环境配置(environments)代码示例:
    <environments default="development">
        <!-- 开发环境 -->
        <environment id="development">
            <!-- 事务管理器 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver_class}" />
                <!-- &符号不能直接使用转义为:$amp; -->
                <property name="url" value="${jdbc_url}" />
                <property name="username" value="${db_username}" />
                <property name="password" value="${db_password}" />
            </dataSource>
        </environment>
    </environments>
    
    • 映射器(mappers)

    主要作用:管理SQL语句的映射
    mapper是每一个SQL语句映射的文件,注意:文件地址用/分隔

    映射器(mappers)代码示例:
    <!-- 映射管理 -->
      <mappers>
      <mapper resource="com/apesource/dao/mapper/EmployeeMapper.xml"/>
      <mapper resource="com/apesource/dao/mapper/OrderMapper.xml"/>
      </mappers>
    
  • MyBatis XML 映射器

    1.常用节点作用总结

    • select :查询操作节点,返回类型一般都是自定义实体类,有多条件查询操作,参数类型一般是自定义实体类。
    • update:修改操作节点,返回类型一般为int,参数类型一般是自定义实体列,一般不修改null字段
    • delete:删除操作节点,返回类型一般为int,参数类型一般是int,有批量删除操作。
    • insert:插入操作节点,返回类型一般为int,参数类型一般为自定义实体类,有批量添加等操作

    2.常用属性作用总结

    • id 属性:唯一标识节点名,与相同包下相同的接口方法名相同。
    • resultType 属性:返回类型,相同包下相同的接口返回类型相同。可以自动添加到集合内。
    • parameterType 属性:参数类型,相同包下相同的接口参数类型相同。
    • useGeneratedKeys属性:主键回填操作开启,为true
    • keyProperty属性:回填值保存到resultType 类下的属性中。

    3.常见SQL映射示例

    示例1:普通增加

    SQL映射配置:<insert id="方法名" parameterType="参数类型"
          useGeneratedKeys="true" keyProperty="回填属性名">
          INSERT INTO
          表明('字段1','字段2','字段3')
          VALUES(#{类属性名1},#{类属性名2},#{类属性名3})
      </insert>
    
    接口方法定义:返回值 方法名(参数类型 参数名);
    

示例2:批量增加

SQL映射配置:
<insert id="方法名" parameterType="list">
      INSERT INTO
      answer_record('字段1','字段2','字段3','字段4')VALUES
      <foreach collection="list" item="集合元素" separator="分隔符">
          (
          #{集合元素.属性名},
          #{集合元素.属性名},
          #{集合元素.属性名},
          #{集合元素.属性名},
          )
      </foreach>

</insert>
接口方法定义:返回值 方法名(集合类型 参数名);
>示例3:普通删除
>```xml
>SQL映射配置:<delete id="方法名">
>           DELETE FROM 表名
>           where条件
>           </delete>
```
>>```java
>> 接口方法定义:  int 方法名(int recordId);
```


>示例4:批量删除
>```xml
>SQL映射配置:
><delete id="方法名" parameterType="list">
>       DELETE FROM 表名
>       WHERE 字段名 IN
>       <foreach collection="list" item="集合元素" open="(" close=")"
>           separator=",">
>           #{集合元素}
>       </foreach>
></delete>
>```
>>```java
>> 接口方法定义:  int 方法名(集合类型 参数名);
>>```


>示例5:动态修改
>```xml
>SQL映射配置:
><update id="方法名" parameterType="参数类型">
>       UPDATE
>       表名
>       <set>
>            <!- 判断属性是否为空->
>           <if test="类属性名 != null">字段名 = #{类属性名},</if>
>           <if test="类属性名 != null">字段名 = #{类属性名},</if>
>       </set>
>       WHERE 字段名 =#{类属性名}
></update>
>```
>>```java
>> 接口方法定义:返回类型 方法名(参数类型 参数名);
>>```


>示例6:动态查询
>```xml
>SQL映射配置:
><select id="方法名"
>       parameterType="参数类型" resultType="返回类型">
>       SELECT 字段名1 AS 别名1 ,字段名2 AS 别名2
>       FROM 表名
>       <where>
>           <if test="类属性名 != null"> AND 字段名 = #{类属性名}</if>
>           <!-- 模糊查询连接字符串,concat方法 -->
>           <if test="类属性名 != null">AND 字段名 Like concat('%',#{类属性名},'%')            </if>
>       </where>
>
></select>
>```
>>```java
>> 接口方法定义 返回类型 方法名(参数类型 参数名)
>>```


>示例7:查询结果封装为Map
>```xml
>SQL映射配置:
><select id="方法名"
>       parameterType="参数类型" resultType="map">
>       SELECT 字段名1 AS 别名1 ,字段名2 AS 别名2
>       FROM 表名
>       WHERE 条件
></select>
>```
>>```java
>> 接口方法定义:Map<数据类型> 方法名(参数类型 参数名)
>>```

相关文章

网友评论

      本文标题:MyBatis技术总结

      本文链接:https://www.haomeiwen.com/subject/cwgplktx.html