Spring Boot 入门

最近一直在做有关于长连接、消息推送相关的应用,虽然作为一个Android开发,但为了能更好地了解整个消息推送的过程,还是决定学习一下后台的知识,想自己做一个简单点的消息推送服务。最近Spring Boot正火热,而且Spring Boot相对来说入门门槛很低,所以就用它了。本篇博客主要是记录一下我的Spring Boot入门。

环境搭建

所需环境(Mac下搭建,具体搭建、配置自行百度,一大堆):

  1. Java 环境
  2. Intellij IDEA
  3. Tomcat
  4. Mysql

创建Spring Boot工程

这里写图片描述
这里写图片描述
这里写图片描述

基本按上图就会生成一个Spring Boot工程
这里写图片描述

在第一次创建SpringBoot工程时因为需要从Maven仓库下载依赖,所以会比较慢,请耐心等待,之后就不需要等了。

写代码

工程已经建好了,开始写我们的代码

处理请求

后台服务最主要功能就是处理由其他端发来的GET、POST请求,在Spring Boot中非常简单.

@RestController
public class UserController {

    @GetMapping(value = "/getUsers")
    public String getUserList() {
        return "demoController";
    }

    @PostMapping(value = "/register")
    public String register(@RequestParam(value = "name") String name,
                           @RequestParam(value = "pwd") String pwd) {
        //do register
        return "register success" + name + ":" + pwd;
    }
}

这两个就是最简单的GET、POST请求处理,真的是非常简单。@PostMapping(value = “/register”),value值表示请求的方法。

启动服务,GET请求可以直接在浏览器中访问
这里写图片描述

POST请求可以使用PostMan来模拟
这里写图片描述

连接数据库

在Spring Boot中连接数据库也非常简单,很多工作框架已经帮我们完成。
首先在pom.xml中添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

然后在application.properties中配置数据库(一般我会把该文件删除,新建一个application.yml文件,作用相同,但yml文件的格式会比properties看起来好一些)

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/testDB?characterEncoding=utf8&useSSL=true
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
1.driver-class-name 表示驱动的名称,这个和具体的数据库驱动有关,视情况而定,我这里使用了MySql数据库,所以驱动名为com.mysql.jdbc.Driver 
2.url表示数据库连接地址
3.username、password表示数据库连接的用户名和密码 
4.ddl-auto配置了实体类维护数据库表结构的具体行为,update表示当实体类的属性发生变化时,表结构跟着更新,这里我们也可以取值create,这个create表示启动的时候删除上一次生成的表,并根据实体类重新生成表,这个时候之前表中的数据就会被清空;还可以取值create-drop,这个表示启动时根据实体类生成表,但是当sessionFactory关闭的时候表会被删除;validate表示启动时验证实体类和数据表是否一致;none表示啥都不做。 
5.show-sql:表示hibernate在操作的时候在控制台打印真实执行的sql语句 

定义一个User实体类,在Project启动的时候会在数据库中生成一个对应的数据表

@Entity
@Table(name = "user_info")
public class UserInfo{

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private String pwd;
    private Integer age;
    private String phoneNum;

    public UserInfo(){}


    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

在JPA中有很多关于数据库的操作都是默认实现的,我们只需要创建一个接口继承JpaRepository

public interface UserRepository extends JpaRepository<UserInfo, Long> {
    List<UserInfo> findAllByName(String name);

    List<UserInfo> findAllByPhoneNum(String phoneNum);

    List<UserInfo> findAllByNameAndPwd(String Name, String pwd);
}

UserRepository接口在继承JpaRepository后就默认拥有了如下的数据库访问方法

List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAll(Iterable<ID> var1);
<S extends T> List<S> save(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);

我在其中又根据规则单独实现了三个方法。
然后就可以在Controller中操作数据库了

    @Autowired
    private UserRepository userRepository;

    @GetMapping(value = "/getUsers")
    public List<UserInfo> getUserList() {
        return userRepository.findAll();
    }

    @PostMapping(value = "/register")
    public String registerUser(@RequestParam(value = "name") String name,
                               @RequestParam(value = "pwd") String pwd) {
        UserInfo userInfo = new UserInfo();
        userInfo.setName(name);
        userInfo.setPwd(pwd);
        userRepository.save(userInfo);
        return "成功";
    }

OK!基本的就是这些了,后面我会逐步使用事务、AOP、Netty、Protocol Buffer完成一个简易的消息推送

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值