1.框架搭建。
采用的开发工具是IntelliJ IDEA 2017.3.4 x64。
(1).File --> New Project --> Spring Initializr,如图下所示:
(2).填写maven的坐标,选择打包方式,没啥好多的,用过maven的都很熟悉。
(3).选择依赖。
(4).选择项目在磁盘上的工作空间,点击Finish。
(5).项目新建成功,项目结构如图所示。
(6)运行Demo,直接运行CsdnApplication的main方法就好了,出现如下界面则搭建成功。
2.HelloWord
(1).新建HelloController(暂时将HelloController和CsdnApplication同一级目录下,后续再说为什么再做相关改变),如图所示:
(2).测试Helloworld,本人用的PostMan工具,其他的接口测试工具,浏览器啥的都可以。
3.springboot配置
springboot的一大亮点就是配置超级简单,本文只是一个demo,只做做基础的配置。配置文件这边我用的是.yml文件,它比.properties的好处是,有天然的树状结构,比较清晰,但是作用都是一样的。我的配置文件如下(配置文件内容可以到最下面的链接下载):
pom文件详情:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>csdn</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>csdn</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 部署到tomcat的时候使用 -->
<!--<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>-->
</dependency>
<!-- 部署到tomcat的时候打开 -->
<!--<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>8.0.36</version>
<scope>provided</scope>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.13</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.数据库操作
新建实体类:User.java。user里面的字段上的注解,看名字都看出来什么意思了,就是和数据库表的映射。
package com.example.csdn;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* Created by Administrator on 2017/7/21.
*/
@Entity
public class User {
@Id
@Column(name="id",nullable = false)
@GeneratedValue
private Long id;
@Column
private String username;
@Column
private String name;
@Column
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String username,String name,String password){
super();
this.username=username;
this.name=name;
this.password=password;
}
//必须有一个无参构造方法,否则会报错
public User(){
}
@Override
public String toString() {
return getId()+","+getUsername()+","+getName();
}
}
创建mapper查询接口 UserMapper,UserMapper继承自JpaRePository,jpa帮我们实现了好多实用的CRUD方法。
package com.example.csdn;
import com.example.csdn.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserMapper extends JpaRepository<User, Long> {
}
建立service,注入Usermapper。
package com.example.csdn;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
@Service
public class UserService {
@Autowired
UserMapper userMapper;
@Transactional
public User insert(User user){
return userMapper.save(user);
}
public void deleteById(Long userId){
userMapper.deleteById(userId);
}
public User update(User user){
return userMapper.save(user);
}
public Optional<User> findById(Long id){
Optional<User> user = userMapper.findById(id);
List<User> all = userMapper.findAll();
return user;
}
public List<User> findList(){
List<User> userList = userMapper.findAll();
return userList;
}
}
新建UserController.java,调用Service,实现用户新增。
ackage com.example.Controller;
import com.example.bean.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/users/insert")
public User insert(User user){
return userService.insert(user);
}
}
postman发送测试请求。
测试成功,再到数据库里面看一看。
5.其他
(1).实际开发中肯定要分包分类,肯定不能将Controller,Service,Bean都放在一起,这个时候就新建包,新建类。新建包的时候要注意,想要让SpringBoot能够扫描到你的类,将其注入到IOC容器里,最直接的方法是将CsdnApplication.java这个文件放到Controller,Service这些包的父级,因为SpringBoot默认扫描的是启动类文件的同级及其子集的所有.java文件。结构如图所示:
(2)若要开启Springboot的事务(最简单的事务,关于事务的隔离级别,spring的事务传播等就不说了),最简单的方法是注解。第一步在启动类上声明开启注解。
@EnableTransactionManagement
@SpringBootApplication
public class CsdnApplication {
public static void main(String[] args) {
SpringApplication.run(CsdnApplication.class, args);
}
}
然后在Service方法上加入注解
@Transactional
public User insert(User user){
return userMapper.save(user);
}
如果写上了如上的两个注解,事务还是不会滚,可以在springboot的配置文件里面加上
dialect:
org.hibernate.dialect.MySQL5InnoDBDialect(参照前文的springboot配置文件)。
(3)更改启动输出的banner。springboot启动的时候,会有如下输出,如果不喜欢的话,可以更改。更改方法:将banner.txt(到最下面的文件下载链接里面找)放到\src\main\resources目录下,启动就Ok了。
更改前:
更改后(苦中作乐一下,是不是很好玩):
6.总结。
springboot还是很简介的,本文只介绍了最基础的功能,关于springboot的高级应用,例如定时任务,异步任务,上传下载,springboot拦截器等后续再说明吧。