SpringBoot+MyBatis过程中的问题 以及解决方法

在学习使用SpringBoot的过程中,势必需要与数据库相结合,完成对于数据层面上的操作。在使用Spring+MyBatis时我们需要配置很多繁琐的细节文件,但是SpringBoot的“约定大于配置”的特点,将我们从繁琐的文件配置中解放出来,使我们更加高效的实现开发。
下面就是测试用的代码,以及问题
首先我使用的是Idea的集成开发工具,选择创建的工程是:

项目的目录结构:

SpringBoot+MyBatis过程中的问题 以及解决方法_第1张图片
项目的pom.xml文件(pom文件中引入依赖很容易出错,特别是FreeMarket)



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.1.RELEASE
         
    
    com.doka
    springbootmybatis
    0.0.1-SNAPSHOT
    springbootmybatis
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web-services
        

        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.0.0
         
        
        
            mysql
            mysql-connector-java
        
        
            com.alibaba
            druid
            1.1.10
        

        
        
            org.springframework.boot
            spring-boot-starter-freemarker
        
        
        
            org.projectlombok
            lombok
            1.18.6
        


        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
                src/main/java
                
                    **/*.properties
                    **/*.xml
                
                false
            
            
                src/main/resources
                
                    **/*.*
                
                false
            
        
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

编写普通POJO类:
我使用了Lombok插件,简化了POJO的创建

package com.doka.springbootmybatis.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Animal {
    private Integer aid;
    private String aname;
    private String breed;
    private Integer age;
}

编写MyBatis需要的Mapper:

这里我把XXXMapper.java和XXXMapper.xml放在一个文件夹下

package com.doka.springbootmybatis.mapper;

import com.doka.springbootmybatis.pojo.Animal;

import java.util.List;

public interface AnimalMapper {
    List aniamlList();
}



    

编写Service层:

接口:

package com.doka.springbootmybatis.service;

import com.doka.springbootmybatis.pojo.Animal;

import java.util.List;

public interface AnimalService {

    public List getAnimals();
}

实现类:

package com.doka.springbootmybatis.service;

import com.doka.springbootmybatis.mapper.AnimalMapper;
import com.doka.springbootmybatis.pojo.Animal;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class AnimalServiceImp implements AnimalService {

    @Resource
    private AnimalMapper animalMapper;

    @Override
    public List getAnimals() {
        return animalMapper.aniamlList();
    }
}

Controller类:

package com.doka.springbootmybatis.controller;

import com.doka.springbootmybatis.pojo.Animal;
import com.doka.springbootmybatis.service.AnimalService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("/animal")
public class AnimalController {

    @Autowired
    private AnimalService animalService;

    @RequestMapping("/getAnimal")
    public String getAnimal(Model model){
        List animals = animalService.getAnimals();
        for (Animal animal : animals) {
            System.out.println(animal);
        }
        model.addAttribute("animals", animals);
        return "index";
    }

}

项目配置文件application.yml中数据源的配置:

freeMarker.suffix:.ftl 是为了让访问的时候可以找到以.FTL结尾的文件

#配置数据源
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  freemarker:
    suffix: .ftl

主启动类:加上@MapperScan注解来扫描Mapper包下XXXmaper.xml文件

package com.doka.springbootmybatis;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = "com.doka.springbootmybatis.mapper")
public class SpringbootmybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootmybatisApplication.class, args);
    }

}

 

在浏览器中运行:

运行结果

SpringBoot+MyBatis过程中的问题 以及解决方法_第2张图片

 

出现错误:

错误1:项目文件application.yml文件是将application.propreties文件更改后缀名得到的,需要重新创建.yml文件

java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
。。。。。。。。。。。。。。。。。。。
Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
。。。。。。。。。。。。。。。。。。。

错误2:可以启动服务器,访问显示404

原因1:在.yml文件中没有设置页面的访问路径:spring.freemarker.suffix = .ftl

原因2:freemarker的依赖问题(这个很无语,在镜像仓库中找的依赖不一定有用,有语言限定)

SpringBoot+MyBatis过程中的问题 以及解决方法_第3张图片

 

你可能感兴趣的:(Spring)