# 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后,一顿梦操作如下: ![](https://i0.hdslb.com/bfs/album/1a51f627fb34021a0ade00bf2028e06e30c5a8d8.png@1e_1c.webp) ![](https://i0.hdslb.com/bfs/album/873e06450ae1ed6de316deae71e84f60d3457266.png@1e_1c.webp) ![](https://i0.hdslb.com/bfs/album/e5b467e0b4c0b19db77970972f4c97f39768f80a.png@1e_1c.webp) ![](https://i0.hdslb.com/bfs/album/0da368ef1b268c284ec79bf32b845f18f33b5128.png@1e_1c.webp) 查看 `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` ![](https://i0.hdslb.com/bfs/album/28294bb60f314360e216b4f4a1f97b85418b30f0.png@1e_1c.webp) 这样就创建好一个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(); } } ``` ## 运行效果 ![](https://i0.hdslb.com/bfs/album/12a5d879c3d5b244ce2da2e0f740f092de787727.png@1e_1c.webp)