文章目录

  • 1. SpringBoot整合Spring Data JPA
    • 1.1 新增数据
    • 1.2 修改
    • 1.3 删除操作
    • 1.4 查询操作
      • 1.4.1 简单查询
      • 1.4.2 排序查询
      • 1.4.3 分页查询
      • 1.4.4 Spring Data JPA关键字定义查询
      • 1.4.5 Spring Data JPA自定义查询SQL
      • 1.4.5 Spring Data JPA自定义数据修改
  • 2. SpringBoot整合Spring Data JPA多数据源

1. SpringBoot整合Spring Data JPA

新建SpringBoot项目,依赖如下:

修改pom.xml

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope><version>5.1.27</version>
</dependency>

整体结构:

修改application.properties

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.password=123456
spring.datasource.username=root
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/skyspring.jpa.show-sql=true
spring.jpa.database=mysql
spring.jpa.database-platform=mysql
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

Book

package org.sky.jpa.bean;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;/*** @author sky* @date 2020/7/30 14:21*/
@Entity(name = "t_book")
public class Book {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;private String author;private String name;public Book() {}public Book(String author, String name) {this.author = author;this.name = name;}@Overridepublic String toString() {return "Book{" +"id=" + id +", author='" + author + '\'' +", name='" + name + '\'' +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

BookDao

package org.sky.jpa.dao;import org.sky.jpa.bean.Book;
import org.springframework.data.jpa.repository.JpaRepository;/*** @author sky* @date 2020/7/30 14:30*/
public interface BookDao extends JpaRepository<Book, Integer> {}

启动项目,数据库就会生成对应的表:

1.1 新增数据

JpaApplicationTests

package org.sky.jpa;import org.junit.jupiter.api.Test;
import org.sky.jpa.bean.Book;
import org.sky.jpa.dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class JpaApplicationTests {@AutowiredBookDao bookDao;@Testvoid add() {Book book1 = new Book("sky", "China");Book book2 = new Book("罗贯中", "三国演义");Book book3 = new Book("曹雪芹", "红楼梦");Book book4 = new Book("施耐庵", "水浒传");Book book5 = new Book("吴承恩", "西游记");Book book6 = new Book("鲁迅", "狂人日记");bookDao.save(book1);bookDao.save(book2);bookDao.save(book3);bookDao.save(book4);bookDao.save(book5);bookDao.save(book6);}}

结果:

1.2 修改

    @Testvoid update(){Book book = new Book("sky", "无著作");book.setId(1);bookDao.saveAndFlush(book);}

结果:

1.3 删除操作

    @Testvoid delete(){bookDao.deleteById(1);}

结果:

1.4 查询操作

1.4.1 简单查询

    @Testvoid query1(){Optional<Book> byId = bookDao.findById(2);System.out.println(byId);List<Book> all = bookDao.findAll();System.out.println(all);}

结果:

1.4.2 排序查询

    @Testvoid query2(){List<Book> bookList = bookDao.findAll(Sort.by(Sort.Direction.DESC, "id"));System.out.println(bookList);}

结果:

1.4.3 分页查询

    @Testvoid query3(){PageRequest pageable = PageRequest.of(0, 2);Page<Book> page = bookDao.findAll(pageable);System.out.println("总记录数:"+page.getTotalElements());System.out.println("当前页记录数:"+page.getNumberOfElements());System.out.println("每页记录数:"+page.getSize());System.out.println("总页数:"+page.getTotalPages());System.out.println("查询结果:"+page.getContent());System.out.println("当前页(从0开始):"+page.getNumber());System.out.println("是否为首页:"+page.isFirst());System.out.println("是否为尾页:"+page.isLast());}

结果:

1.4.4 Spring Data JPA关键字定义查询

BookDao

public interface BookDao extends JpaRepository<Book, Integer> {List<Book> findBookByIdGreaterThan(Integer id);
}

注意:根据提示来写

