Mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<!--就是DOCTYPE后面对应的根节点-->
<configuration>
<!-- 引入外部资源文件 通过${}引用 -->
<properties resource="mysql.config.properties">
</properties>
<!-- -->
<settings>
<!-- 是否允许在SQL使用别名 默认是true -->
<setting name="useColumnLabel" value="true"/>
<!--默认是FALSE 允许JDBC支持自动生成主键 一般Oracle中使用-->
<setting name="useGeneratedKeys" value="false"/>
<!-- 指定发现自动映射目标未知列的行为 当字段名和属性名不匹配时发生的
NONE 不做任何反映
WARNING 输出警告日志
FAILING 映射失败
-->
<setting name="autoMappingUnknownColumnBehavior" value="NONE"/>
<!--defaultExecutorType
配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。
-->
<setting name="defaultExecutorType" value="SIMPLE"/>
<!--设置超时时间-->
<!-- <setting name="defaultStatementTimeout" value=""/>-->
<!-- 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 -->
<setting name="mapUnderscoreToCamelCase" value="false"/>
<!-- 当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。-->
<!-- 当向数据库中插入数据某个值为null时 映射到数据库的类型
OTHER mysql 是可以识别出other 类型
NULL 如果是 Oracle一定设置为nullORACLE识别不出 OTHER类型
VARCHAR 当属性值为空时 为数据库设置一个空字符串
-->
<setting name="jdbcTypeForNull" value="OTHER"/>
<!-- 指定 MyBatis 所用日志的具体实现,未指定时将自动查找 。 SLF4J | LOG4J(3.5.9 起废弃) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING -->
<!-- <setting name="logImpl" value=""/>-->
</settings>
<!--类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:-->
<typeAliases>
<!-- 会将类的名字作为别名(忽略大小写)-->
<!-- 类单独设置别名 可以直接在类里面@Alias-->
<!-- -->
<package name="com.kdy.pojo" />
</typeAliases>
<!-- 插件 可以理解成MyBatis的拦截器 可以拦截4大对象 Executor ParameterHandler ResultSetHandler StatementHandler 可以拦截SQL 给SQL添加一些公共的功能 -->
<!-- <plugins>-->
<!-- <plugin interceptor="org.mybatis.example.ExamplePlugin">-->
<!-- <property name="someProperty" value="100"/>-->
<!-- </plugin>-->
<!-- </plugins>-->
<!-- 数据库环境 复数 可以多个环境 可以通过default快速切换 -->
<environments default="development">
<!-- 配置数据库环境 id指定当前数据库环境唯一标识 会被父节点default所设置-->
<environment id="development">
<!-- 事务管理器 -->
<!-- JDBC – 这个配置直接使用了 JDBC 的提交和回滚功能,它依赖从数据源获得的连接来管理事务作用域。-->
<!-- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)-->
<transactionManager type="JDBC"/>
<!-- 数据源
UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
POOLED– Mybatis自带的连接池 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
JNDI – 可以在Tomcat中使用 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。这种数据源配置只需要两个属性:
对应实现类可以在 Configuration.java中查看
-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<property name="url" value="${url}"/>
<!-- <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>-->
<property name="username" value="${username}"/>
<!-- <property name="username" value="root"/>-->
<property name="password" value="${password}"/>
<!-- <property name="password" value="root"/>-->
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--type="DB_VENDOR" 利用数据库的厂商名称来区分 用于跨数据库平台-->
<!-- 步骤1、为需要跨数据库设置不同的厂商名称
2、编写不同的SQL databaseID 必须设置厂商的value
-->
<databaseIdProvider type="DB_VENDOR">
<!-- <property name="SQL Server" value="sqlserver"/>-->
<!-- <property name="DB2" value="db2"/>-->
<property name="Oracle" value="oracle" />
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
<!-- <select id="selectEmp" resultType="Emp" databaseId="mysql"> 在mapper.xml中 设置databaseId="mysql"-->
<!-- 设置映射器 有4种映射方式
mapper的三种
1、resource 设置MapperXML 适用根据statementid进行操作
2、class 设置Mapper接口 这种方式适用接口绑定方式
3、url 使用磁盘的 绝对路径几乎不用
package
4、name 根据包名设置接口 将包内的映射器接口全部注册为映射器
-->
<mappers>
<!-- <mapper resource="EmpMapper.xml"/>-->
<mapper class="com.kdy.mapper.EmpMapper"></mapper>
</mappers>
</configuration>
2、XML映射器
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--XML 映射器-->
<!--Mybatis 真正强大 在于它的语句映射 MyBatis致力于减少使用成本,让用户能专注于SQL代码 -->
<!--根节点 -->
<!--namesapce属性 命名空间 一般 一个Mapper对应不同的一个命名空间 利于后期管理维护
默认情况下可以随意输入 但是如果使用接口绑定方式 必须输入对应的接口的完整限定名
-->
<mapper namespace="com.kdy.mapper.EmpMapper">
<select id="selectEmp" resultType="Emp" databaseId="mysql">
SELECT id,username as uname FROM emp WhERE id=#{id}
</select>
</mapper>
3、@Alias 注解
package com.kdy.pojo;
import org.apache.ibatis.type.Alias;
//@Alias("Emp2")
public class Emp {
Configuration.java 中 别名对应实现类
public Configuration() {
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);
typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class);
typeAliasRegistry.registerAlias("FIFO", FifoCache.class);
typeAliasRegistry.registerAlias("LRU", LruCache.class);
typeAliasRegistry.registerAlias("SOFT", SoftCache.class);
typeAliasRegistry.registerAlias("WEAK", WeakCache.class);
typeAliasRegistry.registerAlias("DB_VENDOR", VendorDatabaseIdProvider.class);
typeAliasRegistry.registerAlias("XML", XMLLanguageDriver.class);
typeAliasRegistry.registerAlias("RAW", RawLanguageDriver.class);
typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class);
typeAliasRegistry.registerAlias("COMMONS_LOGGING", JakartaCommonsLoggingImpl.class);
typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class);
typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class);
typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class);
typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class);
typeAliasRegistry.registerAlias("NO_LOGGING", NoLoggingImpl.class);
typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class);
typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class);
languageRegistry.setDefaultDriverClass(XMLLanguageDriver.class);
languageRegistry.register(RawLanguageDriver.class);
}