SpringBoot初体验

SpringBoot简介
SpringBoot使得spring应用变得更轻量化.
主要优点:
为所有的spring开发者更快的入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化web项目
没有冗余代码生成和xml配置的要求

springboot结构简单,开发快速.

快速入门
要求:
jdk 1.8
ecplice

1.创建一个maven工程
要求:类型为jar的工程项目
SpringBoot初体验
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);
	}
}
上一篇:如何在spring boot中启用freemarker模板的热刷新?


下一篇:freemarker中8个常用的指令