Mybatis第三篇| Mybatis配置,有点小个性!

简介: Mybatis第三篇| Mybatis配置,有点小个性!

目录

1.Mybatis第一篇|我的第一个Mybatis程序

2.Mybatis第二篇| CRUD,这才是程序员入门第一课


前言

感谢大家继续来看我的Mybatis系列文章,这是该系列的第三篇文章,刚开始写这个系列的时候会担心有没有人看,因为在公众号前期我都是写一些关于Python方面的教程,所以积累的Python用户比较多。但是我觉得学习无止境,谁说学Python的不能学Java。因为前面两篇文章的阅读比我预想的要好点,所以对于这个系列我会更加的用心。


配置

今天的主角是↓


1.jpg


mybatis-config.xml,mybatis的核心配置文件。我们来看看官方文档中给了哪些可以配置的属性

  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
  • environment(环境变量)
  • transactionManager(事务管理器)
  • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)

上面是官方文档给出的所有配置,大家不理解也没关系,因为这篇文章就是带着大家来理解这些玩意的。

配置文件中配置的顺序

在mybatis-config.xml中,配置的顺序是非常重要的,也就是上面的这些配置如果顺序不对,那么配置文件就会报错。


2.jpg


例如我把settings放在了properties前面就报错了。

那么顺序是怎样的?


3.jpg


我们点开mybatis-3-config.dtd文件可以看到以下代码:


<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>


配置的顺序就是从左到右的顺序,properties->settings->typeAliases...

其实在官方文档中,目录的顺序就是配置文当中的顺序。


4.jpg


1. 属性(properties)

其实大家对于这个并不陌生,我们在学习JDBC时候,肯定也写过配置文件,这个属性就是让我们引入外部的配置文件。


5.jpg


<properties resource="db.properties"/>


通过上面的代码就可以引入外部文件了,这里我们来配置一个数据库的配置文件。

在resource文件下创建db.properties并配置相关配置


driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai
useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=123


6.jpg


在官方文档中,我们还可以看到两个骚操作,第一个就是可以在properties标签中覆盖掉配置文件中的属性。

例如我想把db.properties中的username替换成kuls,只需要按照下面代码编写:


<properties resource="db.properties">
  <property name="username" value="kuls"/>
</properties>


除此之外,我们还可以调用配置文件中的值


7.jpg


这里username的值是我们上面配置property当中的值,也就是kuls。

从 MyBatis 3.4.2 开始,你可以为占位符指定一个默认值。例如:


<dataSource type="POOLED">
<!-- ... -->
<property name="username" value="${username:ut_user}"/>
<!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user' -->
</dataSource>


这个特性默认是关闭的。要启用这个特性,需要添加一个特定的属性来开启这个特性。例如:


<properties resource="db.properties">
    <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
  <!-- 启用默认值特性 -->
</properties>


2.设置(settings)

setting是一个比较重要的属性,里面的相关配置都关系着整个Mybatis的行为,所以我们需要去多了解。


8.jpg


在官方文档中,有很多的设置名可以设置,由于篇幅原因,这里就不一一列出来了,但是这里可以给大家提示几个常用的。


9.png10.jpg


上面列出的延迟加载、日志文件输出,我们在后面都会详细跟大家讲解。关于setting的一些配置,大家最好移步官方文档好好阅读。


https://mybatis.org/mybatis-3/zh/configuration.html#settings


3.类型别名(typeAliases)

关于类型别名,大家看字面意思也大概能懂,我们看一段之前写过的代码。


<select id="getUserList" resultType="com.kuls.pojo.User">
  select * from mybatis.user
</select>


大家可以看到resultType这个属性,我们需要把包路径全部写出来,如果有很多个sql语句,那我们岂不是要花很多时间在这上面,所以mybatis提供了类型别名的设置,怎么设置呢?看下面:


<!--给实体类设置别名-->
<typeAliases>
  <!--第一种,可以自定义别名-->
  <typeAlias type="com.kuls.pojo.User" alias="User"/>
</typeAliases>


<!--给实体类设置别名-->
<typeAliases>
<!--第二种,扫描实体类的包,他的默认别名就为这个类的类名,首字母小写! 当然也可以大写,建议小写-->
    <package name="com.kuls.pojo"/>
</typeAliases>


//也可以通过@Alias注解起别名
@Alias("user")
publicclass User {
    privateint id;
    private String name;
    private String pwd;
    ...
}


上面给出了三种方式来给类起别名,但是个人推荐第二种,因为只需要扫描pojo包,就会自动将pojo下的所有类起别名,别名就是这个类的名称,首字母建议小写,也可以大写。


11.jpg


4. 插件(plugins)

在后面我们会接触到一些分页插件,它可以自动帮我们实现分页的功能。插件就是在映射语句执行过程中的某一点进行拦截调用。

我们可以自定义插件,我们可以看到官方给的例子:


// ExamplePlugin.java
@Intercepts({@Signature(
  type= Executor.class,
  method = "update",
  args = {MappedStatement.class,Object.class})})
