Spring Boot 基础

Spring Boot 基础

Spring Boot 项目(参考1) 提供了一个类似ASP.NET MVC的默认模板一样的标准样板,直接集成了一系列的组件并使用了默认的配置。使用Spring Boot 不会降低学习成本,甚至增加了学习成本,但显著降低了使用成本并提高了开发效率。如果没有Spring基础不建议直接上手。

1.基础项目

这里只关注基于Maven的项目构建,使用Spring Boot CLI命令行工具和Gradle构建方式请参考官网。

(1)创建项目:

创建类型为quickstart的Maven项目,删除默认生成的.java文件保持默认的Maven目录即可。

(2)修改/pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <groupId>com.example</groupId>
 6     <artifactId>myproject</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <properties>
 9         <java.version>1.8</java.version>
10     </properties>
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>1.3.1.RELEASE</version>
15     </parent>
16     <dependencies>
17         <dependency>
18             <groupId>org.springframework.boot</groupId>
19             <artifactId>spring-boot-starter-web</artifactId>
20         </dependency>
21     </dependencies>
22 </project>

(3)添加/src/main/sample/controller/HomeController.java文件:

 1 package simple.controller;
 2
 3 import org.springframework.web.bind.annotation.*;
 4
 5 @RestController
 6 public class HomeController {
 7
 8     @RequestMapping("/")
 9     public String index() {
10         return "Hello World!";
11     }
12 }

(4)添加/src/main/sample/Application.java文件:

 1 package simple;
 2
 3 import org.springframework.boot.*;
 4 import org.springframework.boot.autoconfigure.*;
 5 import simple.controller.*;
 6
 7 @EnableAutoConfiguration
 8 public class Application {
 9
10     public static void main(String[] args) throws Exception {
11         SpringApplication.run(new Object[] { Application.class, HomeController.class }, args);
12     }
13
14 }

在浏览器中输入http://localhost:8080/,即可直接看到"Hello World"运行结果。

2. 添加数据访问支持

(1)修改pom,添加spring-boot-starter-data-jpa和h2依赖:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <groupId>com.example</groupId>
 6     <artifactId>myproject</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <properties>
 9         <java.version>1.8</java.version>
10     </properties>
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>1.3.1.RELEASE</version>
15     </parent>
16     <dependencies>
17         <dependency>
18             <groupId>org.springframework.boot</groupId>
19             <artifactId>spring-boot-starter-web</artifactId>
20         </dependency>
21         <dependency>
22             <groupId>org.springframework.boot</groupId>
23             <artifactId>spring-boot-starter-data-jpa</artifactId>
24         </dependency>
25         <dependency>
26             <groupId>com.h2database</groupId>
27             <artifactId>h2</artifactId>
28             <scope>runtime</scope>
29         </dependency>
30     </dependencies>
31 </project>

如果需要在控制台查看生成SQL语句,可以添加/src/main/resources/application.properties

1 spring.h2.console.enabled=true
2 logging.level.org.hibernate.SQL=debug

(2)添加实体

添加User、Role、Category和Post实体。

User:

 

package simple.domain;

import java.util.*;

import javax.persistence.*;

@Entity
public class User {
@Id
@GeneratedValue
private Long id;

private String userName;

private String password;

private String Email;

@javax.persistence.Version
private Long Version;

@ManyToMany(cascade = CascadeType.ALL)
private List<Role> roles = new ArrayList<Role>();

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 getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getEmail() {
return Email;
}

public void setEmail(String email) {
Email = email;
}

public List<Role> getRoles() {
return roles;
}

public void setRoles(List<Role> roles) {
this.roles = roles;
}

public Long getVersion() {
return Version;
}

public void setVersion(Long version) {
Version = version;
}
}

Role:

 

package simple.domain;

import java.util.*;

import javax.persistence.*;

@Entity
public class Role {
@Id
@GeneratedValue
private Long id;

private String roleName;

@ManyToMany(cascade = CascadeType.ALL)
private List<User> users = new ArrayList<User>();

public Long getId() {
return id;
}

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

public String getRoleName() {
return roleName;
}

public void setRoleName(String roleName) {
this.roleName = roleName;
}

public List<User> getUsers() {
return users;
}

public void setUsers(List<User> users) {
this.users = users;
}
}

Category:

 

package simple.domain;

import java.util.*;

import javax.persistence.*;

@Entity
public class Category {
@Id
@GeneratedValue
private Long id;

private String Name;

@OneToMany
private List<Post> posts = new ArrayList<Post>();

public Long getId() {
return id;
}

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

public String getName() {
return Name;
}

public void setName(String name) {
Name = name;
}

public List<Post> getPosts() {
return posts;
}

public void setPosts(List<Post> posts) {
this.posts = posts;
}
}

