MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
Mybatis官方文档:https://mybatis.org/mybatis-3/zh/
上期文章:Mybatis基本项目搭建
文章要点:
属性配置
我们在Mybatis核心配置文件里写配置了数据库的驱动,链接地址,用户名和密码等等配置
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&useSSL=false&characterEncoding=UTF-8&useUnicode=true"/>
<property name="username" value="root"/>
<property name="password" value="123123"/>
</dataSource>
</environment>
</environments>
当我们链接不同的数据库时需要去改写这些配置,那么可不可以动态的改写这些配置呢?当然可以。这里使用属性配置<properties> </properties>
标签,里面就是数据库的一些配置。例如:
<properties resource="db.properties">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&useSSL=false&characterEncoding=UTF-8&useUnicode=true"/>
<property name="username" value="root"/>
<property name="password" value="123123"/>
</properties>
<property></property>
中name和value就是配置的键和值。
这时我们原来数据库配置使用**${}**来获取属性值。
<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>
那么我们可不可以把数据库的配置单独放在一个文件里呢,当然可以,我们在resources目录下新建配置文件db.properties:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/spring?useUnicode=true&useSSL=false&characterEncoding=UTF-8&useUnicode=true
username=root
password=123123
这里面是我们数据库的相关配置。那么我们如何在我们的Mybatis配置文件里面引入它呢。还是使用<properties></properties>
标签,标签里有个属性resource,其值为我们的配置文件路径。这里我们配置如下:
<properties resource="db.properties"/>
而我们的原来的数据库配置依然不变。这时我们运行项目,依然可以成功。
这时如果我们同时写入了外部配置文件和内部配置文件,我们在内部配置文件中写入一个错误的数据库密码,那么哪个会生效呢?
<!--同时引入外部配置和内部配置文件-->
<properties resource="db.properties">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&useSSL=false&characterEncoding=UTF-8&useUnicode=true"/>
<property name="username" value="root"/>
<property name="password" value="123qwe"/>
</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>
我们尝试运行一下,发现报错了,显然当有外部配置文件和内部配置文件时,优先执行内部配置文件。
类型名称简化
当我们在写sql映射语句时,经常会写返回值类型,当返回值为自定义类时,我们就要写一段长长的类限定名,当只有几个sql语句还好,若是一多,就会显得很麻烦,这市场我们可以别名来简化我们的工作。
<typeAliases>
<typeAlias type="com.mirce.pojo.User" alias="user"/>
</typeAliases>
从上面可以看出简化类型名称使用<typeAliases></typeAliases>
标签,里面的<typeAlias></typeAlias>
就是我们用来规定类型别名了,属性type是我们要使用的类,alias就是这个类的别名。以后我们要写返回值类时,直接写这个别名即可。例如之前我们的sql映射语句为:
<delete id="deleteUser" parameterType="com.mirce.pojo.User">
delete from spring.ay_user where id=#{id}
</delete>
使用别名后我们可以这样写:
<!--com.mirce.pojo.User别名为user-->
<delete id="deleteUser" parameterType="user">
delete from spring.ay_user where id=#{id}
</delete>
如果我们的实体类太多,一个一个配置别名太麻烦,我们可以配置一个包名,这个包下所有的类都会有一个别名即这个类的名字,默认首字母小写。Mybatis寻找返回值类型时会扫描这个包下的类。例如我们配置User这个类,所在包为com.mirce.pojo:
<typeAliases>
<package name="com.mirce.pojo"/>
</typeAliases>
sql映射语句为:
<delete id="deleteUser" parameterType="user">
delete from spring.ay_user where id=#{id}
</delete>
Mybatis为常见的类型默认配置了一个别名:
设置
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
Mybatis里有许多设置,如开启缓存(cacheEnabled),指定 MyBatis 所用日志的具体实现(logImpl),具体可以参考官方文档。
映射器
映射器即我们在核心配置文件里注册我们的Mapper文件。我么以前注册文件时默认采用资源路径配置
<mappers>
<mapper resource="com/mirce/dao/UserMapper.xml"/>
</mappers>
除此之外,我们还可以采用接口注册:
<mappers>
<mapper class="com.mirce.dao.UserMapper"/>
</mappers>
使用接口注册需注意Mapper文件要和接口在同一个包内,且Mapper文件名称与接口名称相同。