#1-> 配置文件MyBatisConfg.xml
在配置文件中的<configuration>里的标签有严格的标签摆放顺序,如果顺序不对,会报错。
例如,我之前把<settings>标签放在了<properties>标签之前,系统报错如下
<configuration>标签里的严格顺序应该是:
properties -> settings -> typeAliases -> typeHandlers -> objectFactory -> objectWrapperFactory -> reflectorFactory -> plugins -> environments -> databaseIdProvider -> mappers
-> MyBatisConfg.xml
<?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="mysqlconfg.properties"/>
<!--日志配置-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--配置mysql的环境-->
<environments default="mysql">
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"/>
<!--配置连接池/数据源类型-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--配置映射关系-->
<mappers>
<mapper resource="com/yy/dao/IUserMapper.xml"/>
</mappers>
</configuration>
-> mysqlconfg.properties
注意MySQL6以后的driver写法和5之前的有点区别。
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost/maven_db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
username = root
password = 1007
#2-> 映射文件IUserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yy.dao.IUserMapper">
<select id="findAll" resultType="com.yy.domain.User">
select * from user;
</select>
</mapper>
需要注意的是这里的resultType必须指定全限定类名,不能写别称,之前的项目可以写别称是因为添加了扫描机制。
#3-> DAO层的mapper接口里有多个参数
原始的DAO接口文件IndicatorMapper.java如下
package com.indicator.dao;
import com.indicator.domain.IndicatorRecord;
import java.util.List;
public interface IndicatorMapper {
public List<IndicatorRecord> getAllList(String sale_channel, String date);
}
直接运行,会报错 Cause: org.apache.ibatis.binding.BindingException: Parameter 'sale_channel' not found. Available parameters are [arg1, arg0, param1, param2]
解决方法
接口文件里,有多个参数的时候用@Param注解的方式传参
package com.indicator.dao;
import com.indicator.domain.IndicatorRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface IndicatorMapper {
// 分管总队伍指标查询
// 多个参数的时候用@Param注解的方式传参
public List<IndicatorRecord> getAllList(@Param("sale_channel") String sale_channel,
@Param("date") String date);
}