SpringBoot初体验
1.elipse中创建Springboot项目并启动
具体创建步骤请参考:Eclipse中创建新的Spring Boot项目
2.项目的属性配置
a.首先我们在项目的resources目录下application.yml中添加以下内容:
server:
port: 8080
#set a prefix on our URLRequestMapping
#context-path: /boot str1: hello
str2: world
content: "str1: ${str1}, str2:${str2}"
gril:
name: Hanmeimei
age: 21
boy:
name: Lilei
age: 22
谈谈数据绑定
b.@Value,我们在我们创建的Controller中加入
@ComponentScan(basePackages="com.huhu")
@RestController
public class HelloController { @Value("${str1}")
private String str1;
@Value("${str2}")
private String str2;
@Value("${content}")
private String content; @RequestMapping(value ="/hello",method=RequestMethod.GET)
public String say() { return str1+" "+str2+" "+content;
}
}
启动结果:

c.@Component和@ConfigurationProperties的结合使用创建bean
boy.java
//把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
@Component
@ConfigurationProperties(prefix="boy")
public class Boy { private String name;
private Integer age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} }
gril.java
//把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
@Component
//实现该类的属性与application.yml中的以gril为前缀的数据匹配
@ConfigurationProperties(prefix="gril")
public class Gril { private String name;
private Integer age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} }
HelloController.java
@ComponentScan(basePackages="com.huhu")
@RestController
public class HelloController { @Autowired
private Gril gril; @Autowired
private Boy boy; @RequestMapping(value ="/hello",method=RequestMethod.GET)
public String say() { return gril.getName()+" "+boy.getName();
}
}
启动结果:

这里有一个问题,为什么它们都能把我们application.yml我们设置属性怎么就显示到网页上了?
原因:当你没有声明ViewResolver时,spring会给你注册一个默认的ViewResolver,其是JstlView的实例。
d.改变ViewResolver
首先我们在pom.xml中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
然后在resources/templates/中添加huhu.xml
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h1>hello SpringBoot!</h1>
</body>
</html>
改变HelloController.java
@ComponentScan(basePackages="com.huhu")
@Controller
public class HelloController { @RequestMapping(value ="/hello",method=RequestMethod.GET)
public String say() { return "huhu";
}
}
启动结果:

细心的你是否发现了我上面用的是@Controller,上面都用的是@RestController,我们来看一下区别吧,官方文档里这样说:@RestController is a stereotype annotation that combines @ResponseBody and @Controller.很显然它包括了@ResponseBody and @Controller,上面我们改变了ViewResolver,当然要用@Controller了,json,xml也是类似的做法。
你也可以把上面的HelloController.java改成:
@ComponentScan(basePackages="com.huhu")
@RestController
public class HelloController {
@RequestMapping(value ="/hello",method=RequestMethod.GET)
public String say() {
return "huhu";
}
}
启动结果:

3.SpringBoot杂谈
a.SpringBoot的三种启动

server:
port: 8081
#set a prefix on our URLRequestMapping
#context-path: /boot str1: hello
str2: world
content: "str1: ${str1}, str2:${str2}"
gril:
name: Hanmeimei
age: 21
boy:
name: Lilei
age: 22
application-pro.yml
server:
port: 8080
#set a prefix on our URLRequestMapping
#context-path: /boot str1: hello
str2: world
content: "str1: ${str1}, str2:${str2}"
gril:
name: Hanmeimei
age: 21
boy:
name: Lilei
age: 22
修改application.yml
spring:
profiles:
active: dev
我们分别启动,一个用elipse,一个用第三种方法cmd


启动结果:


有人会说,这无非就是开启了两个不同端口的tomcat么?这能做什么啊?
对的,我想到了可以用它配合nginx做负载均衡啊,大家可以看看这个:Nginx+Tomcat 实现负载均衡(Windows单机测试),是不是SpringBoot让一些东西变简单了。
4.Spring操作mysql数据库
a.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>
b.在application.yml中写入配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false
username: root
password: taizi1203 jpa:
hibernate:
ddl-auto: create
show-sql: true
c.创建你要在数据库中写的表的Bean
Dril.java
//数据持久化
@Entity
public class Dril { @Id
@GeneratedValue
private Integer id; private String name; private Integer age; public Dril() { } public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} }
d.启动结果:
当看到这个,代表你成功了,数据库中已经生成这个表。看到其他,请核对前面的配置

箭头所指的体现了我们在application.yml中的
,如果是create,每次都会删掉原来的表,update只会更新,其他自己看。
e.编写Controller和DrilService
DrilController.java
@RestController
public class DrilController { @Autowired
private DrilService drilService; @RequestMapping(value="/dril",method=RequestMethod.GET)
public List<Dril> getDrils(){ List<Dril> drils =drilService.findAll();
return drils;
} }
DrilService.java
//第一个参数是我们要返回的对象,第二个是ID extends Serializable,即我们在生成数据库的时候指定的Id的类型
public interface DrilService extends JpaRepository<Dril,Integer>{ }
f.启动结果
有FE助手的出现json

IE结果图:

