在学习使用SpringBoot的过程中,势必需要与数据库相结合,完成对于数据层面上的操作。在使用Spring+MyBatis时我们需要配置很多繁琐的细节文件,但是SpringBoot的“约定大于配置”的特点,将我们从繁琐的文件配置中解放出来,使我们更加高效的实现开发。
下面就是测试用的代码,以及问题
首先我使用的是Idea的集成开发工具,选择创建的工程是:
项目的目录结构:
项目的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 ListgetAnimals() { 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);
}
}
在浏览器中运行:
运行结果
出现错误:
错误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的依赖问题(这个很无语,在镜像仓库中找的依赖不一定有用,有语言限定)