在mybatis配置文件中各个标签要按照指定顺序编写,如果顺序规范则会报上述错误
顺序为上图中报错信息中的顺序
优化一:重复书写resultType返回值类型的全路径,可以给该全路径起别名,来减少类完全限定名的多余部分
<typeAliases>
<!--给指定的单独的一个类起别名-->
<typeAlias type="com.sw.entity.Flower" alias="flower"></typeAlias>
<!--此时包下的所有类的别名就是其类的名称-->
<package name="com.sw.entity"/>
</typeAliases>
优化二:使用数据库配置文件,比如mysql.properties
m_driver=com.mysql.cj.jdbc.Driver
m_url=jdbc:mysql://localhost:3306/flower?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
m_username=root
m_password=root
<!--读取属性文件,resource采用相对路径-->
<properties resource="jdbc.properties"/>
<!--数据库连接配置-->
<!--底层使用数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="${m_driver}"/>
<property name="url" value="${m_url}"/>
<property name="username" value="${m_username}"/>
<property name="password" value="${m_password}"/>
</dataSource>
优化三:使用log4j输出日志文件
使用日志文件,可以通过不同级别的错误信息进行排查。
log4j的五种级别:①FATAL 严重错误,② ERROR 错误 ③WARN 警告 ④INFO 普通信息⑤DEBUG调试信息
① 使用前,要先导入log4j的jar包
②在src下创建【文件名必须是,这样就会自动在src下寻找该配置文件,不需要加载】log4j.properties,填写以下内容【基本上就是固定写法】
<!--输出日志时,会显示错误级别及以上级别的信息-->
<!--为了防止输出很多冗余,与项目无关的日志信息,可以将全局的错误级别调高-->
<!--写上console,表示在控制台输出,logfile表示在文件中输出,可以只写一个表示只在某个地方输出-->
log4j.rootCategory=error, CONSOLE,LOGFILE
<!--局部配置,如果想要输出某个mapper的错误信息,就要相应的降低其错误级别-->
<!--因为如果不进行局部配置,就会按照全局配置的错误级别进行错误信息的日志输出-->
<!--设置某些mapper输出的错误级别-->
<!--格式如下:log4j.logger.[mapper.xml文件中的namespace]=错误级别-->
log4j.logger.com.sw.mapper.FlowerMapper1=debug
log4j.logger.com.sw.mapper.FlowerMapper2=debug
<!--控制台的输出配置-->
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender <!--导入一个包-->
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<!--引入一个文件-->
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n<!--指定打印格式-->
<!--日志文件的输出配置-->
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender<!--导入一个包-->
log4j.appender.LOGFILE.File=d:/axis.log<!--日志文件的位置-->
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n<!--指定打印格式-->
冗余日志信息
③在mybatis.xml中开启日志
<!--指定mybatis中的日志类型-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
三个优化的mybatis.xml 完整配置信息
<configuration>
<!--读取属性文件-->
<properties resource="jdbc.properties"/>
<!--指定mybatis中的日志类型-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--给实体类配置起别名-->
<typeAliases>
<!--给指定的单独的一个类起别名-->
<!-- <typeAlias type="com.sw.entity.Flower" alias="flower"></typeAlias>-->
<!--此时包下的所有类的别名就是其类的名称-->
<package name="com.sw.entity"/>
</typeAliases>
<environments default="mysql">
<!--Mysql数据库连接-->
<environment id="mysql">
<!-- MyBatis事务管理 -->
<transactionManager type="JDBC"></transactionManager>
<!--底层使用数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="${m_driver}"/>
<property name="url" value="${m_url}"/>
<property name="username" value="${m_username}"/>
<property name="password" value="${m_password}"/>
</dataSource>
</environment>
<!--ORCL数据库连接-->
<environment id="oracal">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
</environments>
<!--进行Mapper文件的扫描-->
<mappers>
<!--resource写的是XML文件所在的目录-->
<mapper resource="com/sw/mapper/FlowerMapper.xml"></mapper>
</mappers>
</configuration>
log4j写法再简化:
如果每创建一个Mapper.xml文件就在log4j中添加一行配置信息,有些繁琐
log4j.logger.com.sw.mapper.FlowerMapper1=debug
log4j.logger.com.sw.mapper.FlowerMapper2=debug
这些xml的namespace统一是以com.sw.mapper开头,所以可以简写为
log4j.logger.com.sw.mapper=debug
<!--等价于log4j.logger.com.sw.mapper.*=debug
表示所有以com.sw.mapper为开头的namespace
因为mapper.xml文件遵从的namespace命名规则是按照包路径来命名的,所以按这种写法[简写]看起来这个好像
凡是在com.sw.mapper包下的所有mapper.xml文件都会生效,但是要注意这个其实是按照其namespace来寻找符合条件的mapper.xml文件,而不是包
-->
举例:如果在com.sw.mapper包下有一个mapper.xml文件的namespace是a.b.XXX,那么这个文件仍然不会生效