最近一直在做有关于长连接、消息推送相关的应用,虽然作为一个Android开发,但为了能更好地了解整个消息推送的过程,还是决定学习一下后台的知识,想自己做一个简单点的消息推送服务。最近Spring Boot正火热,而且Spring Boot相对来说入门门槛很低,所以就用它了。本篇博客主要是记录一下我的Spring Boot入门。
环境搭建
所需环境(Mac下搭建,具体搭建、配置自行百度,一大堆):
- Java 环境
- Intellij IDEA
- Tomcat
- 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完成一个简易的消息推送