mybatis-配置

mybatis的配置都写在核心配置文件 mybatis-config.xml 中,这个文件包含了会深深影响 MyBatis 行为的设置和属性信息。

所有配置的内容如下:

configuration(配置)

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

在配置文件中的配置必须按照以上顺序,否则会报错

mybatis-配置

属性(properties)

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置

第一步:在资源目录下新建一个 db.properties 属性配置文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?createDatabaseIfNotExist=true&useSSL=false
username=root
password=123456

第二步:将 properties 属性文件导入到核心配置文件中

<properties resource="db.properties"/>

<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>

注意:除了以上方式以外还可以将属性设置在 properties 元素的子元素中,并且当两种方式的属性出现同名时,会优先采用上面那种方式设置的属性

<properties resource="db.properties">
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</properties>

设置(settings)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为.

类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写.

第一种:这样配置后,可以在任何使用 com.lv.pojo.User 的时候用 user 代替它,好处是可以DIY名字.

<typeAliases>
    <typeAlias type="com.lv.pojo.User" alias="user"/>
</typeAliases>

第二种:指定一个包名,mybatis 会搜索包下所有的 java bean 在没有注解的情况下,将它的首字母小写的非限定类名作为它的别名,好处是java bean过多时可以简化代码

<typeAliases>
    <package name="com.lv.pojo"/>
</typeAliases>

如果想DIY别名可以在javabean加上注解,它的别名就会变成注解中设置的名字

//实体类
@Alias("cnm")
public class User {
    private int id;
    private String name;
    private String pwd;
}

类型处理器(typeHandlers)

MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。

对象工厂(objectFactory)

每次 MyBatis 创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成实例化工作。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认无参构造方法,要么通过存在的参数映射来调用带有参数的构造方法。 如果想覆盖对象工厂的默认行为,可以通过创建自己的对象工厂来实现。

环境配置 (environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中,必须指定一个作为默认的运行环境(通过default指定)

environment 代表具体的一套环境,通过设置id进行区别,确保id唯一性

transactionManager 事务管理器(type="[JDBC|MANAGED]")

JDBC : 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。

MANAGED : 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。

dataSource 数据源(type="[UNPOOLED|POOLED|JNDI]")

dataSource元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

unpooled: 这个数据源的实现只是每次被请求时打开和关闭连接。

pooled: 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。

jndi:这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。 

数据源也有很多第三方的实现,比如dbcp,c3p0,druid等等...

<environments default="test">
    <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>
    <environment id="test">
        <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)

定义映射sql语句文件

mapper文件引入的四种方式

第一种方式:

<!--    使用相对于类路径的资源引用-->
    <mappers>
        <mapper resource="com/lv/dao/UserMapper.xml"/>
    </mappers>

第二种方式:

<!--    使用完全限定资源定位符(URL)file:/// 后面写绝对路径-->
    <mappers>
        <mapper url="file:///C:\Users\xxx\IdeaProjects\mybatis-Study\mybatis-04\src\main\java\com\lv\dao\UserMapper.xml"/>
    </mappers>

第三种方式:

<!--    使用映射器接口实现类的完全限定类名 需要配置文件名称和接口名称一致,并且位于同一目录下-->
    <mappers>
        <mapper class="com.lv.dao.UserMapper"/>
    </mappers>

第四种方式:

<!--    将包内的映射器接口实现全部注册为映射器,但是需要配置文件名称和接口名称一致,并且位于同一目录下-->
    <mappers>
        <package name="com.lv.dao"/>
    </mappers>

mapper文件的编写

namespace中文意思:命名空间,作用如下:
1. namespace和子元素的id联合保证唯一 , 区别不同的mapper
2. 绑定DAO接口,namespace的命名必须跟某个接口同名,接口中的方法与映射文件中sql语句id应该一一对应
3. namespace命名规则 : 包名+类名

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lv.dao.UserMapper">

</mapper>
上一篇:MySQL的分布式(XA)事务


下一篇:idea中 配置文件运行中文乱码解决方法