3.1 配置解析
3.2 environments 的讲解
environments 指的是 环境的集合。即 使用 mybatis 之前,你需要 提供一个 环境 给它。然后 它根据这个 环境配置,去 初始化,再去执行。
那么 environments 里面 就可以 包含多个 environment !
我们可能对数据库 会有 不同的 方案操作,那么 这里 其实也就体现了 mybatis 的一个好处。那就是 不同的 需求方案,我们可以 在 这个 配置文件里 直接 写 进去。只要 它们是 单独的 每个 environment 就可以了。这样的方式 是很方便的,而且 结构非常的清晰。
然后 你选择 当前 要 执行的 方案,只需要 修改 <environments default="方案的名字 or 环境的名字">
当然 SqlSessionFactory 的实例 只能选择一个 环境被创建出来,所以 我们 可以 通过 传参的方式,来 指定 环境,创建 SqlSessionFactory 。
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
我们 还可以 通过 再创建 一个 xml 配置文件的方式,来 进行 这个 xml 文件的 读取,再创建一个 SqlSessionFactory 也能达到目的
3.2.1 transactionManager 事务管理者
在 MyBatis 中 有两种 类型的 事务管理器,JDBC||MANAGED
- JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如
JEE 应用服务器的上下文)。 默认情况下它会关闭连接。
然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。例如:
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
3.2.2 dataSource 数据源
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。 有三种内建的数据源类型(也就是 type="[
UNPOOLED|POOLED|JNDI`]")
UNPOOLED: 就是没有 连接池子,每次 请求 都会 正常的 打开 和 关闭 连接。虽然 有点儿 慢,但 对于 那些 数据库 连接 性能 要求不是很高的。一些 简单的应用 来说,使用 该配置会更好些。它会让你配置最基本的 五个属性:
POOLED: 这种数据源 实现 利用 池 的概念,将 JDBC 连接对象 组织起来,避免了 创建 新的 连接实例时 所必需 的 初始化和 认证时间,这种 处理方式 是 很流行的,能使得 并发 Web 应用 快速响应 请求。
它除了 上述的 基本属性以外,还有 自己专属的 很多属性。
JNDI: 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。这种数据源配置只需要两个属性:
3.3 properties 属性
我们 可以通过 properties 属性 来实现 引用 配置文件。
这些属性 都是 可外部配置 且 能够动态替换的,即可以 在 典型的 Java 属性 文件种 配置,也可以 通过 properties 里面的 属性 来传递参数。
- db.properties
driver = "com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username = root
password = 123123
properties 属性,在 我们的 mybatis 配置文件中,是 必须 在 第一个位置的。xml 文件 是可以 规定 标签顺序的,这个一定要 有所了解!
<!-- 引入 外部配置文件 -->
<properties resource="db.properties">
<!-- 这里是 可以 在这 设置 properties 的 属性 和 属性值,而且优先级 要高于 文件里 提前写好的属性-->
<property name="" value=""/>
</properties>
在 property 里面设置的属性,优先级 是要高于 提前在 文件里 写好的属性的。所以 一旦 有 重复名 的属性,它 也会 优先选择 在 property 里设置的。
4.1 类型别名 typeAliases
类型别名 是 能够 为 Java 类型 设置一个 短的 名字的。存在的意义仅仅是 用来 减少 完全限定名 的 冗余。
说白了就是,Java 的一些对象类型,太tm 长了,每次写 都太费劲了,那我们 还不如 起个 别名,就跟 C 语言的 define 差不多,然后 你只要 调用这个 别名,就相当于是 调用了 原先的那个名字。
- 一个 一个 类型的 去起 别名的方式
<typeAliases>
<typeAlias type="com.muquanyu.pojo.User" alias="User"></typeAlias>
</typeAliases>
- 指定一个 包名,然后 起别名,这个 别名 怎么 起呢?我们学过 注解 和反射吧,我们是不是 可以 读取到 一个类的 类注解。那么 当我们 读取到 有一个 注解 @Alias(“别名”) 的时候,我们 这个别名,就会自动设置为 @Alias 的注解值。
<typeAliases>
<!-- <typeAlias type="com.muquanyu.pojo.User" alias="User"></typeAlias>-->
<package name="com.muquanyu.pojo"/>
</typeAliases>
之前 讲 万能 Map 的时候,我们 用的 类型是 map,其实 就是用到了 别名机制,只是 mybatis 默认 把 Map 的别名设置为了 小写的 map。
注意点:如果 没有设定 该 注解,那么 就会 有个 默认值。所以 这里一定要注意,可能会 报错。
5.1 设置 settings
设置这东西,没有人 去背它。其实很多东西,真的不需要背。你只要 知道 它在哪里能查到,你 怎么样 能够 实现功能 就行了。
如果 想提高性能,这俩 配置可以看看。
数据库的 列名,大多数 都是 写成 last_Name 这样的形式的。因为之前 Oracle 数据库,会把 列名 全部转为大写,可读性 极差,导致 一大部分程序员 都习惯了 用 下划线,甚至 很多 新生程序员,都把这个 下划线 字段名,当作是一种 规范约束。所以 大多数 列名 都是 有下划线的。