四、properties以及别名定义

 上一篇博客我们介绍了mybatis的增删改查入门实例,我们发现在 mybatis-configuration.xml 的配置文件中,对数据库的配置都是硬编码在这个xml文件中,如下图,那么我们如何改进这个写法呢?

  

回到顶部

1、我们将 数据库的配置语句写在 db.properties 文件中


1

2

3

4

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/ssm

jdbc.username=root

jdbc.password=root

回到顶部

2、在  mybatis-configuration.xml 中加载db.properties文件并读取


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- 加载数据库属性文件 -->

<properties resource="db.properties">

</properties>

 <environments default="development">

    <environment id="development">

      <transactionManager type="JDBC"/>

      <!--dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象源  -->

      <dataSource type="POOLED">

        <property name="driver" value="${jdbc.driver}"/>

        <property name="url" value="${jdbc.url}"/>

        <property name="username" value="${jdbc.username}"/>

        <property name="password" value="${jdbc.password}"/>

      </dataSource>

    </environment>

  </environments>

</configuration>

  

  如果数据库有变化,我们就可以通过修改 db.properties 文件来修改,而不用去修改 mybatis-configuration.xml 文件

注意:我们也可以在<properties></properties>中手动增加属性


1

2

3

4

<!-- 加载数据库属性文件 -->

<properties resource="db.properties">

    <property name="username" value="aaa"/>

</properties>

  那么这个时候是读取的username 是以 db.properties 文件中的 root 为准,还是以自己配置的 aaa 为准呢?

我们先看一段 properties 文件加载的源码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