Post:

 

package simple.domain;

import java.util.*;

import javax.persistence.*;

@Entity
public class Post {
@Id
@GeneratedValue
private Long id;

private String Name;

private String Html;

private String Text;

private Date CreateAt;

@ManyToOne
private Category category;

public Long getId() {
return id;
}

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

public String getName() {
return Name;
}

public void setName(String name) {
Name = name;
}

public String getHtml() {
return Html;
}

public void setHtml(String html) {
Html = html;
}

public String getText() {
return Text;
}

public void setText(String text) {
Text = text;
}

public Date getCreateAt() {
return CreateAt;
}

public void setCreateAt(Date createAt) {
CreateAt = createAt;
}

public Category getCategory() {
return category;
}

public void setCategory(Category category) {
this.category = category;
}
}

(3)添加资源库

添加UserRepository、RoleRepository、CategoryRepository和PostRepository接口,无需实现。

UserRepository:

1 package simple.repository;
2
3 import org.springframework.data.repository.*;
4
5 import simple.domain.*;
6
7 public interface UserRepository extends CrudRepository<User, Long> {
8
9 }

RoleRepository

1 package simple.repository;
2
3 import org.springframework.data.repository.*;
4
5 import simple.domain.*;
6
7 public interface RoleRepository extends CrudRepository<Role, Long> {
8
9 }

CategoryRepository

1 package simple.repository;
2
3 import org.springframework.data.repository.*;
4
5 import simple.domain.*;
6
7 public interface CategoryRepository extends CrudRepository<Category, Long> {
8
9 }

PostRepository

package simple.repository;

import org.springframework.data.repository.*;

import simple.domain.*;

public interface PostRepository extends CrudRepository<User, Long> {

}

(4)在控制器中注入资源库接口

 1 package simple.controller;
 2
 3 import org.springframework.beans.factory.annotation.*;
 4 import org.springframework.web.bind.annotation.*;
 5
 6 import simple.repository.*;
 7
 8 @RestController
 9 public class HomeController {
10
11     private UserRepository userRepository;
12     private RoleRepository roleRepository;
13     private CategoryRepository categoryRepository;
14     private PostRepository postReppository;
15
16     @Autowired
17     public HomeController(UserRepository userRepository, RoleRepository roleRepository,
18             CategoryRepository categoryRepository, PostRepository postReppository) {
19         this.userRepository = userRepository;
20         this.roleRepository = roleRepository;
21         this.categoryRepository = categoryRepository;
22         this.postReppository = postReppository;
23     }
24
25
26     @RequestMapping("/")
27     public long index() {
28         return userRepository.count();
29     }
30 }

使用事务时在方法上应用注解@Transactional

3.添加验证和授权支持

(1)添加spring-boot-starter-security依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <groupId>com.example</groupId>
 6     <artifactId>myproject</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <properties>
 9         <java.version>1.8</java.version>
10     </properties>
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>1.3.1.RELEASE</version>
15     </parent>
16     <dependencies>
17         <dependency>
18             <groupId>org.springframework.boot</groupId>
19             <artifactId>spring-boot-starter-web</artifactId>
20         </dependency>
21         <dependency>
22             <groupId>org.springframework.boot</groupId>
23             <artifactId>spring-boot-starter-data-jpa</artifactId>
24         </dependency>
25         <dependency>
26             <groupId>com.h2database</groupId>
27             <artifactId>h2</artifactId>
28             <scope>runtime</scope>
29         </dependency>
30         <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-starter-security</artifactId>
33         </dependency>
34     </dependencies>
35 </project>

(2)修改Application.java

 1 package simple;
 2
 3 import org.springframework.boot.*;
 4 import org.springframework.boot.autoconfigure.*;
 5 import org.springframework.context.annotation.Bean;
 6 import org.springframework.security.config.annotation.method.configuration.*;
 7 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 8 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 9 import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
10
11 import simple.controller.*;
12
13 @EnableAutoConfiguration
14 @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
15 public class Application {
16
17     public static void main(String[] args) throws Exception {
18         SpringApplication.run(new Object[] { Application.class, HomeController.class }, args);
19     }
20
21     @Bean
22     public WebSecurityConfigurerAdapter webSecurityConfigurerAdapter() {
23         return new MyWebSecurityConfigurer();
24     }
25
26     public static class MyWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
27         @Override
28         protected void configure(HttpSecurity http) throws Exception {
29             http.csrf().disable();
30             http.authorizeRequests().antMatchers("/account**", "/admin**").authenticated();
31             http.formLogin().usernameParameter("userName").passwordParameter("password").loginPage("/login")
32                     .loginProcessingUrl("/login").successHandler(new SavedRequestAwareAuthenticationSuccessHandler())
33                     .and().logout().logoutUrl("/logout").logoutSuccessUrl("/");
34             http.rememberMe().rememberMeParameter("rememberMe");
35
36         }
37     }
38 }

