在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ MyBatis Could not resolve type alias

MyBatis Could not resolve type alias

分成兩個(gè)部分來說,第一部分我們先看報(bào)錯(cuò)信息,第二部分看看代碼邏輯

第一部分:報(bào)錯(cuò)信息:

clipboard.png

大概意思是說找不到我這個(gè)GoShopping,好,然后我們看看代碼

第二部分:代碼邏輯:

  1. 首先先看看我們的 Entity
package entity;

import java.util.Date;

public class GoShopping {
    private long shoppingId;
    private String shoppingName;
    private int shoppingNumber;
    private Date shoppingStartTime;
    private Date shoppingEndTime;
    private Date shoppingCreateTime;

    public long getShoppingId() {
        return shoppingId;
    }

    public void setShoppingId(long shoppingId) {
        this.shoppingId = shoppingId;
    }

    public String getShoppingName() {
        return shoppingName;
    }

    public void setShoppingName(String shoppingName) {
        this.shoppingName = shoppingName;
    }

    public int getShoppingNumber() {
        return shoppingNumber;
    }

    public void setShoppingNumber(int shoppingNumber) {
        this.shoppingNumber = shoppingNumber;
    }

    public Date getShoppingStartTime() {
        return shoppingStartTime;
    }

    public void setShoppingStartTime(Date shoppingStartTime) {
        this.shoppingStartTime = shoppingStartTime;
    }

    public Date getShoppingEndTime() {
        return shoppingEndTime;
    }

    public void setShoppingEndTime(Date shoppingEndTime) {
        this.shoppingEndTime = shoppingEndTime;
    }

    public Date getShoppingCreateTime() {
        return shoppingCreateTime;
    }

    public void setShoppingCreateTime(Date shoppingCreateTime) {
        this.shoppingCreateTime = shoppingCreateTime;
    }

    @Override
    public String toString() {
        return "GoShopping{" +
                "shoppingId=" + shoppingId +
                ", shoppingName='" + shoppingName + '\'' +
                ", shoppingNumber=" + shoppingNumber +
                ", shoppingStartTime=" + shoppingStartTime +
                ", shoppingEndTime=" + shoppingEndTime +
                ", shoppingCreateTime=" + shoppingCreateTime +
                '}';
    }
}
  1. 然后我們寫個(gè) DAO 接口
package dao;

import entity.GoShopping;

import java.util.Date;
import java.util.List;

public interface GoShoppingDAO {

    int reduceShoppingNumber(long shoppingId, Date shoppingTime);


    GoShopping queryById(long shoppingId);


    List<GoShopping> queryAll(int offset, int limit);
}
  1. 接著我們實(shí)現(xiàn)這個(gè)DAO 寫個(gè) Mapper
<?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.shopping.dao.GoShoppingDAO">

    <update id="reduceShoppingNumber">
    update shopping
      set shopping_number = shopping_number - 1
      and shopping_startTime &lt;= #{shoppingTime}
      and shopping_endTime >= #{shoppingTime}
      and shopping_number > 0;
    </update>

    <select id="queryById" resultType="GoShopping" parameterType="long">
        select shopping_id, shopping_name, shopping_number, shopping_startTime, shopping_endTime, shopping_createTime
        from shopping
        where shopping_id = #{shoppingId}
    </select>

    <select id="queryAll" resultType="GoShopping">
        select shopping_id, shopping_name, shopping_number, shopping_startTime, shopping_endTime, shopping_createTime
        form shopping
        order by shopping_createTime desc
        limit #{offset}, #{limit}
    </select>

</mapper>

這里就有個(gè)問題了!

clipboard.png

在 mapper 中的 namespace 中,并沒有 shopping 這個(gè)路徑存在 ?。?!WTF,我們原想的路徑是 com.shopping.dao.GoShoppingDAO,BUT?。?,其實(shí)這個(gè) shopping 在這里根本就沒有找到!好,我們看些MyBatis的相關(guān)配置文件以及整合的相關(guān)配置文件

  1. MyBatis 全局配置

<?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>

<!-- 配置全局屬性 -->
<settings>
    <!-- 使用 JDBC 的 getGeneratedKeys 獲取數(shù)據(jù)庫自增主鍵值 -->
    <setting name="useGeneratedKeys" value="true"/>

    <!-- 使用列別名替換別名 默認(rèn)是 true-->
    <setting name="useColumnLabel" value="true"/>

    <!-- 開啟駝峰命名轉(zhuǎn)換 吧 user_Controller 通過駝峰命名規(guī)范轉(zhuǎn)換成 userController -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

</configuration>

  1. Spring和MyBatis整合
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 配置整合 MyBatis 過程 -->
    <!-- 1、配置數(shù)據(jù)庫相關(guān)參數(shù) -->
    <context:property-placeholder location="classpath:jdbc.properties" system-properties-mode="NEVER"/>

    <!-- 2、數(shù)據(jù)庫連接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 配置連接池屬性 -->
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!-- c3p0 連接池配置 -->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
        <property name="autoCommitOnClose" value="false"/>

        <!-- 超時(shí)時(shí)間 -->
        <property name="checkoutTimeout" value="0"/>

        <!-- 獲取鏈接失敗后重新嘗試的次數(shù) -->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>

    <!-- 3、配置 SQLSessionFactory 對象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入數(shù)據(jù)庫連接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置 MyBaits 全局配置文件 mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!-- 掃描 Entity 包,使用別名 org.seckil.entity.Seckill -> Seckill-->
        <property name="typeAliasesPackage" value="org.seckill.entity"/>

        <!-- 掃描 SQL 配置文件:Mapper 需要的配置文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>

    </bean>

    <!-- 4、配置掃描 DAO 接口包,動(dòng)態(tài)實(shí)現(xiàn) DAO 接口并注入到 Spring 容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入 SQLSessionFactory 過程 -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!-- 給出需要掃描 DAO 接口的包 -->
        <property name="basePackage" value="org.seckill.dao"/>
    </bean>

</beans>

好了,簡單的DAO以及Mapper寫完了,接下來我們用 Junit 來看下報(bào)的錯(cuò)

package dao;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.Date;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class GoShoppingDAOTest {

    @Autowired
    private GoShoppingDAO goShoppingDAO;

    @Test
    public void reduceShoppingNumber() {
        long id = 1;
        Date date = new Date();
        int reduceShopping = goShoppingDAO.reduceShoppingNumber(id, date);
        System.out.println(reduceShopping);
    }

}

好的,接下來我們看看報(bào)錯(cuò)信息,和第一部分一樣,這里直接把錯(cuò)誤信息 Copy 過來

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring/spring-dao.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\Users\Sori\IdeaProjects\shopping\target\classes\mapper\GoShoppingMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'GoShopping'.  Cause: java.lang.ClassNotFoundException: Cannot find class: GoShopping



Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\Users\Sori\IdeaProjects\shopping\target\classes\mapper\GoShoppingMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'GoShopping'.  Cause: java.lang.ClassNotFoundException: Cannot find class: GoShopping
    at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:468)
    at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:343)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    ... 39 more

好了,現(xiàn)在我想的問題是,這個(gè)找不到GoShopping是不是因?yàn)?Mapper 那邊的 namespace 中找不到 shopping 路徑的問題 ?
該怎么解決呢 ?

回答
編輯回答
吢丕

你的dao接口GoShoppingDao的包名是dao,即你的dao全路徑是dao.GoShoppingDao,沒有com.shopping 啊

2018年2月16日 04:18