V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ukipoi
V2EX  ›  Java

Mybatis 的问题,我按照原本的格式写一个操作为什么原先的能成功,而我的不管怎样都会失败呢?

  •  
  •   ukipoi · 2018-10-30 14:03:27 +08:00 · 2087 次点击
    这是一个创建于 2224 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个项目 Dao 是单独一个项目,然后打成 jar 包添加到 maven。在后台项目里从 maven 引入的。 我想在 Dao 里加一个操作,但是就很简单的查询也会失败。 模仿的样例:
    AppUserMapper.java

    public interface AppUserMapper {
        //......
        AppUser selectByPrimaryKey(String id);
        //......
    }
    

    AppUserMapper.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="XXX.dao.AppUserMapper">
      <resultMap id="BaseResultMap" type="XXX.entity.AppUser">
        <!--实体类映射-->
      </resultMap>
    
      <sql id="Base_Column_List">
        <!--查询的值-->
      </sql>
      <!--省略-->
      <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
        select 
        <include refid="Base_Column_List" />
        from app_user
        where id = #{id,jdbcType=VARCHAR}
      </select>
      <!--省略-->
    </mapper>
    

    自己写的:
    GoodsOff.java

    package XXX.entity;
    
    import java.io.Serializable;
    
    public class GoodsOff implements Serializable {
        private int id;
        private String goodsId;
        private float off;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getGoodsId() {
            return goodsId;
        }
    
        public void setGoodsId(String goodsId) {
            this.goodsId = goodsId;
        }
    
        public float getOff() {
            return off;
        }
    
        public void setOff(float off) {
            this.off = off;
        }
    }
    

    GoodsOffMapper.java

    package XXX.dao;
    
    import XXX.entity.GoodsOff;
    
    public interface GoodsOffMapper {
        GoodsOff selectByPrimaryKey(String goodsId);
    }
    

    GoodsOffMapper.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="XXX.dao.GoodsOffMapper">
      <resultMap id="BaseResultMap" type="XXX.entity.GoodsOff">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="goods_id" jdbcType="VARCHAR" property="goodsId" />
        <result column="off" jdbcType="FLOAT" property="off" />
      </resultMap>
      <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
        select
        *
        from hbmm_goodsoff
        where goods_id = #{goodsId,jdbcType=VARCHAR}
      </select>
    </mapper>
    

    我数据库里的表:

    REATE TABLE `hbmm_goodsoff` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `goods_id` varchar(64) CHARACTER SET utf8mb4 DEFAULT NULL,
      `off` float DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
    
    
    xiaoxinshiwo
        1
    xiaoxinshiwo  
       2018-10-30 14:10:18 +08:00
    报错信息贴一下啊大胸弟
    Starry
        2
    Starry  
       2018-10-30 14:10:38 +08:00
    是不是包名路径不一样,自动扫描扫不到你的 DAO 和 XML 文件
    ukipoi
        3
    ukipoi  
    OP
       2018-10-30 14:24:36 +08:00
    @xiaoxinshiwo
    不好意思,错误信息是下面这样的</br>
    ```error
    十月 30, 2018 2:22:44 下午 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet [mvc] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
    ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'bar.hbmm_goodsoff' doesn't exist
    ### The error may exist in class path resource [com/youzhuo/bar/mapping/mybatis/GoodsOffMapper.xml]
    ### The error may involve com.youzhuo.bar.dao.mybatis.GoodsOffMapper.selectByPrimaryKey-Inline
    ### The error occurred while setting parameters
    ### SQL: select * from hbmm_goodsoff where goods_id = ?
    ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'bar.hbmm_goodsoff' doesn't exist
    ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'bar.hbmm_goodsoff' doesn't exist] with root cause
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'bar.hbmm_goodsoff' doesn't exist
    ```
    gejun123456
        4
    gejun123456  
       2018-10-30 14:32:08 +08:00
    不是表不存在么,数据库连接问题? 连到你设置的数据库去看看吧
    ukipoi
        5
    ukipoi  
    OP
       2018-10-30 14:40:53 +08:00
    @gejun123456
    真的是眼瞎了,全局搜索了 jdbc.url 才发现原先的项目有 3 个地方配置了数据库连接,我只改了 1 个。
    谢谢回复
    519718366
        6
    519718366  
       2018-10-30 14:44:02 +08:00
    bar 库下面有这个 hbmm_goodsoff 表?要么你连到其他库去了,要么就是名字打错了什么的?
    xiaoxinshiwo
        7
    xiaoxinshiwo  
       2018-10-30 15:13:49 +08:00
    @ukipoi #5 所以发贴记得贴异常啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2732 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:13 · PVG 17:13 · LAX 01:13 · JFK 04:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.