Mybatis系列(三)Mybatis-全局配置文件
文章目录
一、Mybatis配置
配置文档顶层目录:
1.1、properties(属性)
作用:可以导入外部配置文件,resource表示导入类路径下的配置文件,url表示导入磁盘路径或者服务路径下的文件。可以在 properties 元素的子元素property中设置属性,但是相对来说优先级最低,连接数据库正确的username和password都是root,如下:
<properties resource="jdbc.properties">
<property name="username" value="root"/>
<property name="password" value="root123"/>
</properties>
优先级比直接在property中配置的属性高一级的是在外部配置文件中的配置,它会覆盖在property中配置的同名的属性,如下:
#username=root
#password=root
url=jdbc:mysql://localhost:3306/mybatis
driver=com.mysql.jdbc.Driver
优先级最高的是直接在构建SqlSessionFactory中指定的property属性,如下:
@Before
public void SqlSessionFactory() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
Properties properties = new Properties();
properties.setProperty("password" , "root");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream , properties);
}
因此如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
- 首先读取在 properties 元素体内指定的属性。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。
1.2、settings(设置)
官方文档
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
一个配置完整的 settings 元素的示例如下:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
- 测试mapUnderscoreToCamelCase设置
是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。
数据库的字段login_account
javaBean:
private Integer id;
private String empName;
private String email;
private Integer gender;
private String loginAccount;
mybatis的setting配置:
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
测试代码
@Test
public void testMybatisSelect(){
//获取与数据库的一次会话
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
EmployeeDao employeeDao = sqlSession.getMapper(EmployeeDao.class);
Employee employee = employeeDao.getEmployeeByID(1);
System.out.println("查询到的员工为:" + employee);
}finally {
sqlSession.close();
}
}
测试结果:
查询到的员工为:Employee{id=1, empName='wangwu', email='wangwu@163.com', gender=1, loginAccount='111111'}
1.3、typeAliases(类型别名)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:
<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>
当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
<typeAliases>
<package name="domain.blog"/>
</typeAliases>
每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:
@Alias("author")
public class Author {
...
}
下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
1.4、mappers(映射器)
要找到接口对应的sql语句,我们必须要告诉mybatis去哪个地方找这个xml,因此mybatis提供了三种方式,如下:
- 使用相对于类路径的资源引用
<mapper resource="mapper/EmployeeDao.xml"/>
- 使用完全限定资源定位符(URL)
//这种方式下xml文件与接口必须在同一个包并且需要同名
<mapper class="com.cetc.dao.EmployeeDao"/>
- 使用映射器接口实现类的完全限定类名
//磁盘路径或者网络路径
<mapper url="file:///D://EmployeeDao.xml"/>
- 将包内的映射器接口实现全部注册为映射器
此种方式可以进行批量注册,但是首先得保证接口与xml得在同一个路径下并且需要同名,只是后缀不同,但是放在同一个路径下可能造成视觉混乱,因此我们可以在资源包config下创建与dao同名的包,然后将xml放到下面,这样项目在发布时会与接口放在同一个路径下。
<mappers>
<package name="com.cetc.dao"/>
</mappers>