Springboot入门学习笔记(二)
与数据库的使用
首先在maven里加入相关的jpa的依赖
~~~xml
org.springframework.boot
spring-boot-starter-data-jpa
~~~
在yml里配置
spring:
profiles:
active: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dbgirl
password: ok
username: root
jpa:
hibernate:
ddl-auto: update
show-sql: true
datasource里是数据库信息,这里用的mysql。
jpa里是对jpa实现的一些配置
- 新建一个与数据库表对应的类。(数据库无需建表)
@Entity
public class Girl {
@Id
@GeneratedValue
private Integer id;
private String cupSize;
private Integer age;
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;
}
public Girl() {}
}
@Entity
注释是指此类是数据库表对应的。@Id
代表主键,
@GeneratedValue
代表自增长。- 类名对应数据库表名,属性对应数据库列。
必须要有getset和无参构造器
- 相关的增删改查
查所有
先建一个Repository接口
public interface GirlRepository extends JpaRepository<Girl,Integer> {
}
+ 继承`JpaRepository<Girl,Integer>`,泛型里面前面是数据库表对应类,后面是类id类型。
再建一个controller类
@RestController
public class GirlController {
@Autowired
private GirlRepository girlRepository;
@GetMapping(value = "/girls")
public List<Girl> girls(){
return girlRepository.findAll();
}
}
+ findAll()里面包含了查所有的一套sql。不需要写sql
增加一个
在controller层继续添加
@PostMapping(value = "/addgirl")
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);
}
查询一个
根据id查询。
@GetMapping(value = "/girls/{id}")
public Girl girlFindOne(@PathVariable("id") Integer id){
return girlRepository.findOne(id);
}
根据属性条件查询。
这里需要自己在之前的接口里增加方法
public interface GirlRepository extends JpaRepository<Girl,Integer> {
public List<Girl> findByAge(Integer age);
}
+ 注意这里的方法名一定要是findBy+属性的格式!
然后继续在controller里增加
@GetMapping(value = "/girls/age/{age}")
public List<Girl> girlListByAge(@PathVariable("age") Integer age){
return girlRepository.findByAge(age);
}
更新
依旧在controller层
@PutMapping(value = "/girls/{id}")
public void 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);
girlRepository.save(girl);
}
+ 注意这是前台像后台传数据的时候,不能用form-data ,而是要用x-www-form-urlencoded
- 删除
@DeleteMapping(value = "/girls/{id}")
public void girlDelete(@PathVariable("id") Integer id) {
girlRepository.delete(id);
}
事物
如果severce层一个方法里有两条sql语句,需要达到事物效果,可以在方式上加
@transactional
来实现。