    @Testvoid query4(){System.out.println(bookDao.findBookByIdGreaterThan(3));}

结果:

1.4.5 Spring Data JPA自定义查询SQL

BookDao

public interface BookDao extends JpaRepository<Book, Integer> {List<Book> findBookByIdGreaterThan(Integer id);@Query(value = "select * from t_book where id=(select max(id) from t_book)", nativeQuery = true)Book findMaxIdBook();
}
    @Testvoid query5(){System.out.println(bookDao.findMaxIdBook());}

结果:

1.4.5 Spring Data JPA自定义数据修改

BookDao

public interface BookDao extends JpaRepository<Book, Integer> {List<Book> findBookByIdGreaterThan(Integer id);@Query(value = "select * from t_book where id=(select max(id) from t_book)", nativeQuery = true)Book findMaxIdBook();@Query(value = "insert into t_book (author, name) values(?2, ?1)", nativeQuery = true)@Modifying@TransactionalInteger addBook(String name, String author);@Query(value = "insert into t_book (author, name) values(:author, :name)", nativeQuery = true)@Modifying@TransactionalInteger addBook2(String name, String author);
}
    @Testvoid test(){Integer back1 = bookDao.addBook("呐喊", "鲁迅");System.out.println(back1);Integer back2 = bookDao.addBook2("朝花夕拾", "鲁迅");System.out.println(back2);}

结果:

2. SpringBoot整合Spring Data JPA多数据源

创建新的项目,依赖跟上一节一致、pom文件修改一致、Book一致

整体结构:

application.properties

spring.datasource.one.password=123456
spring.datasource.one.url=jdbc:mysql://127.0.0.1:3306/sky
spring.datasource.one.username=root
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.two.password=123456
spring.datasource.two.url=jdbc:mysql://127.0.0.1:3306/sky2
spring.datasource.two.username=root
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSourcespring.jpa.properties.hibernate.ddl-auto=update
spring.jpa.properties.database-platform=mysql
spring.jpa.properties.show-sql=true
spring.jpa.properties.database=mysql
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

DataSourceConfig

package org.sky.jps2.config;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.sql.DataSource;/*** @author sky* @date 2020/7/30 16:28*/
@Configuration
public class DataSourceConfig {@Bean@Primary@ConfigurationProperties(prefix = "spring.datasource.one")DataSource dsOne(){return DruidDataSourceBuilder.create().build();}@Bean@ConfigurationProperties(prefix = "spring.datasource.two")DataSource dsTwo(){return DruidDataSourceBuilder.create().build();}
}

JpaConfig1

package org.sky.jps2.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;/*** @author sky* @date 2020/7/30 16:30*/
@Configuration
@EnableJpaRepositories(basePackages = "org.sky.jps2.dao1", entityManagerFactoryRef ="localContainerEntityManagerFactoryBean1", transactionManagerRef = "platformTransactionManager1")
public class JpaConfig1 {@Autowired@Qualifier("dsOne")DataSource dsOne;@AutowiredJpaProperties jpaProperties;@Bean@PrimaryLocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean1(EntityManagerFactoryBuilder builder) {return builder.dataSource(dsOne).properties(jpaProperties.getProperties()).persistenceUnit("pu1").packages("org.sky.jps2.bean").build();}@BeanPlatformTransactionManager platformTransactionManager1(EntityManagerFactoryBuilder builder){return new JpaTransactionManager(localContainerEntityManagerFactoryBean1(builder).getObject());}
}

JpaConfig2

package org.sky.jps2.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;/*** @author sky* @date 2020/7/30 16:30*/
@Configuration
@EnableJpaRepositories(basePackages = "org.sky.jps2.dao2", entityManagerFactoryRef ="localContainerEntityManagerFactoryBean2", transactionManagerRef = "platformTransactionManager2")
public class JpaConfig2 {@Autowired@Qualifier("dsTwo")DataSource dsTwo;@AutowiredJpaProperties jpaProperties;@BeanLocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean2(EntityManagerFactoryBuilder builder) {return builder.dataSource(dsTwo).properties(jpaProperties.getProperties()).persistenceUnit("pu2").packages("org.sky.jps2.bean").build();}@BeanPlatformTransactionManager platformTransactionManager2(EntityManagerFactoryBuilder builder){return new JpaTransactionManager(localContainerEntityManagerFactoryBean2(builder).getObject());}
}

BookDao1

package org.sky.jps2.dao1;import org.sky.jps2.bean.Book;
import org.springframework.data.jpa.repository.JpaRepository;/*** @author sky* @date 2020/7/30 16:38*/
public interface BookDao1 extends JpaRepository<Book, Integer> {}

BookDao2

package org.sky.jps2.dao2;import org.sky.jps2.bean.Book;
import org.springframework.data.jpa.repository.JpaRepository;/*** @author sky* @date 2020/7/30 16:38*/
public interface BookDao2 extends JpaRepository<Book, Integer> {}

Jps2ApplicationTests

package org.sky.jps2;import org.junit.jupiter.api.Test;
import org.sky.jps2.bean.Book;
import org.sky.jps2.dao1.BookDao1;
import org.sky.jps2.dao2.BookDao2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
class Jps2ApplicationTests {@AutowiredBookDao1 bookDao1;@AutowiredBookDao2 bookDao2;@Testvoid contextLoads() {List<Book> all = bookDao1.findAll();System.out.println(all);List<Book> all1 = bookDao2.findAll();System.out.println(all1);}}

运行后:

Springboot开心学习(第九天)相关推荐

