【测试开发】知识点-mybatis,全局配置文件介绍

简介: 【测试开发】知识点-mybatis,全局配置文件介绍

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。


具体学习可以结合官方文档:https://mybatis.org/mybatis-3/zh/configuration.html


一、属性(properties)


mybatis 可以通过 properties 标签来引入外部 properties 配置文件里的内容。


最常见的就是引入外部配置文件里的数据库连接信息,在之前的 mybatis 配置文件里是写死的,现在来引入我们项目配置文件application.properties里的数据库信息.

那么 mybatis 配置文件现在可以这么写:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="application.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${spring.datasource.driver-class-name}"/>
                <property name="url" value="${spring.datasource.url}"/>
                <property name="username" value="${spring.datasource.username}"/>
                <property name="password" value="${spring.datasource.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>


在标签<<properties>中:


  • 如果使用resource:读取类路径下属性文件
  • 如果使用url:指定的路径读取属性文件,并覆盖之前读取过的同名属性


引入配置文件application.properties之后就可以使用${}来使用配置文件里的属性名了。


二、设置(settings)


这是 MyBatis 中极为重要的设置,会改变 MyBatis 运行时的行为。文档里的设置项很多,可以逐个看下混个脸熟,以后使用到的时候知道哪里找。


比如mapUnderscoreToCamelCase,作用是: 是否开启驼峰命名自动映射,即从经典数据库列名A_COLUMN映射到经典 Java 属性名aColumn


举个栗子:


数据库字段:user_name,开启配置后,就可以映射 java 属性名 userName


配置文件这样写:


...
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
...


三、类型别名(typeAliases)


1. 单个起别名


类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,方便引用的时候使用。


比如在 xml 文件UserMapper.xml中:


<mapper namespace="com.pingguo.bloomtest.dao.UserMapper">
    <select id="getUserById" resultType="com.pingguo.bloomtest.pojo.User">
      select * from user where id = #{id}
    </select>
</mapper>


返回类型resultTypecom.pingguo.bloomtest.pojo.User,全类名有点长,给它起个别名。


回到全局配置文件mybatis-config.xml中:


<typeAliases>
        <typeAlias type="com.pingguo.bloomtest.pojo.User" alias="user" />
    </typeAliases>


  • type: 写上全类名
  • alias: 不写的话默认是类名小写


然后引用的时候就可以使用别名:


<mapper namespace="com.pingguo.bloomtest.dao.UserMapper">
    <select id="getUserById" resultType="user">
      select * from user where id = #{id}
    </select>
</mapper>


2. 批量起别名


标签<typeAlias>一次只可以给一个类型起别名,如果要起别名的很多,可以进行批量处理。


使用package标签:


<typeAliases>
        <!--<typeAlias type="com.pingguo.bloomtest.pojo.User" alias="user" />-->
        <package name="com.pingguo.bloomtest.pojo" />
    </typeAliases>


  • name:指定包名,为这个包以及下面的所有后代包的每一个类都起一个默认别名(类名小写)


如果引用的时候resultType="User"我换成大写开头,运行也是OK的,别名不区分大小写


3. @Alias 给类指定别名


假如com.pingguo.bloomtest.pojo包下还有一个子包,而这个子包下面也有一个类叫User,这时候就是别名冲突了,mybatis 运行报错。


可以使用@Alias给类指定别名:


@Alias("User2")
public class User {
    @TableId(type = IdType.ID_WORKER)
    private Long id;
    private String username;
    private String password;
...


4. 内置别名


mybatis 有为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,采取了特殊的命名风格。


43742e1128d244a486471cab202f167b_tplv-k3u1fbpfcp-zoom-1.png


我们自定义别名的时候不要与内置的重复。


不过不用别名,就用全类名也有好处。比如在用 idea编辑器,可以直接按住ctrl+左击 类名跳过去,很方便。


四、类型处理器(typeHandlers)


类型处理器的作用,简单来说就是架起了java 类型和数据库类型一一映射的桥梁。

比如 java 对象中的 String 类型的变量,保存到数据库兼容的 varchar 或者 char。


a32a9766ad9b4395950cbe3b3b7bacc9_tplv-k3u1fbpfcp-watermark.png


这部分就先混个脸熟先,后续涉及到对应知识点再进一步学习。


五、插件(plugins)


MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:


  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed),执行器,常见的增删改查
  • ParameterHandler (getParameterObject, setParameters),参数处理,sql语句预编译设置参数
  • ResultSetHandler (handleResultSets, handleOutputParameters),结果集处理,查询到结果后拿到结果集并封装成Javabean对象
  • StatementHandler (prepare, parameterize, batch, update, query),sql语句处理器


这4个对象里有很多各自的方法(括号里),通过插件可以在方法执行之前做一些自定义的处理,来改变一些默认行为。