纳闷了,页面返回的数据怎么json了,看了一下IE中的结果,还好没有说错(spring默认注册ViewResolver是JstlView)。其他操作,我就不具体做了。
JPA好像为我们做了好多事,但是他的方法才有几个,总有点他不能干的的,如我们不通过ID来的操作数据库,这时候我们扩展一下他:
DrilJPA.java
public interface DrilJPA extends JpaRepository<Dril,Integer>{
//通过name来查询数据库,findByXxxx不能乱写
public List<Dril> findByName(String name);
}
添加Controller:
@RequestMapping(value="/drils/{name}",method=RequestMethod.GET)
public List<Dril> getDrilName(@PathVariable("name")String name){
List<Dril> drils =drilService.findByName(name);
return drils;
}
启动结果:

5.事务管理
事务:一系列操作,要么全部成功,要么全部不成功。Spring事务管理,大家参考:Spring事务管理
DrilService.java
@Service
public class DrilService { @Autowired
private DrilJPA drilJPA; public void addTwo(){
Dril dril1=new Dril();
dril1.setId(3);
dril1.setAge(20);
dril1.setName("xiaosan");
drilJPA.save(dril1); Dril dril2=new Dril();
dril1.setId(4);
dril1.setAge(24);
dril1.setName("xiaosi");
drilJPA.save(dril2);
} }
添加Controller
@Autowired
private DrilService drilService2; @RequestMapping(value="/drils/addTwo",method=RequestMethod.GET)
public void getDrilName(){ drilService2.addTwo();;
}
如果运行结果成这样,这是事务管理不想看到的,xiaosi跑路了?

SpringBoot有个解决办法:
给Service层方法上添加@Transactional就可以解决。
@Transactional
public void addTwo(){
Dril dril1=new Dril();
dril1.setId(3);
dril1.setAge(20);
dril1.setName("xiaosan");
drilJPA.save(dril1); Dril dril2=new Dril();
dril1.setId(4);
dril1.setAge(24);
dril1.setName("xiaosi");
drilJPA.save(dril2);
}
好了,就分享到这里吧,后面还会更新。
谢谢大家的阅读,博客不易,请转载注明地址:http://www.cnblogs.com/huhu1203/p/7638054.html
SpringBoot初体验的更多相关文章
- SpringBoot初体验及原理解析
一.前言 上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ...
- SpringBoot初体验之整合SpringMVC
作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...
- SpringBoot初体验(续)
1.如果你还不知道SpringBoot的厉害之处,或者你不知道SpringBoot的初级用法,请移步我的上一篇文章,传送门 2.SpringBoot中的表单验证 所谓验证,无非就是检验,对比,正如ja ...
- SpringBoot 初体验
1.Spring Boot 简介 简化Spring应用开发的一个框架 整个Spring技术栈的一个大整合 J2EE开发的一站式解决方案 2.微服务 2014, martin fowler 微服务:架构 ...
- springboot初体验-不知道怎么创建spring-boot项目?
https://spring.io/projects/spring-boot/ 在以上地址找到 Quick start Bootstrap your application with Spring I ...
- (一)SpringBoot基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
- (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
- springboot+支付宝完成秒杀项目的初体验
springboot+支付宝完成秒杀项目的初体验 思考的问题: 首先是秒杀的商品查询,考虑到是热点数据,所以写一个接口读取当日批次的秒杀商品到redis中(那么接下来对商品的操作都放入redis中). ...
- 蚂蚁 RPC 框架 SOFA-RPC 初体验
前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的). 项目地址:Alipa ...
随机推荐
- myeclipse eclipse创建maven web项目时 index.jsp报错
第一种办法 解决办法: ---------------------------------------------------------------------------------------- ...
- echarts柱状图修改背景线为网格线、去掉刻度标签、鼠标悬停在柱条上时变色、柱条圆角弧度、
option = { color: ['red'],//修改柱条颜色 tooltip : { triggerOn:'mousemove' }, grid: { left: '3%', right: ' ...
- xcode模拟器不显示键盘解决方案
当我们使用Xcode进行开发的时候,并不是所有的时候都需要将代码运行在iPhone,有时候模拟器就可以解决这些问题, 但是当你使用模拟器的时候会发现,在TextFiled中输入信息时,如果你是用模拟器 ...
- element ui datePicker 设置当前日期之前的日期不可选
pickerOptions0: { disabledDate(time) { return time.getTime() < Date.now() - 8.64e7 } },
- IOS UIScrollView常用代理方法
iOS UIScrollView代理方法有很多,从头文件中找出来学习一下 //只要滚动了就会触发 - (void)scrollViewDidScroll:(UIScrollView *)scrollV ...
- 为什么Java 两个Integer 中1000==1000为false而100==100为true?
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt346 这是一个挺有意思的讨论话题. 如果你运行下面的代码 1 2 3 4 I ...
- HDU 6200 2017沈阳网络赛 树上区间更新,求和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6200 题意:给个图,有2种操作,一种是加一条无向边,二是查询u,v之间必须有的边的条数,所谓必须有的边 ...
- HTML特殊符号、常用字符实体
HTML特殊符号对照表.常用的字符实体 最常用的字符实体 显示结果 描述 实体名称 实体编号 空格 <</td> 小于号 < < > 大于号 > ...
- MongoDB学习之路(四)
MongoDB插入文档 MongoDB使用insert()或save()方法向集合中插入文档. db.COLLECTION_NAME.insert(document); For instance &g ...
- 扫雷游戏制作过程(C#描述):第三节、雷区绘制
前言 这里给出教程原文地址. 该项目已经放在github上托管. 绘制雷区 这一节我们主要涉及界面中雷区的绘制.绘制雷区需要三个变量来保存雷区行数.列数.以及地雷的数量.而且我们希望能够自动获取上次游 ...