美文网首页
SpringBoot JPA相关

SpringBoot JPA相关

作者: 土豆泥加冰谢谢 | 来源:发表于2019-04-04 11:13 被阅读0次

依赖:

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java'

配置:

spring:
  datasource:
    url: jdbc:mysql://{数据库地址}/{数据库名}
    username: {数据库用户名}
    password: {数据库密码}
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update# 自动建表配置,会在运行时就把所有实体类表创建出来,新增字段会自动修改表添加,但是删除字段不会同步移除表column
      show-sql: false#是否运行时显示执行的sql

接着我们创建对应的实体类(表):

@Entity
@Table(name="person")//name注解用于指定实体类映射的表名,如果不指定会默认使用实体类的类名小写作为表名
public class Person {
    @Id//主键
    @GeneratedValue(strategy= GenerationType.IDENTITY)//主键自增长
    private Integer id;
    //也可以动态的设置列名,如果不进行设置则默认使用字段小写名,如果字段为驼峰例如nameNew,自动默认的列名会为name_new
    //同样column还可以设置一些列的默认属性,例如是否可为null,默认值等等
    @Column(name ="name")
    private String name;
    private String age;
}

然后我们实现数据库的操作类即可:

public interface PersonRepository extends JpaRepository<Person,Integer> {
    
    //我们即可以使用JPA提供的方法动态操作生成sql查询,也可以通过注解,自己手动编写sql运行
    @Query(value ="select * from person where name=?1 and age=?2",nativeQuery=true)
    public Person findPersonBySql(String name,Integer age);

}

然后我们直接使用即可:

    @Autowired
    PersonRepository personRepository;
    @GetMapping("/findperson")
    public String findPerson(@RequestParam("name") String name,@RequestParam("age") Integer age){
        Person person=personRepository.findPersonBySql(name,age);
        //JPA已经内置提供了一些简便方法
        personRepository.findAll();
        //jpa提供的save既是创建方法也是更新方法,更新逻辑为查找这个对象主键,不存在就创建,已存在就更新
        //注意的是,save更新会更新所有列,所以如果传入的person的name为null,但是表里有值,会被更新为null
        personRepository.save(person);
        return "查找person";
    }

数据库的事物操作:

@Service
public class PersonService {

    @Autowired
    PersonRepository personRepository;

    //springboot的transactional注解,指定在service上,开启数据库的事物操作
    @Transactional
    public void saveAndDelete(){
        //因为开启了Transactional,所以两条数据库操作一定要均执行成功,否则回滚,均不执行
        Person person1=new Person();
        person1.setName("刘德华");
        personRepository.save(person1);

        Person person2=new Person();
        person2.setName("张学友");
        personRepository.save(person2);
    }
}

相关文章

网友评论

      本文标题:SpringBoot JPA相关

      本文链接:https://www.haomeiwen.com/subject/eiqfiqtx.html