1.属性注入:
application.yml
server: port: 8081 servlet: context-path: /girl cupSize: B age: 18 content: "cupSize: ${cupSize} ,age: ${age}"
@RestController public class HelloController { @Value("${cupSize}") private String cupSize; @Value("${age}") private Integer age; @Value("${content}") private String content; @RequestMapping(value="/hello",method=RequestMethod.GET) public String say(){ return "content:"+content; } }
2.对象注入
server: port: 8081 servlet: context-path: /girl girl: cupSize: B age: 18
@Component @ConfigurationProperties(prefix = "girl") public class GirlProperties { private String cupSize; private Integer age; public String getCupSize() { return cupSize; } public void setCupSize(String cupSize) { this.cupSize = cupSize; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
@RestController public class HelloController { @Autowired private GirlProperties girlProperties; @RequestMapping(value="/hello",method=RequestMethod.GET) public String say(){ return girlProperties.getCupSize(); } }
===生产、开发环境配置文件切换======
application.yml
spring: profiles: active: dev
application-dev.yml
server: port: 8081 girl: cupSize: F age: 18
application-prod.xml
server: port: 8081 girl: cupSize: B age: 18
无需修改配置文件切换方式:
java -jar **.jar --spring.profiles.active=prod
@RestController ==@Controller +@ResponseBody的作用
==单访问路径
@RequestMapping(value="/hello",method=RequestMethod.GET) public String say(){ return girlProperties.getCupSize(); }
==多访问路径
@RequestMapping(value={"/hello","/hi"},method=RequestMethod.GET) public String say(){ return girlProperties.getCupSize(); }
例如:say?id=**
@RequestMapping(value="/hello",method=RequestMethod.GET) public String say(@RequestParam("id")Integer id){ return "id:"+id; }
设置默认值,以及允许不填写
public String say(@RequestParam(value="id",required = false,defaultValue = "0")Integer id){ return "id:"+id; }
say/{id}
@RequestMapping(value="/hello/{id}",method=RequestMethod.GET) public String say(@PathVariable("id") Integer id){ return "id:"+id; }
操作数据库前,加入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
配置文件
spring: profiles: active: dev datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/dbgirl username: root passowrd: jpa: hibernate: ddl-auto: update //create每次启动重新建表,craete-drop启动建表,停止删表 update有数据不删表 none什么都不做 validate验证表结构和类属性是否一致
put操作注意,表单格式。
@RestController public class GirlController { @Autowired private GirlRepository girlRepository; /** * 查询所有女生列表 * @return */ @GetMapping("/girls") public List<Girl> girlList(){ return girlRepository.findAll(); } /** * 添加一个女生 * @param cupSize * @param age * @return */ @PostMapping(value="/girls") public Girl girlAdd(@RequestParam("cupSize") String cupSize, @RequestParam("age") Integer age){ Girl girl= new Girl(); girl.setCupSize(cupSize); girl.setAge(age); return girlRepository.save(girl); } //查询一个女生 @GetMapping(value = "/girls/{id}") public Girl girlFindOne(@PathVariable("id") Integer id) { return girlRepository.findById(id).get(); } //更新 @PutMapping(value="/girls/{id}") public Girl girlUpdate(@PathVariable("id") Integer id, @RequestParam("cupSize") String cupSize, @RequestParam("age") Integer age){ Girl girl= new Girl(); girl.setId(id); girl.setCupSize(cupSize); girl.setAge(age); return girlRepository.save(girl); } //删除 @DeleteMapping(value="/girls/{id}") public void girDelete(@PathVariable("id") Integer id){ girlRepository.deleteById(id); } //通过年龄查询女生列表 @GetMapping(value="/girls/age") public List<Girl> girlListByAge(@PathVariable("age") Integer age){ return girlRepository.findByAge(age); } }
//类名,id的类型 public interface GirlRepository extends JpaRepository<Girl, Integer> { //通过年龄来查询 public List<Girl> findByAge(Integer age); }
@Entity //jsr303验证 public class Girl { @Id//主键 @GeneratedValue //自增 private Integer id; private String cupSize; private Integer age; //必须要有一个无参构造方法 public Girl() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCupSize() { return cupSize; } public void setCupSize(String cupSize) { this.cupSize = cupSize; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
package com.imooc.girl; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "girl") public class GirlProperties { private String cupSize; private Integer age; public String getCupSize() { return cupSize; } public void setCupSize(String cupSize) { this.cupSize = cupSize; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
事务:
不生效的情况检查
数据库表必须是innoDb引擎才行。
@Service public class GirlService { @Autowired private GirlRepository girlRepository; @Transactional public void insertTwo(){ try{ Girl girlA=new Girl(); girlA.setCupSize("A"); girlA.setAge(18); girlRepository.save(girlA); Girl girlB=new Girl(); girlB.setCupSize("BBB"); girlB.setAge(19); girlRepository.save(girlB); }catch (Exception e){ e.printStackTrace(); } } }
controller
@PostMapping(value="/girls/two") public void girlTwo(){ girlService.insertTwo(); }
spring: profiles: active: dev datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/dbgirl username: root passowrd: jpa: hibernate: ddl-auto: create show-sql: true database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
如果jpa创建的表格式不是innoDb,在配置文件中加入方言就OK了