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的三种启动

1.elipse或者idea一键启动
2.mvn spring-boot:run
3.mvn install    cd /target   java -jar ***.jar
既然可以有多种启动方法,我们可不可以启动两个,满足我们线上和线下的开发需求呢?答案是可以:
b.分环境启动SpringBoot
先设置我们resources中application.yml,我们复制两个,分别起名为
application-dev.yml
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初体验的更多相关文章

  1. SpringBoot初体验及原理解析

    一.前言 ​ 上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ...

  2. SpringBoot初体验之整合SpringMVC

    作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...

  3. SpringBoot初体验(续)

    1.如果你还不知道SpringBoot的厉害之处,或者你不知道SpringBoot的初级用法,请移步我的上一篇文章,传送门 2.SpringBoot中的表单验证 所谓验证,无非就是检验,对比,正如ja ...

  4. SpringBoot 初体验

    1.Spring Boot 简介 简化Spring应用开发的一个框架 整个Spring技术栈的一个大整合 J2EE开发的一站式解决方案 2.微服务 2014, martin fowler 微服务:架构 ...

  5. springboot初体验-不知道怎么创建spring-boot项目?

    https://spring.io/projects/spring-boot/ 在以上地址找到 Quick start Bootstrap your application with Spring I ...

  6. (一)SpringBoot基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  7. (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  8. springboot+支付宝完成秒杀项目的初体验

    springboot+支付宝完成秒杀项目的初体验 思考的问题: 首先是秒杀的商品查询,考虑到是热点数据,所以写一个接口读取当日批次的秒杀商品到redis中(那么接下来对商品的操作都放入redis中). ...

  9. 蚂蚁 RPC 框架 SOFA-RPC 初体验

    前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的). 项目地址:Alipa ...

随机推荐

  1. myeclipse eclipse创建maven web项目时 index.jsp报错

    第一种办法 解决办法: ---------------------------------------------------------------------------------------- ...

  2. echarts柱状图修改背景线为网格线、去掉刻度标签、鼠标悬停在柱条上时变色、柱条圆角弧度、

    option = { color: ['red'],//修改柱条颜色 tooltip : { triggerOn:'mousemove' }, grid: { left: '3%', right: ' ...

  3. xcode模拟器不显示键盘解决方案

    当我们使用Xcode进行开发的时候,并不是所有的时候都需要将代码运行在iPhone,有时候模拟器就可以解决这些问题, 但是当你使用模拟器的时候会发现,在TextFiled中输入信息时,如果你是用模拟器 ...

  4. element ui datePicker 设置当前日期之前的日期不可选

    pickerOptions0: { disabledDate(time) { return time.getTime() < Date.now() - 8.64e7 } },

  5. IOS UIScrollView常用代理方法

    iOS UIScrollView代理方法有很多,从头文件中找出来学习一下 //只要滚动了就会触发 - (void)scrollViewDidScroll:(UIScrollView *)scrollV ...

  6. 为什么Java 两个Integer 中1000==1000为false而100==100为true?

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt346 这是一个挺有意思的讨论话题. 如果你运行下面的代码 1 2 3 4 I ...

  7. HDU 6200 2017沈阳网络赛 树上区间更新,求和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6200 题意:给个图,有2种操作,一种是加一条无向边,二是查询u,v之间必须有的边的条数,所谓必须有的边 ...

  8. HTML特殊符号、常用字符实体

    HTML特殊符号对照表.常用的字符实体 最常用的字符实体 显示结果 描述 实体名称 实体编号   空格     <</td> 小于号 < < > 大于号 > ...

  9. MongoDB学习之路(四)

    MongoDB插入文档 MongoDB使用insert()或save()方法向集合中插入文档. db.COLLECTION_NAME.insert(document); For instance &g ...

  10. 扫雷游戏制作过程(C#描述):第三节、雷区绘制

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 绘制雷区 这一节我们主要涉及界面中雷区的绘制.绘制雷区需要三个变量来保存雷区行数.列数.以及地雷的数量.而且我们希望能够自动获取上次游 ...