private void propertiesElement(XNode context) throws Exception {

  if (context != null) {

    /**

     *  解析properties 属性中指定的属性。

     */

    Properties defaults = context.getChildrenAsProperties();

    String resource = context.getStringAttribute("resource"); //resource 制定的属性路径

    String url = context.getStringAttribute("url"); //url制定的属性路径

    if (resource != null && url != null) {

      throw new BuilderException("The properties element cannot specify both a URL and a resource based property file reference.  Please specify one or the other.");

    }

    /**

     * 根据 properties 元素中的 resource 属性读取类路径下属性文件,并覆盖properties 属性中指定的同名属性。

     */

    if (resource != null) {

      defaults.putAll(Resources.getResourceAsProperties(resource));

    else if (url != null) {

      /**

       * 根据properties元素中的url属性指定的路径读取属性文件,并覆盖properties 属性中指定的同名属性。

       */

      defaults.putAll(Resources.getUrlAsProperties(url));

    }

    /**

     *  获取方法参数传递的properties

     *  创建XMLConfigBuilder实例时,this.configuration.setVariables(props);

     */

    Properties vars = configuration.getVariables();

    if (vars != null) {

      defaults.putAll(vars);

    }

    parser.setVariables(defaults);

    configuration.setVariables(defaults);

  }

}

回到顶部

通过源码我们可以分析读取优先级:

    1、在 properties 内部自定义的属性值第一个被读取

    2、然后读取 resource 路径表示文件中的属性,如果有它会覆盖已经读取的属性;如果 resource 路径不存在,那么读取 url 表示路径文件中的属性,如果有它会覆盖第一步读取的属性值

    3、最后读取 parameterType 传递的属性值,它会覆盖已读取的同名的属性

  前面两步好理解,第三步我们可以举个例子来看:

    我们在 userMapper.xml 文件中进行模糊查询


1

2

3

4

<select id="selectLikeUserName" resultType="com.ys.po.User" parameterType="String">

    select * from user where username like ‘%${jdbc.username}%‘

    <!-- select * from user where username like #{username} -->

</select>

    这个时候你会发现无论你后台传给这个查询语句什么参数,都是 select * from user where username like ‘%root%‘

    

mybatis 的别名配置  

  在 userMapper.xml 文件中,我们可以看到resultType 和 parameterType 需要指定,这这个值往往都是全路径,不方便开发,那么我们就可以对这些属性进行一些别名设置

  

回到顶部

1、mybatis 默认支持的别名

  

  

回到顶部

2、自定义别名  

  一、定义单个别名

    首先在全局配置文件 mybatis-configuration.xml 文件中添加如下配置:是在<configuration>标签下


1

2

3

4

<!-- 定义别名 -->

<typeAliases>

    <typeAlias type="com.ys.po.User" alias="user"/>

</typeAliases>

    第二步通过 user 引用

  

  二、批量定义别名

    在全局配置文件 mybatis-configuration.xml 文件中添加如下配置:是在<configuration>标签下


1

2

3

4

5

<!-- 定义别名 -->

<typeAliases>

    <!-- mybatis自动扫描包中的po类,自动定义别名,别名是类名(首字母大写或小写都可以,一般用小写) -->

    <package name="com.ys.po"/>

</typeAliases>

    引用的时候类名的首字母大小写都可以

原文地址:https://www.cnblogs.com/zhoanghua/p/9292188.html

时间: 2024-10-20 14:50:24

四、properties以及别名定义的相关文章

mybatis 详解(四)------properties以及别名定义

上一篇博客我们介绍了mybatis的增删改查入门实例,我们发现在 mybatis-configuration.xml 的配置文件中,对数据库的配置都是硬编码在这个xml文件中,如下图,那么我们如何改进这个写法呢? 1.我们将 数据库的配置语句写在 db.properties 文件中 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm jdbc.username=root jdbc.password=

在properties.xml中定义变量,在application.xml中取值问题

如果为application.xml中的变量赋默认值,同时又在properties.xml中变量赋值,而加载后是取不到properties.xml中的值的问题. 解决这个问题需要加上黑体部分配置: <bean id="sysConfiguration" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property na

oracle sql 基础(四):数据定义语言(创建和管理表、视图)

数据定义语言 (Data Definition Language, DDL) 是SQL语言集中负责数据结构定义与数据库对象定义的语言,由CREATE.ALTER与DROP三个语法所组成.数据库对象包括表.视图.索引.同义词.序列等(TABLE/VIEW/INDEX/SYN/SEQUENCE).我们先对创建和管理表和视图进行一个介绍. 一.创建和管理表 数据表是数据库中一个非常重要的对象,是其他对象的基础.可分为用户表和数据字典两类. 1.创建表(CREATE TABLE) CREATE TABL

Java Load Properties 文件,定义message信息

初始化Properties对象,load properties文件: private static final Properties MESSAGERESOURCES = new Properties(); static { try { MESSAGERESOURCES.load(ClassLoader.getSystemResourceAsStream("/messages.properties")); MessageFormat.format("", "

C#编程(四十一)----------用户定义的数据类型转换

用户定义的数据类型转换 C#允许定义自己的 数据类型,这意味着需要某些 工具支持在自己的数据类型间进行数据转换.方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明为隐式或者显式,以说明怎么使用它. C#允许用户进行两种定义的数据类型转换,显式和隐式,显式要求在代码中显式的标记转换,其方法是在原括号中写入目标数据类型. 对于预定义的数据类型,当数据类型转换时可能失败或者数据丢失,需要显示转换: 1.把int数值转换成short时,因为short可能不够大,不能包含转换的数值.

iBatis.Net系列(四)-properties.config

在上一节中我们说到使用核心文件sqlmap.config的properties节点来引用另外的配置文件,这个配置文件就是properties.config,我们一般把 数据库驱动.数据库连接字符串.sql语句映射文件的路径 存放在这个文件中,方便统一管理. 我们在上一节中 1 配置数据库驱动是这样写的 <provider name="sqlServer4.0"/> 我们觉得吧sqlServer4.0这样的驱动写在核心文件中不太科学, 2 数据库连接字符串是这样配置的 <

JBPM工作流(四)——管理流程定义

概念: ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程.报销流程.是一个规则. ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程步骤的信息.没有更新操作,启动流程实例时是使用指定key的最新的版本. 1.部署流程定义 a)一次添加一个资源,相关文件在Classpath中 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 // 1,部署流程定义(添加)     // jbpm4_deployment     //

四、基础服务定义与基本实现

core只暴露RPC服务,不提供web服务 这种建模风格,在数据库不构建外键,只通过程序来保证外键的逻辑 1.领域与数据访问 2.RPC服务 3.基础服务演示 原文地址:https://www.cnblogs.com/LiveYourLife/p/8427501.html

别名的定义、传递、返回对象

&的功能: (1)取地址符 (2)引用符 一.定义别名 定义变量的别名 如,int n ; int &m =n; //m是n 的别名  ,可以用int类型的m来表示int类型的n.且m与n的地址也一样.故m 和 n 是同一个东西! 定义对象的别名 如:Human Mike; Human &rMike = Mike; //rMike是Mike的别名  二.空引用 指针进行删除之后,需要将它赋值为空,引用却不需要这样做.假如该对象存放在栈中,那么在对象超出作用域时别名会和对象一起消失: