# hello-springboot
**Repository Path**: ajream/hello-springboot
## Basic Information
- **Project Name**: hello-springboot
- **Description**: springboot工程创建并整合mybatis
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-08-22
- **Last Updated**: 2022-08-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[**前往我的博客查看文章**](https://www.cnblogs.com/ajream/p/16613551.html)
# 创建一个springboot工程
自从上次学习完springboot过去了几个月了,这么久也没咋写过Java,趁现在有空,赶紧回顾一下。顺便整合使用一下MyBatis。
## 开始创建
通过IDEA工具创建springboot工程还是比较简单的,打开IDEA后,一顿梦操作如下:




查看 `pom.xml` 文件,可以看到添加了如下几个依赖包(可能版本有差异)
```xml
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.2.2
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-test
test
```
然后在`com.ajream.xxx`路径下添加如下几个包:`entity`, `mapper`, `service`, `controller`

这样就创建好一个springboot工程了,可以运行然后打开浏览器访问 `localhost:8080`
## 工程配置
打开resource下的 `application.yml` yml文件(或properties文件),配置服务器端口、数据库连接信息、mapper文件路径等,如下:
```yaml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/springboot_study?serverTimezone=GMT%2B8
username: root
password: admin
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
# 注意,mapper文件如果放在java目录下,不能使用mapper-locations,要放在resources目录下的才可以
# mapper-locations: classpath:mybatis/mapper/*Mapper.xml
type-aliases-package: com.ajream.entity
configuration:
map-underscore-to-camel-case: true
```
由于我的mapper文件放在`java`目录下,所以在pom.xml文件配置mapper路径信息
```xml
src/main/java
**/*.xml
src/main/resources
```
## 项目实现
该项目要实现浏览器访问指定路径,返回学生的信息。
所以分为一下几步实现:
1. 创建学生信息数据库
2. 创建实体类 `Student`
3. 创建mapper接口和mapper.xml,用于与数据库交互。
4. 创建service接口并实现该接口,用于实现业务逻辑(这里是查询学生信息)
5. 创建controller类用于与浏览器实现交互
当浏览器访问指定路径时,会调用Controller内对应方法,再调用service提供的业务方法,返回数据给controller,再返回给浏览器前端。
为什么service业务方法可以获取到数据?因为service方法调用了mapper接口提供的方法,而mapper是与数据库进行交互的,所以service调用mapper的方法可以获取到数据库的信息。
### 数据库创建
创建 `students` 表并添加几条数据如下:
```sql
CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`student_id` varchar(255) default null,
`sex` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `students` (id, name, student_id, sex) VALUES (1, "小明", "201901", "男");
insert into `students` (name, student_id, sex) VALUES ("小广", "201902", "男");
insert into `students` (name, student_id, sex) VALUES ("小丁", "201903", "男");
insert into `students` (name, student_id, sex) VALUES ("小花", "201904", "女");
```
### 实体类创建
在`entity/`文件夹下创建
Student.java
```java
package com.ajream.entity;
public class Student {
private Integer id;
private String name;
private String studentId;
private String sex;
public Student() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", studentId='" + studentId + '\'' +
", sex='" + sex + '\'' +
'}';
}
}
```
### mapper接口和映射文件
在 `mapper/` 文件夹下创建
mapper.java(接口)
```java
@Mapper // 注意不要忘记注解
public interface StudentMapper {
Student findByStudentId(String sid); // 通过学号查找学生
List findAll(); //查找所有学生
}
```
```xml
```
### service服务类
在`service/`文件夹下创建
接口
```java
public interface StudentService {
Student findBySid(String sid);
List findAll();
}
```
在 `service/impl/` 下创建实现类
```java
@Service
public class StudentServiceImpl implements StudentService {
@Resource
StudentMapper studentMapper;
@Override
public Student findBySid(String sid) {
return studentMapper.findByStudentId(sid);
}
@Override
public List findAll() {
return studentMapper.findAll();
}
}
```
> 在这里可能会发现,这个service接口的方法怎么跟mapper的接口差不多一样的。 注意不要搞混了。
> - mapper只是用于从数据库查询数据的,或者说是与数据库打交道的。
> - 而service是项目的业务逻辑实现。什么业务呢?用户需要查询学生信息,因此业务就是从数据库获取学生信息,因为mapper获取到的就是学生信息,没有特殊要求的话,service就可以直接把mapper获取的信息提交给controller了,所以service接口看起来跟mapper接口一样。(从service方法的实现也可以看出,实际上是调用了mapper的方法就直接返回数据了,没有任何处理)
> - service 获取到信息后交给controller,再由controller返回给用户。
> - 可以看出,service就是从mapper到controller之间的一座桥梁。
### 创建controller
```java
@Controller
@ResponseBody //使对象转化为json格式返回给前端
public class GetStudentInfoController {
@Resource
StudentServiceImpl service;
@RequestMapping("/")
public String index(){
return "这是主页
";
}
// RESTFul风格的url路径
@RequestMapping("/hello/{p}")
public String hello(@PathVariable String p){
return "hello " + p;
}
@RequestMapping("/student_info/{sid}")
public Student studentInfo(@PathVariable String sid){
return service.findBySid(sid);
}
@RequestMapping("/student_info/all")
public List findAllStudents(){
return service.findAll();
}
}
```
## 运行效果
