SpringBoot整合SpringDataJPA(五)

一、  SpringData:其实SpringData就是Spring提供了一个操作数据的框架。而SpringData JPA只是SpringData框架下的一个基于JPA标准操作数据的模块。
  SpringData JPA:基于JPA的标准数据进行操作。简化操作持久层的代码。只需要编写接口就可以。

  1. 首先添加相关依赖  在这里插入图片描述
 <!--springdatajpa依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
  1. 配置文件
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jpa?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
#显示sql
spring.jpa.show-sql=true
spring.jpa.database=mysql
spring.jpa.database-platform=mysql
#jpa正向工程
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

实体类

@Entity(name = "t_book")//对应数据库中的表名
public class Book {
    //主键自增 一定要有
    @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY))//主键生成策略
    @Column(name="id")//数据库字段名  如果一样可以省略
    private Integer id;
    private String name;
    private String author;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}
  1. mapper接口

/**
* 参数一 :当前需要映射的实体
* 参数二  :当前映射的实体中的主键的类型
*
*/
public interface BookMapper extends JpaRepository <Book,Integer>{


}
  1. 测试
@SpringBootTest
class SpringdatajpaApplicationTests {


    @Autowired
    BookMapper bookMapper;
    //添加
    @Test
    void contextLoads() {
        Book book = new Book();
        book.setName("java");
        book.setAuthor("song");
        bookMapper.save(book);

    }
    //修改
    @Test
    void update(){
        Book book = new Book();
        book.setName("西游记");
        book.setId(1);
        book.setAuthor("song");
        //按照id判断是否存在   不存在是添加  存在修改
        bookMapper.saveAndFlush(book);
    }
    //删除
    @Test
    void delete(){
        bookMapper.deleteById(1);

    }
    //查询
    @Test
    void find1(){
        Optional<Book> byId = bookMapper.findById(2);
        System.out.println(byId);
        List<Book> all = bookMapper.findAll();
        System.out.println(all);


    }
    @Test
    void find3(){
     //分页
        PageRequest of = PageRequest.of(0,2);
        Page<Book> all = bookMapper.findAll(of);
        System.out.println("当前页记录数"+all.getNumberOfElements());
        System.out.println("总记录数"+all.getTotalElements());
        System.out.println("每页几条"+all.getSize());
        System.out.println("总页数"+all.getTotalPages());
        System.out.println("查询结果"+all.getContent());
        System.out.println("当前页(从0开始计算)"+all.getNumber());
        System.out.println("是否为首页"+all.isFirst());
        System.out.println("是否为尾页"+all.isLast());


    }
  
}


二、Repository接口的使用
提供了方法名称命名查询方式
mapper接口

public interface BookMapper extends JpaRepository <Book,Integer>{
    //方法名称必须要遵循驼峰式命名规则,find+属性名称(首字母大写)+By(关键字)+查询条件(首字母大写)
    //自定义按id查询
     List<Book> findBookById(Integer id);
    //自定义按name查询
     List<Book> findBookByName(String name);
    //自定义按name,author查询
     List<Book> findBookByNameAndAuthor(String name,String author);
    //自定义按author模糊查询
     List<Book> findBookByAuthorLike(String name);

}

测试

@Test
    void find4(){
        List<Book> byBookId = bookMapper.findBookById(1);
        System.out.println(byBookId);
        System.out.println("===================");
        List<Book> byBookName = bookMapper.findBookByName("西游记");
        System.out.println(byBookName);
        System.out.println("===================");
        List<Book> byBookNameAndAuthor = bookMapper.findBookByNameAndAuthor("三国演义", "罗贯中");
        System.out.println(byBookNameAndAuthor);
        System.out.println("===================");
        List<Book> byBookNameLike = bookMapper.findBookByAuthorLike("吴%");
        System.out.println(byBookNameLike);
    }

三、自定义查询sql
mapper接口

public interface BookMapper extends JpaRepository <Book,Integer>{

  /**
   *
   * 自定义查询sql
   *
   */
    /**
   * 
   * 添加与修改需要事务
   *  @Modifying
   *  @Transactional
   */
   @Query(value = "select*from t_book",nativeQuery = true)
   List<Book> getAll();

 /**
   *
   * 两种传参方式
   * 
   */
   @Query(value = "insert into t_book(name,author)values(?1,?2)",nativeQuery = true)
   @Modifying
   @Transactional
   Integer insertBook(String name,String author);

   @Query(value = "insert into t_book(name,author)values(:name,:author)",nativeQuery = true)
   @Modifying
   @Transactional
   Integer insertBook2(@Param("name") String name, @Param("author") String author);


}

测试

 @Test
  void find5(){
      List<Book> all = bookMapper.getAll();
      System.out.println(all);
  }
  @Test
  void find6(){
      Integer integer = bookMapper.insertBook("test1", "auhor1");
      System.out.println(integer);
  }
  @Test
  void find7(){
      Integer integer = bookMapper.insertBook2("test2", "auhor2");
      System.out.println(integer);
  }

数据库字段
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值