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 Files\MySQL\MySQL Server 5.7

 

 

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

 

 

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整合也能避免相似的问题。。。。。。

 

posted @ 2021-04-20 17:18  筱菜鸟  阅读(87)  评论(0编辑  收藏  举报