搭建一个SpringBoot基础框架并实现mybatis的整合!
前言:一些废话
最近在准备找工作,感觉自己关于框架的知识点很零散,所以我想花一些时间,整理整理,把以前学的知识串联起来,系统的整理一遍,加深映像。
1.打开Idea,会出现如下界面。
2.选择Create New Project,新增一个项目。
箭头所指向的三处地方默认即可,不需要做其他修改。
画框的地方,maven项目和gradle项目都可以选择,只是项目管理的环境不同而已。这里我默认选择了maven,因为我的gradle下载实在太慢了。。。我懒得去修改镜像源。
依赖的选择如下图所示,他提供了很多依赖,其实很多我都没有用过。我也在不断尝试新的依赖。这里我选择了如下几个。
这是我选择的依赖。spring web 必须选,这里面包含了spring mvc的依赖,如果不选。。。。前后就无法交互。
创建完成,等待下载依赖。
如果觉得慢的可以在pom文件里面加入这句话。这样你的下载就起飞了。。。。23333
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
初始化完成之后基本项目结构如下图所示
等待下载依赖中……
N minutes later
依赖安装完成。。。
3.启动之前的准备工作
修改文件后缀为yml
application.properties -> application.yml
里面写如下内容
spring:
application:
name: demo
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jwxt-test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&&serverTimezone=GMT%2b8
username: root
password: root
然后点击Debug启动
一个SpringBoot的工程就启动完成了
4.尝试写一个接口
在controller文件夹下面编写如下代码
@RequestMapping(value = "/student")
@RestController
@CrossOrigin
public class StudentController {
@GetMapping("/getStudentMsg")
public String getStudentMsg() {
return "get student msg success!";
}
}
访问地址http://localhost:8080/student/getStudentMsg
得如下结果!
POST方法同理。测试起来比较麻烦,所以我就掠过。
5.完善其他层(service,dao)
完善之后的Controller层代码
@RequestMapping(value = "/student")
@RestController
@CrossOrigin
public class StudentController {
@Autowired
public StudentServiceImpl studentService;
@GetMapping("/getStudentMsg")
public String getStudentMsg() {
return this.studentService.getStudentMsg();
}
@PostMapping("/postStudentMsg")
public String postStudentMsg(@RequestBody String name, @RequestBody String idCard) {
return "post student msg success!";
}
}
完善之后的service层代码
public interface StudentService {
String getStudentMsg();
}
@Service
@Transactional(rollbackFor = Exception.class)
public class StudentServiceImpl implements StudentService {
@Override
public String getStudentMsg() {
return "get student msg success!";
}
}
测试:
dao层涉及到和mybatis的结合。。。emmm有点麻烦。。
因为dao层的代码有些复杂,我就从别处扒了点出来
修改过后的serviceimpl层代码
@Service
@Transactional(rollbackFor = Exception.class)
public class StudentServiceImpl implements StudentService {
@Autowired
public StudentMessageMapper studentMessageMapper;
@Override
public String getStudentMsg() {
System.out.println("进入serviceImpl");
return "get student msg success!";
}
@Override
public List<StudentMessage> findAll() {
PageDTO pageDTO = new PageDTO();
pageDTO.setIndex(1); // 设置当前页码为1
pageDTO.setPagesize(20); // 设置当前页数量为20
// 处理分页
// 重组分页条件
ArrayList linkedList = new ArrayList();
Integer index = (pageDTO.getIndex() - 1) * pageDTO.getPagesize();
pageDTO.setIndex(index);
// 如果搜索条件和搜索知不为空
if(!pageDTO.getSearchCondition().equals("")&& !pageDTO.getSearchValue().equals("")) {
// 设置SQL
pageDTO.setSearchSql();
}
return this.studentMessageMapper.findAll(pageDTO);
}
}
此时如果不修改main方法上面的注解,就会出现如下错误。
Field studentMessageMapper in org.gjt.demo.serviceimpl.StudentServiceImpl required a bean of type ‘org.gjt.demo.dao.mapper.StudentMessageMapper’ that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
解决方案如下
@SpringBootApplication(scanBasePackages = "org.gjt.demo")
@MapperScan(basePackages = "org.gjt.demo.dao.*")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
如果出现
Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port.
则修改application.yml切换端口!
server:
port: 8081
如果出现
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): org.gjt.demo.dao.mapper.StudentMessageMapper.findAll
那么就是没有在yml文件中配置对应的映射的xml文件。。解决方案如下
mybatis:
mapper-locations:
- classpath*:/mapper/*.xml #mybaits mapperxml文件路径
configuration:
map-underscore-to-camel-case: true
一切就绪之后。。。。
开始测试:
地址:http://localhost:8081/student/findAll
返回结果:
注:以上数据全部是模拟生成的假数据,没有一条是真的。
到此为止完成了一个简单的springboot的框架的初始化搭建。
下一篇将分析其中的每一个注解的含义和作用。