【mybatis】開發中遇到的一些問題小結

#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);

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章