Hello-SpringBoot
创建一个springboot工程
自从上次学习完springboot过去了几个月了,这么久也没咋写过Java,趁现在有空,赶紧回顾一下。顺便整合使用一下MyBatis。
开始创建
通过IDEA工具创建springboot工程还是比较简单的,打开IDEA后,一顿梦操作如下:
查看 pom.xml
文件,可以看到添加了如下几个依赖包(可能版本有差异)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
然后在com.ajream.xxx
路径下添加如下几个包:entity
, mapper
, service
, controller
这样就创建好一个springboot工程了,可以运行然后打开浏览器访问 localhost:8080
工程配置
打开resource下的 application.yml
yml文件(或properties文件),配置服务器端口、数据库连接信息、mapper文件路径等,如下:
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路径信息
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
项目实现
该项目要实现浏览器访问指定路径,返回学生的信息。
所以分为一下几步实现:
- 创建学生信息数据库
- 创建实体类
Student
- 创建mapper接口和mapper.xml,用于与数据库交互。
- 创建service接口并实现该接口,用于实现业务逻辑(这里是查询学生信息)
- 创建controller类用于与浏览器实现交互
当浏览器访问指定路径时,会调用Controller内对应方法,再调用service提供的业务方法,返回数据给controller,再返回给浏览器前端。
为什么service业务方法可以获取到数据?因为service方法调用了mapper接口提供的方法,而mapper是与数据库进行交互的,所以service调用mapper的方法可以获取到数据库的信息。
数据库创建
创建 students
表并添加几条数据如下:
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
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(接口)
@Mapper // 注意不要忘记注解
public interface StudentMapper {
Student findByStudentId(String sid); // 通过学号查找学生
List<Student> findAll(); //查找所有学生
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ajream.mapper.StudentMapper">
<select id="findByStudentId" resultType="com.ajream.entity.Student" parameterType="java.lang.String">
select * from students where student_id=#{sid}
</select>
<select id="findAll" resultType="com.ajream.entity.Student">
select * from students;
</select>
</mapper>
service服务类
在service/
文件夹下创建
创建接口
public interface StudentService {
Student findBySid(String sid);
List<Student> findAll();
}
在 service/impl/
下创建实现类
@Service
public class StudentServiceImpl implements StudentService {
@Resource
StudentMapper studentMapper;
@Override
public Student findBySid(String sid) {
return studentMapper.findByStudentId(sid);
}
@Override
public List<Student> findAll() {
return studentMapper.findAll();
}
}
在这里可能会发现,这个service接口的方法怎么跟mapper的接口差不多一样的。 注意不要搞混了。
- mapper只是用于从数据库查询数据的,或者说是与数据库打交道的。
- 而service是项目的业务逻辑实现。什么业务呢?用户需要查询学生信息,因此业务就是从数据库获取学生信息,因为mapper获取到的就是学生信息,没有特殊要求的话,service就可以直接把mapper获取的信息提交给controller了,所以service接口看起来跟mapper接口一样。(从service方法的实现也可以看出,实际上是调用了mapper的方法就直接返回数据了,没有任何处理)
- service 获取到信息后交给controller,再由controller返回给用户。
- 可以看出,service就是从mapper到controller之间的一座桥梁。
创建controller
@Controller
@ResponseBody //使对象转化为json格式返回给前端
public class GetStudentInfoController {
@Resource
StudentServiceImpl service;
@RequestMapping("/")
public String index(){
return "<h1>这是主页</h1>";
}
// 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<Student> findAllStudents(){
return service.findAll();
}
}
运行效果
本文来自博客园,作者:aJream,转载请记得标明出处:https://www.cnblogs.com/ajream/p/16613551.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人