properties
这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。例如:
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="user_name"/>
<property name="password" value="123456"/>
</properties>
然后其中的属性就可以在整个配置文件中被用来替换需要动态配置的属性值。比如:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
这个例子中的 username 和 password 将会由 properties 元素中设置的相应值来替换。 driver 和 url 属性将会由 config.properties 文件中对应的值来替换。这样就为配置提供了诸多灵活选择。
属性也可以被传递到 SqlSessionFactoryBuilder.build()方法中。例如:
qlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
// ... or ...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
- 在 properties 元素体内指定的属性首先被读取。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。
从MyBatis 3.4.2开始,你可以为占位符指定一个默认值。例如:
<dataSource type="POOLED">
<!-- ... -->
<property name="username" value="${username:my_user}"/> <!-- 如果用户名属性不存在,用户名就会变成“my_user” -->
</dataSource>
这个特性默认是关闭的。如果你想为占位符指定一个默认值, 你应该添加一个指定的属性来开启这个特性。例如:
<properties resource="org/mybatis/example/config.properties">
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用这个特性 -->
</properties>
也可以使用
":"
作为属性键(e.g.
db:username
) 或者你也可以在sql定义中使用 OGNL 表达式的三元运算符(e.g.
${tableName != null ? tableName : 'global_constants'}
), 你应该通过增加一个指定的属性来改变分隔键和默认值的字符。例如:
<properties resource="org/mybatis/example/config.properties">
<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- 改变分隔符的默认值 -->
</properties>
<dataSource type="POOLED">
<property name="username" value="${db:username?:my_user}"/>
</dataSource>
也可以使用下面方法配置DATASOURCE,新建mybatis-generator.properties文件
# mybatis generator setting
generator.classPath=D:/jar/maven_jar/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar
generator.mapperConfigFilename=mapper-config.xml
generator.targetProject=d:/workspace/Boot
generator.domainPackage=com.xxx.api.role.domain
generator.mapperPackage=com.xxx.api.role.dao
generator.daoPackage=com.xxx.api.role.dao
新建application.yml文件
# DATASOURCE
jdbc:
dataSourceClassName: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
url: jdbc:mysql://127.0.0.1:3306/hqprjdb?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
databaseName: xxx
serverName: 127.0.0.1
username: root
password: 123456
cachePrepStmts: true
prepStmtsSize: 250
prepStmtsCacheSqlLimit: 2048
userServerPrepStmts: true
新建mybatis-generator-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" ><generatorConfiguration>
<!-- 引入配置文件 -->
<properties resource="mybatis-generator.properties" />
<!-- 指定数据连接驱动jar地址 -->
<classPathEntry location="${generator.classPath}" />
<!-- 一个数据库一个context -->
<context id="BuildingTables" targetRuntime="Mybatis3">
<!-- defaultModelType="hierarchical" -->
<property name="javaFileEncoding" value="UTF-8" />
<property name="suppressTypeWarnings" value="true" />
<!-- jdbc连接 -->
<jdbcConnection driverClass="${jdbc.driverClassName}"
connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}" />
<!-- 类型转换 -->
<javaTypeResolver>
<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成mapxml文件 -->
<sqlMapGenerator targetPackage="${generator.mapperPackage}"
targetProject="${generator.targetProject}/src/main/resources">
<!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.model, true:com.oop.eksp.model.[schemaName] -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成mapxml对应client,也就是接口dao -->
<javaClientGenerator targetPackage="${generator.daoPackage}"
targetProject="${generator.targetProject}/src/main/java" type="XMLMAPPER">
<!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.model, true:com.oop.eksp.model.[schemaName] -->
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
</context>
</generatorConfiguration>
- 感谢您的阅读。如果感觉文章对您有用,麻烦您动动手指点个赞,以资鼓励。谢谢!