Mybatis系列(三)Mybatis-全局配置文件

Mybatis系列(三)Mybatis-全局配置文件

文章目录

  • Mybatis系列(三)Mybatis-全局配置文件
  • 一、Mybatis配置
    • 1.1、properties(属性)
    • 1.2、settings(设置)
    • 1.3、typeAliases(类型别名)
    • 1.4、mappers(映射器)


一、Mybatis配置

官方文档

配置文档顶层目录:
Mybatis系列(三)Mybatis-全局配置文件_第1张图片

1.1、properties(属性)

作用:可以导入外部配置文件,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 将按照下面的顺序来加载:

  • 首先读取在 properties 元素体内指定的属性。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
    因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。

1.2、settings(设置)

官方文档
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
Mybatis系列(三)Mybatis-全局配置文件_第2张图片
一个配置完整的 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>
  1. 测试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='[email protected]', 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 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
Mybatis系列(三)Mybatis-全局配置文件_第3张图片

1.4、mappers(映射器)

要找到接口对应的sql语句,我们必须要告诉mybatis去哪个地方找这个xml,因此mybatis提供了三种方式,如下:

  1. 使用相对于类路径的资源引用
<mapper resource="mapper/EmployeeDao.xml"/>
  1. 使用完全限定资源定位符(URL)
//这种方式下xml文件与接口必须在同一个包并且需要同名
<mapper class="com.cetc.dao.EmployeeDao"/>
  1. 使用映射器接口实现类的完全限定类名
//磁盘路径或者网络路径
<mapper url="file:///D://EmployeeDao.xml"/>
  1. 将包内的映射器接口实现全部注册为映射器
    此种方式可以进行批量注册,但是首先得保证接口与xml得在同一个路径下并且需要同名,只是后缀不同,但是放在同一个路径下可能造成视觉混乱,因此我们可以在资源包config下创建与dao同名的包,然后将xml放到下面,这样项目在发布时会与接口放在同一个路径下。
<mappers>
   <package name="com.cetc.dao"/>
mappers>

你可能感兴趣的:(mybatis,java,后端)