SpringBoot简介
SpringBoot使得spring应用变得更轻量化.
主要优点:
为所有的spring开发者更快的入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化web项目
没有冗余代码生成和xml配置的要求
springboot结构简单,开发快速.
快速入门
要求:
jdk 1.8
ecplice
1.创建一个maven工程
要求:类型为jar的工程项目
2.pom文件引入依赖
org.springframework.boot
spring-boot-starter-parent
1.3.3.RELEASE
<!—SpringBoot web 组件 -->
org.springframework.boot
spring-boot-starter-web
spring-boot-starter-parent作用:
在pom.xml中引入spring-boot-start-parent,spring官方解释叫stater poms,它可以提供dependency management,也就是说依赖管理,引入以后再申请其它dependency的时候就不需要version了.
spring-boot-starter-web作用:
springboot核心组件
spring-boot-maven-plugin作用:
如果我们要直接main启动spring,那么以下plugin必须要添加,否则无法启动.如果使用maven的spring-boot:run的话是不需要此配置的.
3.编写helloworld服务
创建package命名为com.xxx.controller(根据实际情况修改)
创建HelloController类,内容如下
@RestController
@EnableAutoConfiguration
public class HelloController{
@RequestMapping("/hello")
public String index(){
return “Hello World”;
}
public static void main(String[] args){
SpringApplication.run(HelloController.class,args);
}
}
注:
@RestController
在上加上RestController表示修饰该Controller所有的方法的方法返回JSON格式,直接可以编写Restful接口
@EnableAutoConfiguration
作用在于让SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置
这个注解告诉SpringBoot根据添加的jar依赖猜测你想如何配置Spring.由于spring-boot-starter-web添加了Tomcat和 SpringMVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置.
SpringApplication.run(HelloController.class,args);
标识为启动类
4.SpringBoot启动
SpringBoot默认端口号为8080
方式一:
@RestController
@EnableAutoConfiguration
public class HelloController{
@RequestMapping("/hello")
public String index(){
return “Hello World”;
}
public static void main(String[] args){
SpringApplication.run(HelloController.class,args);
}
}
启动主程序,打开浏览器访问http://localhost:8080/index,可以看到页面输出HelloWorld
方式二:
创建一个启动类,如:
@ComponentScan(basePackage=“com.xxx.controller”)
@EnableAutoConfiguration
public class App{
public static void main (String[] args){
SpringApplication.run(App.class,args);
}
}
注:
@ComponentScan(basePackage=“com.xxx.controller”)----控制器扫描包范围
web开发
静态资源访问
在我们开发web应用的时候,需要引入大量的js,css,图片等静态资源.
默认配置
SpringBoot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
/static
/public
/resources
/META-INF/resources
例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片.启动程序后,尝试访问http://localhost:8080/D.jpg.如能显示图片,配置成功.
全局捕获异常
@ExceptionHandler表示拦截异常
@ControllerAdvice是controller的一个辅助类,最常用的就是作为全局异常处理的切面类
@ControllerAdvice可以指定扫描范围
@ControllerAdvice约定了几种可行的返回值,如果是直接返回model类的话,需要使用@ResponseBody进行json转换
返回String,表示跳到某个view
返回modelAndView
返回model+@ResponseBody
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Map<String, Object> exceptionHandler() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("errorCode", "500");
map.put("errorMsg", "系統错误!");
return map;
}
}
渲染web页面
渲染web页面
在之前的示例中,我们都是通过@RestController来处理请求,所以返回的内容为json对象.那么如果需要渲染html页面的时候,要如何实现呢?
模板引擎
在动态html实现上springboot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站.
springboot提供了默认配置的模板引擎主要有以下几种:
thymeleaf
freemarker
velocity
groovy
mustache
springboot建议使用这些模板引擎,避免使用jsp,若一定要使用jsp将无法实现springboot的多种特性,具体见后文:支持jsp配置
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates.当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性查询并修改.
使用freemarker模板引擎渲染web视图
pom文件引入
<!--引入freemarker的依赖包.-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
后台代码
在src/main/resources/创建一个templates文件夹,创建一个后缀为.ftl的文件
@RequestMapping("/index")
public String index(Map<String, Object> map){
map.put("name","xxxxxxxxxxx")
return "index"
}
前台代码
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
${name}
</body>
</html>
freemarker其他用法
@RequestMapping("/freemarkerIndex")
public String index(Map<String, Object> result) {
result.put("name", "aaaa");
result.put("sex", "0");
List<String> listResult = new ArrayList<String>();
listResult.add("zhangsan");
listResult.add("lisi");
listResult.add("xxxx");
result.put("listResult", listResult);
return "index";
}
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title>首页</title>
</head>
<body>
${name}
<#if sex=="1">
男
<#elseif sex=="2">
女
<#else>
其他
</#if>
<#list userlist as user>
${user}
</#list>
</body>
</html>
freemarker配置
resources文件夹下新建application.properties文件
########################################################
###FREEMARKER (FreeMarkerAutoConfiguration)
########################################################
spring.freemarker.allow-request-override=false
spring.freemarker.cache=true
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
#spring.freemarker.prefix=
#spring.freemarker.request-context-attribute=
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
#comma-separated list
#spring.freemarker.view-names= # whitelist of view names that can be resolved
使用jsp渲染web视图
pom文件引入以下依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<!-- SpringBoot 核心组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
</dependencies>
在application.properties创建以下配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
后台代码
@Controller
public class IndexController {
@RequestMapping("/index")
public String index() {
return "index";
}
}
注:创建springboot整合jsp,一定要为war类型,否则会找不到页面.
数据访问
springboot整合使用jdbcTemplate
pom文件引入
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</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-web</artifactId>
</dependency>
</dependencies>
application.properties新增配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=111111
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
UserService类(service包中)
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public void createUser(String name, Integer age) {
System.out.println("ssss");
jdbcTemplate.update("insert into users values(null,?,?);", name, age);
}
}
App类(app包中)
@ComponentScan(basePackages = "com.xxx")
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
注:spring-boot-starter-parent要在1.5以上
springboot整合使用mybatis
pom文件引入
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
配置文件引入
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=111111
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Mapper代码
public interface UserMapper {
@Select("SELECT * FROM USERS WHERE NAME = #{name}")
User findByName(@Param("name") String name);
@Insert("INSERT INTO USERS(NAME, AGE) VALUES(#{name}, #{age})")
int insert(@Param("name") String name, @Param("age") Integer age);
}
启动方式
@ComponentScan(basePackages = "com.xxx")
@MapperScan(basePackages = "com.xxx.mapper")
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
springboot整合使用springjpa
pom文件引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<dependencies>
<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.21</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
创建User实体类
@Entity(name = "users")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column
private String name;
@Column
private Integer age;
// ..get/set方法
}
创建UserDao
public interface UserDao extends JpaRepository<User, Integer> {
}
创建IndexController
@RestController
public class IndexController {
@Autowired
private UserDao userDao;
@RequestMapping("/index")
public String index(Integer id) {
User findUser = userDao.findOne(id);
System.out.println(findUser.getName());
return "success";
}
}
启动项目
@ComponentScan(basePackages = { "com.xxx" })
@EnableJpaRepositories(basePackages = "com.xxx.dao")
@EnableAutoConfiguration
@EntityScan(basePackages = "com.xxx.entity")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}