  1. SpringBoot基础学习之SpringBoot配置(上篇)

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个SpringB ...

  2. SpringBoot基础学习之整合Swagger框架(上篇)

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个SpringB ...

  3. SpringBoot基础学习之整合SpringSercurity框架

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个SpringB ...

  4. 8. SpringBoot基础学习笔记

    SpringBoot基础学习笔记 课程前置知识说明 1 SpringBoot基础篇 1.1 快速上手SpringBoot SpringBoot入门程序制作 1.2 SpringBoot简介 1.2.1 ...

  5. SpringBoot入门学习(六)之云收藏项目

    目录 1.Spring Boot的思维导图分析 2.项目介绍 3.项目分析 4.创建SpringBoot项目,添加依赖 5.数据库 6.特别说明 7.效果展示 8.源码下载地址 本篇文章是Spring ...

  6. 《SpringBoot框架学习二之HTTP协议》

    <SpringBoot框架学习二之HTTP协议> 文章目录 <SpringBoot框架学习二之HTTP协议> 一.HTTP介绍 (1)概述 (2)HTTP版本协议 1.HTTP ...

  7. 【SpringBoot】最新版2019Spring Boot配置解析,源码解析(速成SpringBoot)——学习笔记版【2】

    SpringBoot配置文件 文章目录 SpringBoot配置文件 四.配置文件 1.简介 2.YAML用法 2.1 简介 2.2语法 3.为属性注入值 3.1使用.yml配置文件 3.1编写.ym ...

  8. Python学习第九篇:zipfile 库操作压缩包

    ​ Python学习第九篇:zipfile 库操作压缩包 -- 活动地址:CSDN21天学习挑战赛 zipfile是python里用来做zip格式编码的压缩和解压缩的 zipfile里有两个非常常用的 ...

  9. SpringBoot入门学习(五)之旅游网站项目

    目录 1.项目需求 2.技术需求 3.pom.xml 4.application.yml 4.MybatisPlus的配置文件 5.springboot中配置日期类型转换器 6.用户管理 7.线路管理 ...

  10. 项目记录(1)---SpringBoot的学习

    SpringBoot 0.学习目标 了解SpringBoot的作用 掌握java配置的方式 了解SpringBoot自动配置原理 掌握SpringBoot的基本使用 了解Thymeleaf的基本使用 ...

最新文章

  1. TensorFlow之张量
  2. 刘锋 吕乃基:互联网中心化与去中心化之争
  3. 程序员看过来!JS、Java、C 依然强势,Go、Kotlin、Python 潜力股,2020 开发者生态系统报告
  4. Tengine编译安装config项目清单
  5. oracle表空间的创建及dmp 文件的导入
  6. IOS中实现设备摇动检测
  7. 概率统计:第五章 大数定律与中心极限定理
  8. LeetCode之最小路径和
  9. CSS3实现垂直居中
  10. td自动换行:设置table布局固定,td根据设定宽度自动换行
  11. IDL实现矢量(shp)裁剪栅格TASK(一)
  12. 计算机应用基础输入法教案,计算机应用基础教案第二讲:五笔字型输入法(中职教育).doc...
  13. Git使用:拉取最新代码、提交本地代码到远程仓库冲突
  14. linux上如何把2个或者多个显示器合并为一个显示器
  15. 我在阿里工作的这段时间里,都学到了哪些东西
  16. Cannot mix different versions of joi schemas
  17. 50欧姆系统的由来的小故事
  18. 有新的CVE仓库送达~
  19. 解决:VS2010 无法打开“****”,因为此版本的应用程序不支持其项目类型
  20. linux curse库函数,curse

热门文章

  1. ARouter::There is no route match the path
  2. 第九节、G1垃圾收集器(官方文档抄录)
  3. php工作日,php – 计算工作日
  4. oracle按照首汉字首字母排序
  5. [Pytorch系列-59]:循环神经网络 - 中文新闻文本分类详解-1-业务目标分析与总体架构
  6. [LeetCode周赛复盘] 第 323 场周赛20221211
  7. 山东省2022 年专升本 计算机大纲(数据库管理系统)
  8. 2019 程序员下半年跳槽如何找准方向?资深猎头顾问告诉你!
  9. 丁小平微积分研究成果刍议[转载]
  10. GD32 时钟怎么设定为1ms