zoukankan      html  css  js  c++  java
  • Idea---SpringBoot整合Mybatis问题整理

    1.数据库连接失败

    错误提示关键词:"Server returns invalid timezone","setTimeZone"

    我的解决过程:

    (1)登录mysql:mysql -uroot -p;然后输入密码

    (2)查看mysql中设置的时区值:show variables like '%time_zone%'; (要加分号),默认System

    (3)设置时区值:set global time_zone='+8:00';  (加分号)

    (4)编辑环境变量:变量值 MYSQL_HOME,变量值 C:Program FilesMySQLMySQL Server 5.7

    (5)在path中新建变量%MYSQL_HOME%in

    2.mapper自动注入失败

    2.1错误提示关键词

    (1)Failed to load ApplicationContext

    (2)No qualifying bean of type 'com.example.mapper.ArticleMapper' available

    2.2解决过程:在application类中加入注解@MapperScan("com.example.mapper");

    (1)检查Mapper接口的@Repository(实践之后发现它不是原因)@Mapper注解

    (2)检查Mapper.xml文件中的类名,列明,对象属性名是否有错写或漏写(namespace,resultMap,type,paramType之类的hhh

    <?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">
            <!--namespace为Mapper接口的类路径-->
    <mapper namespace="com.example.mapper.ArticleMapper" >
        <!-- 1、对应“public Article findArticleById(Integer id)” -->
        <select id="findArticleById" resultMap="articleWithComments">
            SELECT a.*,c.id c_id,c.content c_content,c.author,c.a_id c_aid
            FROM t_article a
                     LEFT JOIN t_comment c
                               ON a.id=c.a_id
            WHERE a.id=#{id}
        </select>
        <!--结果映射集-->
        <resultMap id="articleWithComments" type="Article">
            <id property="id" column="id" />
            <result property="title" column="title" />
            <result property="content" column="content" />
            <collection property="commentList" ofType="Comment">
                <id property="id" column="c_id" />
                <result property="content" column="c_content" />
                <result property="author" column="author" />
                <result property="aId" column="c_aid" />
            </collection>
        </resultMap>
        <!-- 3、对应“public int insertArticle(Article article)” -->
        <insert id="insertArticle" parameterType="Article">
            insert into t_article(title,content)
            values(#{title},#{content})
        </insert>
        <!-- 4、对应“public int updateArticle(Article article)” -->
        <update id="updateArticle" parameterType="Article" >
            UPDATE t_article
            <set>
                <if test="title !=null and title !=''">
                    title=#{title},
                </if>
                <if test="content !=null and content !=''">
                    content=#{content}
                </if>
            </set>
            WHERE id=#{id}
        </update>
    </mapper>
    

      

    (3)检查全局配置文件是否加载Mapper文件

    #配置MyBatis的映射文件路径
    mybatis.mapper-locations=classpath:mapper/*.xml
    #配置映射文件中指定的实体类别名路径
    mybatis.type-aliases-package=com.example.domain
    

      

    2.3测试类

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Chapter05Application.class)
    class Chapter05ApplicationTest {
    
        @Resource
        private ArticleMapper articleMapper;
    
        @Test
        void insertArticle() {
            System.out.print(articleMapper);
            Article article=articleMapper.findArticleById(1);
            System.out.print(article);
    
        }
    }
    

      

    3.servies自动注入失败

    3.1错误提示关键词:

    (1)Could not autowire. No beans of 'ArticleService' type found. 

    (2)Error creating bean with name 'com.example.chapter05.Chapter05ApplicationTest'

    (3) No qualifying bean of type 'com.example.services

    3.2我的解决过程:在application类中加入注解@MapperScan("com.example.mapper")(保证Mapper成功注入才能继续解决Service问题)@ComponentScan("com.example.services");

    3.3排错试错的暴躁之旅QAQ

    (1)检查Mapper接口的@Repository(实践之后发现它不是原因)@Mapper注解

    (2)检查service实现类中的@Service注解

    (3)检查Mapper.xml文件中的类名,列明,对象属性名是否有错写或漏写

    (4)检查全局配置文件是否加载Mapper文件

    (5)mapper是否注入成功

    (6)Test类中@RunWith(SpringRunner.class),@SpringBootTest(classes = Chapter05Application.class)

    3.4测试类

    @Resource
        private ArticleService articleService;
        @Test
        void addArticle(){
            System.out.print(articleService);
            articleService.addArticle();
    
        }
    

      

    哦哦!还有pom.xml文件该有都有,不该有的都没有

     emmmm。。。。好吧这是一周后发现上述辣些问题大概是因为项目结构的问题。。。。

    改过之后的项目结构,把启动类放在了与其他mapper包,service包的同一级(之前的包名:com,example.chapter05)

     改过之后就能避免很多上面奇奇怪怪的问题,之后跟redis整合也能避免相似的问题。。。。。。

  • 相关阅读:
    ps4 如何导出切片 单个图片
    测试webservice的时候,如果出现这个错误:"The test form is only available for requests from the local machine"
    js jquery 按钮点击后 60秒之后才能点击 60秒倒计时
    有空研究一下 superwebsocket (底层是 supersocket) 用来实现 web聊天什么的
    Vue学习笔记一:初识Vue
    被爬虫了,嘻嘻嘻
    Mybatis-generator自动生成器
    SpringCloud笔记五:Feign
    SpringCloud笔记四:Ribbon
    SpringCloud笔记三:Eureka服务注册与发现
  • 原文地址:https://www.cnblogs.com/Rong-Xiu/p/14681949.html
Copyright © 2011-2022 走看看