MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
配置文档的顶层结构:
MyBatis 可以配置成适应多种环境,这样有助于将 SQL 映射应用于多种数据库之中, 现实情况下有很多都需要这么做。
例如:开发、测试和生产环境需要有不同的配置
要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
Mybatis 默认的事务管理器就是JDBC ,连接池:POOLED
指定创建哪种环境,将 一个资源
或 配置的环境ID
作为可选的参数传递给 SqlSessionFactoryBuilder。
为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法:
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"development");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,properties);
environments 元素定义了如何配置环境。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
注意一些关键点:
默认环境和环境 ID 顾名思义。 环境可以随意命名,但必须保证默认的环境 ID 要匹配其中一个环境 ID。
暂无
暂无
这些属性可以在外部进行配置,并可以进行动态替换。
既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置(db.properties)
编写一个数据库配置文件 db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?userSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
在核心配置文件中引入 优先读取配置文件
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
设置别名前
<select id="getUsers" resultType="com.qn.pojo.User">
select *
from mybatis.user
</select>
设置别名后
<select id="getUsers" resultType="user">
select *
from mybatis.user
</select>
可以单独配置一个实体类的别名,也可以直接配置扫描一个包下全部的实体类;
指定一个包
,MyBatis会使用 实体类的首字母小写
的非限定类名来作为它的别名
;
直接在实体类上添加注释 @Alias("user")
。
也可以使用首字母大小的方式,mybatis 内部机制会自己进行检索。
指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean
<typeAliases>
<package name="com.qn.pojo"/>
</typeAliases>
指定一个实体类的别名
<typeAliases>
<typeAlias type="com.qn.pojo.User" alias="user"/>
</typeAliases>
使用 @Alias()
注解配置实体类别名
@Alias("user")
public class User {
private int id;
private String name;
private String pwd;
}
注意:设置名 大小写
要一致,不能出现多余的空格
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 |
true | false | false |
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
实例:
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
暂无
暂无
<mappers>
<mapper resource="com/qn/dao/UserMapper.xml"/>
</mappers>
<mappers>
<mapper class="com.qn.dao.UserMapper"/>
</mappers>
注意点
接口和配置文件必须同名!
接口和它的mapper配置文件必须在同一个包下!
<mappers>
<package name="com.qn.dao"/>
</mappers>
注意点
生命周期,和作用域,是至关重要的,因为错误的使用会导致非常严重的并发问题。
类比:数据库连接池
一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例
因此 SqlSessionFactory 的最佳作用域是应用作用域。
最简单的就是使用单例模式或者静态单例模式。
这里面的每一个Mapper,就代表一个具体的业务!
原文:https://www.cnblogs.com/Right-A/p/14772647.html