publicclass ExamplePlugin implements Interceptor {
  private Properties properties = new Properties();
  public Object intercept(Invocation invocation) throws Throwable {
  // implement pre processing if need
  Object returnObject = invocation.proceed();
  // implement post processing if need
  return returnObject;
  }
  public void setProperties(Properties properties) {
    this.properties = properties;
  }
}


<!-- mybatis-config.xml -->
<plugins>
  <plugin interceptor="org.mybatis.example.ExamplePlugin">
    <property name="someProperty" value="100"/>
  </plugin>
</plugins>


当然这里我们就不带着大家去写一个插件了,日后我们也会有文章去编写一个简单的插件。


5.环境配置(environments)

这个我们应该比较熟悉了,在刚开始配置数据库的时候,我们就使用到了environments的配置。


12.png


可以看到environments里面包含着environment,这说明了我们可以配置多套环境。 官方文档中也有说到这种机制有助于将 SQL 映射应用于多种数据库之中。例如,开发、测试和生产环境需要有不同的配置。

不过我们要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

注意一些关键点:

  • 默认使用的环境 ID(比如:default="development")。
  • 每个 environment 元素定义的环境 ID(比如:id="development")。
  • 事务管理器的配置(比如:type="JDBC")。
  • 数据源的配置(比如:type="POOLED")。

在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):

  • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期,所以我们不用太多的去了解。

6.映射器(mappers)

这个属性其实在我们前面的文章也有提到。我们写好了sql语句在映射文件中,也就是mapper.xml中,但是mybatis是无法自动识别的,我们需要指定具体的路径,告诉mybatis去哪里找我们的映射文件。


13.png


官方文档提供了四种方式:


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


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


<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>


<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>


推荐大家把第一种resource和第三种class的方式好好记住,我们比较常用。


本文代码

完整代码:


https://github.com/hellokuls/kuls-mybatis


之后该系列的代码和文章全部放在这个GitHub项目,欢迎大家star!

相关文章
|
8月前
|
XML Java 数据库连接
MyBatis的常见配置
MyBatis 常见配置包括数据库连接、类型别名、映射器等核心模块,合理配置可提升开发效率与系统性能。主要内容涵盖核心配置文件结构、关键配置项详解及配置优先级说明。
744 4
|
Oracle 关系型数据库 Java
【YashanDB知识库】Mybatis-Plus适配崖山配置
【YashanDB知识库】Mybatis-Plus适配崖山配置
|
9月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
510 18
|
Java 数据库连接 微服务
微服务——MyBatis配置——事务管理
本段内容主要介绍了事务管理的两种类型:JDBC 和 MANAGED。JDBC 类型直接利用数据源连接管理事务,依赖提交和回滚机制;而 MANAGED 类型则由容器全程管理事务生命周期,例如 JEE 应用服务器上下文,默认会关闭连接,但可根据需要设置 `closeConnection` 属性为 false 阻止关闭行为。此外,提到在使用 Spring + MyBatis 时,无需额外配置事务管理器,因为 Spring 模块自带的功能可覆盖上述配置,且这两种事务管理器类型均无需设置属性。
221 0
|
Java 数据库连接 数据库
微服务——MyBatis配置——多环境配置
在 MyBatis 中,多环境配置允许为不同数据库创建多个 SqlSessionFactory。通过传递环境参数给 SqlSessionFactoryBuilder,可指定使用哪种环境;若忽略,则加载默认环境。`environments` 元素定义环境配置,包括默认环境 ID、事务管理器和数据源类型等。每个环境需唯一标识,确保默认环境匹配其中之一。代码示例展示了如何构建工厂及配置 XML 结构。
215 0
|
缓存 Java 数据库连接
微服务——MyBatis配置——常见配置
本文介绍了 MyBatis 的常见配置及其加载顺序。属性配置优先级为:方法参数传递的属性 &gt; resource/url 属性中配置 &gt; properties 元素中指定属性。同时列举了多个关键配置项,如 `cacheEnabled`(全局缓存开关)、`lazyLoadingEnabled`(延迟加载)、`useGeneratedKeys`(使用 JDBC 自动生成主键)等,并详细说明其作用、有效值及默认值。这些配置帮助开发者优化 MyBatis 的性能与行为。
220 0
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1822 0
|
缓存 Java 数据库连接
MyBatis篇-常见配置
本文介绍了 MyBatis 的常见配置及事务管理相关内容。首先概述了 MyBatis 属性加载顺序,方法参数属性优先级最高。接着列举了几个常见配置属性,如 cacheEnabled、lazyLoadingEnabled 等,并说明其作用与默认值。在多环境配置部分,讲解如何通过 SqlSessionFactoryBuilder 指定环境,以及 environments 元素的配置细节。最后讨论了两种事务管理模式:JDBC 和 MANAGED,分别适用于不同场景,并指出在使用 Spring 模块时无需额外配置事务管理器。
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
331 6
mybatis复习01,简单配置让mybatis跑起来
文章介绍了MyBatis的基本概念、历史和特点,并详细指导了如何配置MyBatis环境,包括创建Maven项目、添加依赖、编写核心配置文件、创建数据表和实体类、编写Mapper接口和XML配置文件,以及如何编写工具类和测试用例。
mybatis复习01,简单配置让mybatis跑起来