helloxusir 2020-07-25
在使用mybatis框架时,会发现几个比较麻烦的问题:
例如在mybatis-config.xml配置文件中的代码
<environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment>
其中的driver、url、username、password等信息需要直接写在配置文件中,不方便使用,也不利于修改。这里可以使用mybatis的属性优化来解决、实现更简洁的操作;
再例如像“com.wong.pojo.User”这样的路径,重复编写显得繁杂,这里就可以使用别名优化的方式来解决;
mybatis的官方文档中,对属性优化是这样描述的:这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。这里抓住一个关键词:动态替换。即我们可以将需要的配置文件单独写在外部的配置文件中,需要时将其引入,并使用“${}”来引用,同样可以达到想要的效果。
例如:我们可以将driver、url、username、password等信息写在db.properties文件中:
driver = com.mysql.jdbc.Driver url = jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8 username = root password = 123456
并且在mybatis-config.xml中导入并使用:
<!--引入外部配置文件--> <properties resource="db.properties" /> ? <!--使用“${}”来引用--> <property name="driver" value="${driver}" /> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/>
这里需要注意一点,我们在mybatis-config.xml添加标签时经常会报错,此时要首先考虑标签的顺序问题,报错如下:
如图所示,正确的顺序应该是"(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)",顺序错误即报错!
java的类型别名主要是为Java类型设置一个比较短的名称,方便使用;
别名的作用仅限于减少类完全限定名的冗余
第一种方式,采用typeAlias。(适合实体类比较少时使用,可以自定义名称)
<!--可以给实体类起别名--> <typeAliases> <typeAlias type="com.wong.pojo.User" alias="user" /> </typeAliases>
第二种方式,采用package方式。(指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean。适合实体类比较多时使用,无法自定义名称,使用时默认名称为这个类类名的首字母小写,官方建议是小写字母,但大写也是可行的)
<!--可以给实体类起别名--> <typeAliases> <package name="com.wong.pojo"/> </typeAliases>
应用:
<!--select查询语句--> <select id="selectUser" resultType="user"> /*使用别名user来替代com.wong.pojo.User*/ select * from user </select>
采用第二种方式时不能自定义名称,但是可以通过注解的方式来实现:
sql语句:
<!--select查询语句--> <select id="selectUser" resultType="hello"> /*使用注解名*/ select * from user </select>
结果也是可行的!