使用spring-data-jpa写一个简单的增删改查demo

今天学习了一下spring全家桶中的一员:spring-data-jpa
这个东西的用处目前觉得挺适合做简单则增删改查与单表查询功能的。
进入正题:

1.先创建springboot项目:在项目中勾选jpa
使用spring-data-jpa写一个简单的增删改查demo_第1张图片
2.到项目中配置yml文件:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/jpademo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: root
  jpa:
    database: mysql
    show-sql: true
    hibernate:
      ddl-auto: update #执行DDL语句时,是创建create,创建删除create-drop,更新update。建议用update,这样第一次启动项目会创建表,之后的启动只会更新表中的数据与表结构,不会每次都覆盖掉表
      naming:
        #spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
        #这个是默认写法,以属性名命名
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

由于是简单的demo,所以只需要这些配置即可

2.然后创建实体类
在实体类的主键列上加入注解:@Id//id注解的意思是主键,但是这样的主键不会让主键自增长,所以我们还要加入一个注解:
@GeneratedValue(strategy = GenerationType.IDENTITY)//这个注解是让主键自增且唯一的意思,GenerationType的属性还有几个,但是我们的简单的小demo用这个注解就可以了。

3.然后写dao层:
dao层需要继承 JpaRepository<这个放的是实体类,这个放的是主键的数据类型>这个类,这个类里有简单增删改查的方法,就不用我们写sql语句了,这就是我们学习jpa的意义,当然,这个里面是没有模糊查询的方法的,所以需要我们的 @Query注解,在注解里面写我们的sql语句。
由于分页整合模糊查询在jpa中有点绕,所以我把代码贴在下面(大神请无视):

//这是service的实现类
    @Override
    public  Page<Student> getAll(Integer page,Integer size,Student student) {
        if (page == null || page ==0)
            page = 0 ;//这里的第一页是从0开始的,所以我们把没有数据的page值设置为0
        if (size == null || size == 0)
            size  = 3 ;//每页的个数,如果没有值就设置为3

        return dao.findByName(student.getName()==null?"":student.getName(),PageRequest.of(page , size));//这里是做数据回写用的
    }
//这是控制层
  @RequestMapping("/findByPage")
        public String findByPage(Integer pageNum,Integer size,Model model,Student student){
            model.addAttribute("student",service.findByPage(pageNum,size,student));
            model.addAttribute("likename",student.getName());//同样是做数据回写用的
            return "index";
        }

然后写service与impl层,在自动注入的dao层对象里面调用它所继承的增删改查的方法即可,但是要注意一个问题,如果删除是根据主键删除的话,dao层继承的findById的方法是需要.get()方法的,不然返回值不是实体类,使用起来会报错。下面就没什么注意事项了,因为dao层继承了增删改的方法,所以就不需要写代码了,在service实现类直接使用dao层的对象调用它继承的方法即可。

你可能感兴趣的:(spring)