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>

项目实现

该项目要实现浏览器访问指定路径,返回学生的信息。

所以分为一下几步实现:

  1. 创建学生信息数据库
  2. 创建实体类 Student
  3. 创建mapper接口和mapper.xml,用于与数据库交互。
  4. 创建service接口并实现该接口,用于实现业务逻辑(这里是查询学生信息)
  5. 创建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();
    }
}

运行效果

posted @ 2022-08-22 17:20  aJream  阅读(30)  评论(0编辑  收藏  举报