美文网首页
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