配置文件
核心配置
1、标签规则
(1)必须按照固定顺序(从上至下):properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers
(2)有的标签可以不写,但顺序一定不能乱
2、创建包
(1)src\main\java 目录下,直接创建包,包名之间使用 . 分隔
(2)src\main\resources 目录下,创建目录,包名之间使用 / 分隔;若使用 . 分隔,则为一个包
3、properties 标签
(1)引入外部 properties 配置文件的内容
(2)resource 属性:引入类路径下的资源
(3)url 属性:引入网络路径,或磁盘路径下的资源
(4)如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载
(5)首先读取 properties 标签内指定的属性
(6)然后根据 properties 标签中的 resource 属性,读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性
(7)最后读取作为方法参数传递的属性,并覆盖已读取的同名属性
4、settings 标签:包含多个设置项
(1)setting 子标签:设置一个设置项
(2)name 属性:设置项名称
(3)value 属性:设置项取值
5、typeAliase 标签:别名处理器
(1)typeAlias 子标签:为某个 JavaBean 起别名
(2)type 属性:需要别名的类型的全类名,默认别名即类名
(3)alias 属性:指定新的别名
(4)package 子标签:为某个包下的所有类批量起别名
(5)name 属性:指定包名,为当前包以及下面所有的后代包,每一个类都起一个默认别名
(6)缺点:若多个包下有相同的类,该方式的别名不能识别具体是哪个包下的类
(7)批量起别名的情况下,在需要别名的 JavaBean 上,使用 @Alias 注解,为某个类型指定新的别名
(8)别名对大小写不敏感的,起别名时不要占用已有的别名
6、typeHandlers 标签:类型处理器
(1)MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,或从结果集中取出一个值时,都会用类型处理器将获取的值,以合适的方式转换成 Java 类型
(2)日期时间处理上,可以使用 Mybatis 基于 JSR310(Date and Time API)编写的各种日期的时间类型处理器
(3)Mybaits3.4 以前的版本需要手动注册处理器,以后的版本都是自动注册
7、plugins 标签:插件
(1)可以通过插件来修改 Mybatis 的一些核心行为
(2)插件通过动态代理机制,可以介入四大对象的任何一个方法的执行
(3)默认情况下,MyBatis 允许使用插件来拦截的方法调用包括
(4)Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
(5)ParameterHandler (getParameterObject, setParameters)
(6)ResultSetHandler (handleResultSets, handleOutputParameters)
(7)StatementHandler (prepare, parameterize, batch, update, query)
8、environments 标签:环境
(1)每个 SqlSessionFactory 实例只能选择一种环境
(2)每个数据库对应一个 SqlSessionFactory 实例
(3)自定义事务管理器:实现 TransactionFactory 接口,type 为全类名
(4)使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置
(5)自定义数据源:实现 DataSourceFactory 接口,type 为全类名
(6)实际开发中使用 Spring 提供数据源
9、databaseIdProvider 标签:数据库厂商标识
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql" />
</databaseIdProvider>
(1)Mybatis 可以根据不同的数据库厂商执行不同的语句
(2)使用 MyBatis 提供的 VendorDatabaseldProvider 解析数据库厂商标识,也可以使用实现 DatabaseldProvider 接口来自定义
(3)name 属性:数据库厂商标识
(4)value 属性:为标识起一个别名,方便 SQL 语句使用 databaseld 属性引用
(5)DB_VENDOR:会通过 DatabaseMetaData#getDatabaseProductName() 返回的字符串进行设置,通常情况下该字符串较长,且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其变短
(6)MyBatis 匹配规则如下
(7)如果没有配置 databaseldProvider 标签,则 databaseld=null
(8)如果配置 databaseldProvider 标签,使用标签配置的 name 去匹配数据库信息,匹配上设置 databaseld=配置指定的值,否则依旧为 null
(9)如果 databaseld 不为 null,则只会找到配置 databaseld 的 SQL 语句
(10)MyBatis 会加载不带 databaseld 属性,和带有匹配当前数据库 databaseld 属性的所有语句,如果同时找到带有 databaseld 与不带 databaseld 的相同语句,则舍弃后者
<?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">
<!-- dtd约束文件,规定xml标签语法规则 -->
<configuration>
<!-- properties文件创建在src\main\resources下,引入properties文件,此时可以${key}的方式访问键值对-->
<properties resource="文件名.properties"></properties>
<settings>
<!-- 将表中字段的下划线自动转换为驼峰 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<!-- typeAlias:设置某个具体类型的别名 -->
<typeAliases>
<!--
type:需要设置别名的类型的全类名
alias:设置此类型的别名,且别名不区分大小写,即reslutType填写别名时,对大小写不敏感;若不设置此属性,该类型拥有默认的别名,即类名
例:<typeAlias type="org.test.mybatis.bean.User"></typeAlias>
-->
<!-- 以包为单位,设置该包下所有的类型都拥有默认的别名,即类名,且不区分大小写 -->
<package name="org.test.mybatis"/>
</typeAliases>
<!--
environments:设置多个连接数据库的环境
default属性:设置默认使用的环境的id
-->
<environments default="mysql">
<!--
environment:设置具体的连接数据库的环境信息
id属性:设置环境的唯一标识,不可重复,可通过environments标签中的default设置某一个环境的id,表示默认使用的环境
-->
<environment id="mysql">
<!--
transactionManager:设置事务管理方式
type属性:设置事务管理方式
type="JDBC / MANAGED"
JDBC:表示当前环境执行SQL时,使用JDBC原生事务管理方式,事务提交与回滚都必须手动处理
MANAGED:设置事务被管理,例如:Spring中的AOP
-->
<transactionManager type="JDBC"/>
<!--
dataSource:设置数据源
type属性:设置数据源的类型
type="POOLED / UNPOOLED / JNDI"
POOLED:使用数据库连接池,即将创建的连接进行缓存,下次使用可以从缓存中直接获取,不需要重新创建
UNPOOLED:不使用数据库连接池,即每次使用连接都需要重新创建
JNDI:调用上下文中的数据源
MyBatis整合后,不需要使用该配置,由Spring提供数据源
-->
<dataSource type="POOLED">
<!-- 引入properties文件,value可以使用${key},填充properties文件中的key对应的value -->
<!-- 设置连接数据库的驱动类的全类名 -->
<property name="driver" value="${jdbc.driver}"/>
<!-- 设置连接数据库的连接地址 -->
<property name="url" value="${jdbc.url}"/>
<!-- 设置连接数据库的用户名 -->
<property name="username" value="${jdbc.username}"/>
<!-- 设置连接数据库的密码 -->
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 引入映射文件 -->
<mappers>
<!--
引入单个映射文件
例:<mapper resource="UserMapper.xml"/>
-->
<!--
以包为单位,将包下所有的映射文件引入核心配置文件
mapper接口和mapper映射文件必须在相同的包下
mapper接口名和mapper映射文件名必须一致
-->
<package name="org.test.mybatis.mapper"/>
</mappers>
</configuration>
IDEA 设置模板
1、路径文件 | 设置 | 编辑器 | 文件和代码模板
2、核心配置模板
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<package name=""/>
</mappers>
</configuration>
3、映射模板
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
</mapper>
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战