博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot初体验
阅读量:4948 次
发布时间:2019-06-11

本文共 7426 字,大约阅读时间需要 24 分钟。

1.elipse中创建Springboot项目并启动

具体创建步骤请参考:

2.项目的属性配置

a.首先我们在项目的resources目录下application.yml中添加以下内容:

server:  port: 8080  #set a prefix on our URLRequestMapping  #context-path: /bootstr1: hellostr2: worldcontent: "str1: ${
str1}, str2:${
str2}"gril: name: Hanmeimei age: 21boy: name: Lilei age: 22

谈谈数据绑定

b.@Value,我们在我们创建的Controller中加入

@ComponentScan(basePackages="com.huhu")@RestControllerpublic 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容器中,相当于配置文件中的
@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容器中,相当于配置文件中的
@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")@RestControllerpublic 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中添加依赖:

org.springframework.boot
spring-boot-starter-thymeleaf

然后在resources/templates/中添加huhu.xml

Insert title here

hello SpringBoot!

改变HelloController.java

@ComponentScan(basePackages="com.huhu")@Controllerpublic 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")@RestControllerpublic 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: /bootstr1: hellostr2: worldcontent: "str1: ${str1}, str2:${str2}"gril:   name: Hanmeimei  age: 21boy:   name: Lilei  age: 22

application-pro.yml

server:  port: 8080  #set a prefix on our URLRequestMapping  #context-path: /bootstr1: hellostr2: worldcontent: "str1: ${str1}, str2:${str2}"gril:   name: Hanmeimei  age: 21boy:   name: Lilei  age: 22

修改application.yml

spring:  profiles:    active: dev

我们分别启动,一个用elipse,一个用第三种方法cmd

启动结果:

有人会说,这无非就是开启了两个不同端口的tomcat么?这能做什么啊?

对的,我想到了可以用它配合nginx做负载均衡啊,大家可以看看这个:,是不是SpringBoot让一些东西变简单了。

 4.Spring操作mysql数据库

 a.pom.xml引入两个依赖

org.springframework.boot
spring-boot-starter-data-jpa
mysql
mysql-connector-java

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

//数据持久化@Entitypublic 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

@RestControllerpublic class DrilController {        @Autowired    private DrilService drilService;        @RequestMapping(value="/dril",method=RequestMethod.GET)    public List
getDrils(){ List
drils =drilService.findAll(); return drils; }}

DrilService.java

//第一个参数是我们要返回的对象,第二个是ID extends Serializable,即我们在生成数据库的时候指定的Id的类型public interface DrilService extends JpaRepository
{}

f.启动结果

有FE助手的出现json

IE结果图:

 

纳闷了,页面返回的数据怎么json了,看了一下IE中的结果,还好没有说错(spring默认注册ViewResolver是JstlView)。其他操作,我就不具体做了。

 JPA好像为我们做了好多事,但是他的方法才有几个,总有点他不能干的的,如我们不通过ID来的操作数据库,这时候我们扩展一下他:

DrilJPA.java

public interface DrilJPA extends JpaRepository
{ //通过name来查询数据库,findByXxxx不能乱写 public List
findByName(String name);}

添加Controller:

@RequestMapping(value="/drils/{name}",method=RequestMethod.GET)    public List
getDrilName(@PathVariable("name")String name){ List
drils =drilService.findByName(name); return drils; }

启动结果:

5.事务管理

事务:一系列操作,要么全部成功,要么全部不成功。Spring事务管理,大家参考:

 DrilService.java

 
@Servicepublic 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);    }

好了,就分享到这里吧,后面还会更新。

谢谢大家的阅读,博客不易,请转载注明地址:

转载于:https://www.cnblogs.com/huhu1203/p/7638054.html

你可能感兴趣的文章
日常一些出现bug的问题
查看>>
同时启动多个tomcat服务器
查看>>
怎么将iphone上的照片导出到本地文件
查看>>
Repeater+DataPagerSource分页
查看>>
模块化导出
查看>>
pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
查看>>
Sphinx 2.0.8 发布,全文搜索引擎 Installing Sphinx on Windows
查看>>
pod
查看>>
ResultSet 可滚动性和可更新性
查看>>
VS2013 C++代码运行问题
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
LUOGU P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…
查看>>
toad for oracle中文显示乱码
查看>>
scala的REPL shell的调用
查看>>
SQL中Group By的使用
查看>>
Mybatis映射原理,动态SQL,log4j
查看>>
哪个微信编辑器比较好用?
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
Pylint在项目中的使用
查看>>
使用nginx做反向代理和负载均衡效果图
查看>>