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. lucene&solr-day1

        全文检索课程 Lucene&Solr(1) 1.   计划 第一天:Lucene的基础知识 1.案例分析:什么是全文检索,如何实现全文检索 2.Lucene实现全文检索的流程 a)   ...

  2. Maven(一)初识Maven

    前言 在这之前一直都有去看关于Maven的相关介绍,但是没有到真正要用的时候,自己总是以为懂了.其实真的感觉Maven并没有想象的那么简单! 那我们该怎么去学习maven呢?接下来我将从: 初步认识m ...

  3. C#构建DataTable(转)

    Asp.net DataTable添加列和行的方法 方法一: DataTable tblDatas = new DataTable("Datas"); DataColumn dc ...

  4. java.lang.ClassNotFoundException: com.sun.jna.Native

    在使用sprng boot加elasticsearch的时候遇到 java.lang.ClassNotFoundException: com.sun.jna.Native,百度之后要我导入 <d ...

  5. 转: 【Java并发编程】之十四:图文讲述同步的另一个重要功能:内存可见性

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17288243 加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另 ...

  6. About Cheating and Plagiarism

    我先描述一下此次事件的具体经过.昨天3月15号的晚上十点,是第四次作业的deadline.在15号之前,只有五位同学提交了作业,而在临近deadline的这几个小时内密密麻麻地提交了二十多份作业.和第 ...

  7. 团队作业3--需求改进&系统设计

    小学生四则运算练习软件APP 一.需求&原型改进 1.给目标用户展现原型,与目标用户进一步沟通理解需求 我们的主要目标用户是小学生,次要目标用户是小学教师 场景一:小明一个三年级的学生,放学回 ...

  8. 团队作业4——第一次项目冲刺(Alpha版本)2017.4.24

    在下午3-4节Linux课结束后,我们teamworkers全体队员留在禹州楼304进行约20分钟的短暂会议,会议讨论关于昨天任务的总结并分配了今天的新任务,大家畅所欲言,情绪高昂,各自阐述了自己不一 ...

  9. 201521123015 《Java程序设计》第2周学习总结

    1.本章学习总结 (1)学习了枚举,数组等方法 (2)通过实验内容的讲解,解决了一些问题 (3)进一步运用和了解码云 书面作业 1.使用Eclipse关联jdk源代码,并查看String对象的源代码( ...

  10. 201521123103 《Java程序设计》 第一周学习总结

    一.本周学习总结 1.初步了解了Java的诞生及版本演进的过程. 2.认识了Java的三大平台:Java SE.Java EE.Java ME:学会安装JDK:Java SE是各应用平台的基础,分为四 ...