时间: 2024-12-29 13:58:46

Spring Boot 基础的相关文章

Spring Boot基础-Spring Tool Suite工具的安装的安装

Spring Boot基础教程1-Spring Tool Suite工具的安装 Spring Boot基础教程2-RESTfull API简单项目的快速搭建 Spring Boot基础教程3-配置文件详解:Properties和YAML Spring Boot基础教程4-配置文件-多环境配置 Spring Boot基础教程5-日志配置-logback和log4j2 源码地址:https://github.com/roncoo/spring-boot-demo 1.工具下载地址: Eclipse:

Spring Boot 基础概述

上半年一直忙于工作,没有太多的时间去写文字,期间也比较关注 .net core 的发展,比较看好 asp.net core 的 OO 抽象设计,也参考了abp.zero 的设计.其实大多数情况平常的工作主要还是结合一些理论与技术框架快速实现:个人的时间就是成本,最近打算整理下 Spring Boot  的相关知识,也算是多一种选择吧 . 概述与目录 对于学习新的知识,我认为最快的方式就是先过一遍官方的文档,这一步很重要:后面再结合实际情况的运用就好了.所以我罗列了一些目录,应该覆盖了大多数的运用

Spring Boot基础-RESTfull API简单项目的快速搭建

Spring Boot基础教程1-Spring Tool Suite工具的安装 Spring Boot基础教程2-RESTfull API简单项目的快速搭建 Spring Boot基础教程3-配置文件详解:Properties和YAML Spring Boot基础教程4-配置文件-多环境配置 Spring Boot基础教程5-日志配置-logback和log4j2 源码地址:https://github.com/roncoo/spring-boot-demo 一.搭建一个简单的RESTfull

漫谈spring cloud 与 spring boot 基础架构

详情请交流  QQ  709639943 01.漫谈spring cloud 与 spring boot 基础架构 02.漫谈spring cloud分布式服务架构 03.Node.js入门到企业Web开发中的应用 04.精通高级RxJava 2响应式编程思想 05.Java秒杀系统方案优化 高性能高并发实战 06.Java深入微服务原理改造房产销售平台 07.快速上手Linux 玩转典型应用 08.快速上手Ionic3 多平台开发企业级问答社区 09.Java Spring Security开

Spring Boot基础教程》 第1节工具的安装和使用

<Spring Boot基础教程> 第1节 工具的安装和使用 Spring Boot文档 https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/I.%20Spring%20Boot%20Documentation/ 一.课程使用的工具                                                      Spring Tool Suite:https://spring.io/to

二、Spring Boot基础

[学习Spring Boot基础,创建Spring Boot项目,讲解Spring Boot的配置,是学习Spring Cloud Alibaba的必知必会.] Spring Boot基础 快速创建应用  https://www.cnblogs.com/my-program-life/p/11592838.html Spring Boot基础知识  https://www.cnblogs.com/my-program-life/p/11958428.html 补充知识: Spring Boot

Spring Boot基础教程8-web应用开发-模板引擎jsp

一.spring boot的web应用开发,是基于spring mvc 二.Spring boot 在spring默认基础上,自动配置添加了以下特性: 1.   包含了ContentNegotiatingViewResolver和BeanNameViewResolver beans. 2.   对静态资源的支持,包括对WebJars的支持. 3.   自动注册Converter,GenericConverter,Formatter beans. 4.   对HttpMessageConverte

Java Web系列:Spring Boot 基础 (转)

Spring Boot 项目(参考1) 提供了一个类似ASP.NET MVC的默认模板一样的标准样板,直接集成了一系列的组件并使用了默认的配置.使用Spring Boot 不会降低学习成本,甚至增加了学习成本,但显著降低了使用成本并提高了开发效率.如果没有Spring基础不建议直接上手. 1.基础项目 这里只关注基于Maven的项目构建,使用Spring Boot CLI命令行工具和Gradle构建方式请参考官网. (1)创建项目: 创建类型为quickstart的Maven项目,删除默认生成的

Java Web系列:Spring Boot 基础

Spring Boot 项目(参考1) 提供了一个类似ASP.NET MVC的默认模板一样的标准样板,直接集成了一系列的组件并使用了默认的配置.使用Spring Boot 不会降低学习成本,甚至增加了学习成本,但显著降低了使用成本并提高了开发效率.如果没有Spring基础不建议直接上手. 1.基础项目 这里只关注基于Maven的项目构建,使用Spring Boot CLI命令行工具和Gradle构建方式请参考官网. (1)创建项目: 创建类型为quickstart的Maven项目,删除默认生成的