官方文档
作用:可以导入外部配置文件,resource表示导入类路径下的配置文件,url表示导入磁盘路径或者服务路径下的文件。可以在 properties 元素的子元素property中设置属性,但是相对来说优先级最低,连接数据库正确的username和password都是root,如下:
优先级比直接在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 将按照下面的顺序来加载:
官方文档
这是 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>
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='[email protected]', gender=1, loginAccount='111111'}
类型别名可为 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 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
要找到接口对应的sql语句,我们必须要告诉mybatis去哪个地方找这个xml,因此mybatis提供了三种方式,如下:
<mapper resource="mapper/EmployeeDao.xml"/>
//这种方式下xml文件与接口必须在同一个包并且需要同名
<mapper class="com.cetc.dao.EmployeeDao"/>
//磁盘路径或者网络路径
<mapper url="file:///D://EmployeeDao.xml"/>
<mappers>
<package name="com.cetc.dao"/>
mappers>