我们可以通过几个简单的方法对开发中的代码进行优化,如在项目的mybatis配置文件config.xml中 配置properties,配置setting,配置别名。以达到简化代码、优化性能、便于维护的目的。
配置属性(properties)
方法一:在xml中配置
<configuration>
<!-- 方法一:在xml中配置 -->
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/testdb?&useSSL=false&serverTimezone=UTC" />
<!-- <property name="username" value="xxxxxx" /> -->
<property name="password" value="xxxxxx" />
<!-- 开启特效,为占位符指定一个默认值,${username:ut_user},如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user' -->
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
<!-- 为避免冲突,修改默认值的分隔符,${username?:ut_user} -->
<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/>
</properties>
<configuration>
方法二:在外部文件 db.properties 中配置,然后引用进来即可
<configuration>
<!-- 方法二:在外部文件 db.properties 中配置,然后引用进来即可 -->
<!-- 小细节:db.properties中存放k-v对,k-v对不需要打引号,另外,在.properties中不需要转义(在.xml中&需要被转义成&),否则会报错
<properties resource="db.properties"></properties> -->
<configuration>
db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/testdb?&useSSL=false&serverTimezone=UTC
username=xxxxxx
password=xxxxxx
方法三:属性也可以被传递到 SqlSessionFactoryBuilder.build()方法中
<!-- 方法三:属性也可以被传递到 SqlSessionFactoryBuilder.build()方法中
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
// ... 或者 ...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
-->
通过${key}来引用对应的属性值。
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username?:root}" />
<property name="password" value="${password}" />
</dataSource>
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
在 properties 元素体内指定的属性首先被读取。
然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。
在实际使用中,还是推荐通过第二种方法,单独用一个properties文件来配置相关属性较方便。
配置别名
<configuration>
<!-- 配置别名 -->
<typeAliases>
<!-- 单个定义类型别名 -->
<typeAlias type="org.ltx.entity.Person" alias="person" />
<!-- 批量定义类型别名 -->
<!-- 在没有注解的情况下,会使用类的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。
@Alias("author") public class Author { ... } -->
<package name="org.ltx.entity" />
</typeAliases>
......
</configuration>
除了自定义别名外,MyBatis还内置了一些常见类的别名。
配置setting
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
这项配置影响比较大,根据项目的具体情况来考虑,一般不要轻易设置。
在conf.xml中设置.
<settings>
<setting name="cacheEnabled" value="false" />
<setting name="lazyLoadingEnabled" value="false" />
......
</settings>