这里同样混脸熟,后续学习了mybatis 运行机制和原理的时候,再进一步学习。


六、环境配置(environments)


MyBatis 可以配置多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。


在之前已经用过这个标签<environments>:


<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${spring.datasource.driver-class-name}"/>
            <property name="url" value="${spring.datasource.url}"/>
            <property name="username" value="${spring.datasource.username}"/>
            <property name="password" value="${spring.datasource.password}"/>
        </dataSource>
    </environment>
</environments>


其中<environment>可以配置一个具体的环境信息,id代表当前环境的唯一标识,可以通过default动态的指定当前我要使用的环境。


另外,里面还有2个不可或缺的标签:transactionManagerdataSource


transactionManager


transactionManager 事务管理器,type是管理器的类型。


在 MyBatis 中有两种类型的事务管理器:


  • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。


如果我们使用Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。


dataSource


dataSource数据源,type是数据源的类型。有三种内建的数据源类型:


  • UNPOOLED: 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形
  • POOLED: 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
  • JNDI: 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。


七、数据库厂商标识(databaseIdProvider)


MyBatis 可以根据不同的数据库厂商执行不同的语句,databaseIdProvider这个标签其实就是 mybatis 在一致性方面的作为。


你只需要告诉 mybatis 你写的 sql 是属于哪个数据库厂商下的,那么它就可以动态的根据数据库厂商标识,来发送不同的sql语句。


<databaseIdProvider type="DB_VENDOR">
  <property name="MySQL" value="mysql"/>
  <property name="DB2" value="db2"/>
  <property name="Oracle" value="oracle" />
</databaseIdProvider>


这个DB_VENDOR,作用就是得到数据库厂商的标识(驱动自带获取厂商标识的方法)。


name设置不同的数据库标识,value可以设置别名。


最后,需要在 sql映射文件里告诉mybatis 这条 sql 是又哪个厂商去执行:


<mapper namespace="com.pingguo.bloomtest.dao.UserMapper">
    <select id="getUserById" resultType="com.pingguo.bloomtest.pojo.User" databaseId="mysql">
      select * from user where id = #{id}
    </select>
</mapper>


这里databaseId里的值就是上面配置的别名。


八、映射器(mappers)


既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。

mappers标签就是将 sql 映射注册到全局配置文件中去,比如之前写的:


<mappers>
    <mapper resource="UserMapper.xml"/>
</mappers>


每个<mapper>注册一个 sql映射,其中又会涉及到如下几个属性:


resource


<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>


url


<!-- 使用完全限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>


class


上面2个是注册配置文件的,而这个是用来注册接口的,里面写接口全类名


<!-- 使用映射器接口实现类的全类名 -->
<mappers>
  <mapper class="com.pingguo.bloomtest.dao.UserMapper"/>
</mappers>


但是要注意:sql映射文件必须和接口同名,并且放在同一目录下。


另外,注册接口的情况下,也是可以不写 sql 映射文件的,所有的sql都利用注解写在接口上。


public interface UserMapper {
    @Select("select * from user where id = #{id}")
    User getUserById(Integer id);
}


感觉写注解很方便啊?可以mybatis好不容易让sql与代码分离这不又回去了?


没关系,混合用就好了。可以把比较重要的、复杂的用来写 sql映射文件,简单的可以写注解里,方便快速开发。


批量注册


上面是单个的注册,现在同样也可以批量进行注册:


<mappers>
  <package name="org.mybatis.builder"/>
</mappers>


name写包名。

相关文章
|
15天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
52 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
2月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
205 56
|
4月前
|
测试技术 语音技术
FunASR英文离线文件转写软件包问题之性能测试详细结果查看如何解决
FunASR英文离线文件转写软件包问题之性能测试详细结果查看如何解决
81 0
|
2月前
|
安全 Linux 网络安全
Kali 渗透测试:利用HTA文件进行渗透攻击
Kali 渗透测试:利用HTA文件进行渗透攻击
59 1
|
3月前
|
Java C++
代码文件间重复性测试
本文介绍了如何使用代码相似性检测工具simian来找出代码文件中的重复行,并通过示例指令展示了如何将检测结果输出到指定的文本文件中。
|
2月前
|
安全 Linux 网络安全
Kali渗透测试:自动播放文件攻击
Kali渗透测试:自动播放文件攻击
43 0
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
70 1
|
3月前
|
安全 中间件 Shell
渗透测试-靶机DC-2-知识点总结
渗透测试-靶机DC-2-知识点总结
49 0
|
3月前
|
安全 网络协议 Shell
渗透测试-靶机DC-1-知识点总结
渗透测试-靶机DC-1-知识点总结
49 0
|
4月前
|
JSON Java 测试技术
单元测试问题之使用JSON文件作为参数化测试的输入源如何解决
单元测试问题之使用JSON文件作为参数化测试的输入源如何解决
91 0