SpringBoot是SpringMVC的升级,也是学习Spring Cloud的基础部分;
SpringBoot特点如下:
学习Spring Boot知识基础:
在application.properties或application.yml(推荐)下进行项目属性配置。
在application.properties下配置:server.port=8081 server.context-path server.context-path=/sell
在application.yml下配置:
server: port: 8082
context-path: /sell
注意:每个属性冒号后面打空格才能显示出来关键字;
此处推荐使用application.yml配置文件,更加方便规范。
2.2 自定义属性
server: port: 8082 context-path: /sell high: 1.75 age: 25
注意自定义属性的关键字也是自己定义的,就相当于变量名,第一,变量名要顶格;第二,冒号后面要打空格。
自定义属性的使用:
@RestController
public class HelloController {
@Value("${high}")
private String high;
@Value("${age}")
private Integer age;
@RequestMapping(value = "hello", method = RequestMethod.GET)
public String say() {
return "Hello Spring Boot";
}
@RequestMapping(value = "info", method = RequestMethod.GET)
public String say2() {
String str = "???" + high + "\n;???" + age;
return str;
}
}
属性嵌套属性:
content: "high:${high}},age:${age}}"
配置分组写到类里面
有时候为了节省时间和工作量,可以将配置的属性注入到类属性当中:
@Component //声明注入Bean
@ConfigurationProperties(prefix = "sell")
public class SellProperties
{
@Value("${high}")
private Stringhigh;
@Value("${age}")
private Integerage;
@Value("${content}")
private Stringcontent;
public SellProperties(){
}
//……
}
如果一个事物有属性有不同的值,需要配置多个版本,则在application.yml文件激活其他版本的配置,在对应配置文件配置相关属性即可:
例如:
application.yml配置激活application-dev.yml配置文件
配置文件application.yml
spring:
profiles:
active: dev
配置文件application-dev.yml
1
2
/**
* @RestController=@Controller+@ResponseBody
*/
//@Controller
//@ResponseBody()
@RestController
//@RequestMapping("/temp") //需要作为Url的方法名的前缀和方法名拼接起来:http://127.0.0.1:8081/sell/temp/hello
public class HelloController {
@Value("${high}")
private Stringhigh;
@Value("${age}")
private Integerage;
@Value("${content}")
private Stringcontent;
@Autowired
private SellPropertiessellProperties;
@RequestMapping(value="hello",method = RequestMethod.GET )
public Stringsay(){
return "HelloSpring Boot";
}
/**
* 多个url地址访问到同一个方法,用集合的方式写url方法地址
* @return
*/
@RequestMapping(value={"info","private"},method = RequestMethod.GET )
public Stringsay2(){
String str ="身高:"+high+"\n;年龄:"+age;
// return str;
return content;
}
@RequestMapping(value="assem",method = RequestMethod.GET )
public Stringsay3(){
return sellProperties.getContent();
}
@RequestMapping(value="template",method = RequestMethod.GET )
public Stringsay4(){
return "index";
}
/*
路参绑定
@PathVariable(value ="id" ,required = false,defalutValue="0"
表示将路径中的参数绑定给方法中的参数,required=false表示参数传不传都可以,不传的时候默认值为0
*/
@RequestMapping(value="/pathV/{id}",method = RequestMethod.GET )
// @GetMapping(value)
public Stringsay4(@PathVariable(value = "id",required = false,defalutValue="0") Integer id){
return "id"+id;
}
}
SpringBoot操作数据库需要使用Spring-Data_Jpa。
Spring-Data-Jpa(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。
1)设计Restful接口
2)配置:pom.xml文件
org.springframework.boot
spring-boot-starter-data-jpa
mysql
mysql-connector-java
在application.yml文件中配置链接数据库的属性,注意一定要格式对齐,否则会报错
# 默认的配置文件,可以直接在此配置当中配置属性,也可以在此配置文件激活其他配置文件
spring:
profiles:
active: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/girl
username: root
password: root
jpa:
hibernate:
ddl-auto: create
show-sql: true
#create:每次运行程序会自动创建要给空表,如果存在了这个表,会自动删除,然后创建一个同名的空表
#ddl-auto: update 第一运行的时候会自动创建空表,之后运行保留原有表格数据,并更新
#ddl-auto: create-drop 应用结束,就会删除创建的表格。
3)创建数据库girl,不需要创建表,只需要创建对应的类。
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Girl {
@Id
@GeneratedValue
@GeneratedValue
private Integerid;
private StringcupSize;
private Integerage;
public Girl(){
}
//……get and set
}
4)然后运行项目“run’ 项目名application’”会自动创建一个和实体类girl对应的表。
1) 修改配置文件application.yml中对数据库的属性设置:ddl-auto:update,执行数据库操作的时候可以保留数据库中的数据。
2) 创建接口,可以做为代理来自动访问数据库:
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
/**
* 继承自一个访问的数据库,列表为Girl,主键id类型为Integer
*/
public interface GirlRepository extends JpaRepository{
//通过年龄查询,修改DDL,自定义查询方法
public List findByAge(Integer age);
}
3) 创建一个具体的控制类GirlController,并且自动注入上述操作数据库的接口GirlRepository:
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
public class GirlController {
@Autowired
private GirlRepositorygirlRepository;
@GetMapping(value="/girls")
public ListgirlList(){
return girlRepository.findAll();//不需要数据库一句话可以查询接口数据库中
}
/**
* 添加要给女生
* @param cupSize
* @param age
* @return
*/
//@PostMapping(value="/postGirls")
//@RequestMapping(value="/getGirl_1",params ={"cupSize","age"},method=RequestMethod.GET)
@RequestMapping(value="/getGirl_1/{cupSize}/{age}",method=RequestMethod.GET)
public GirlgirlAdd(@PathVariable("cupSize") String cupSize,
@PathVariable("age") Integer age)
{
Girl girl=new Girl();
girl.setAge(age);
girl.setCupSize(cupSize);
return girlRepository .save(girl);//save返回了添加的对象
}
@PostMapping(value="/postGirl_2")
public GirlgirlAdd2(@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age)
{
Girl girl=new Girl();
girl.setAge(age);
girl.setCupSize(cupSize);
return girlRepository .save(girl);//save返回了添加的对象
}
//查询
@GetMapping(value="/girls/find/{id}")
public GirlgirlFindOne(@PathVariable Integer id)
{
return girlRepository.findOne(id);
}
//更新
@PutMapping(value="/girls/update/{id}")
public GirlgirlUpdate(@PathVariable Integer id,
@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age)
{
Girl girl=new Girl();
girl.setId(id);
girl.setAge(age);
girl.setCupSize(cupSize);
return girlRepository.save(girl);
}
//删除
@GetMapping(value="/girls/delete/{id}")
public void girlDeleteOne(@PathVariable Integer id)
{
girlRepository.delete(id); //没有返回值
}
//通过年龄查询列表,在在接口中自定义修改查询方法,然后调用接口中的方法即可。
@GetMapping(value="/girls/age/{age}")
public ListgirlListByAge(@PathVariable("age") Integer age)
{
return girlRepository.findByAge(age);
}
}
在控制器中,既可以调用接口已经实现好的对数据库的操作方法,又可以在接口修改查询方法,然后在控制器中调用该方法;总之,都不需要写SQL语句。
将若干条操作绑定在一起作为一个原子性行为,要么同时成功,要么都失败。
创建服务GirlService.java,注意将操作方法注解@Transactional为事务管理。
@Service
public class GirlService {
@Autowired
private GirlRepository girlRepository;
@Transactional //事务注解 --将该方法的所有操作作为一个事务进行,要么全部执行,要么全部失败
public void insertTwo()
{
Girl girlA=new Girl();
girlA.setAge(23);
girlA.setCupSize("C");
girlRepository.save(girlA);
Girl girlB=new Girl();
girlB.setAge(20);
girlB.setCupSize("D");
girlRepository.save(girlB);
}
}