解读SpringBoot整合持久层技术之搭建并整合Spring Data JPA项目实战
接下来这阵子就SpringBoot整合持久层技术进行一个项目的搭建,做一个练手,以前搞过但是都淡忘了,特意来总结一下。今天是JPA,后面陆续搭建MyBatis、JdbcTemplate等持久层技术,供大家相互学习。
创建SpringBoot项目
直接上图吧
在SQL里选择了Spring Data JPA MySql Driver Template Engines 选择 Thymeleaf
创建成功后就是这样的一个项目结构:
首先创建一个mysql数据库 创建一个名为book的数据库,里面可以为空,因为JPA会帮我们自动根据实体来进行表的创建。
pom.xml文件
创建成功后我们的pom.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example.springboot</groupId> <artifactId>jpa</artifactId> <version>0.0.1-SNAPSHOT</version> <name>jpa</name> <description>Demo project for Spring Boot JPA</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
接下来就是在项目中配置相关的数据库,在这里我们采用的是properties 有的同学可以用yml文件来进行配置,二者都是一样的。想用哪个都是一样的,至于二者有什么不同等我再写一个文章吧。
在这里我们采用了阿里的Druid,别问为什么,就是很好用,记得加上&serverTimezone=UTC这句,否则数据库链接报错。
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root #是否在控制台打印输出的sql语句 pring.jpa.show-sql=true spring.jpa.database=mysql #表示项目在启动时根据实体类来进行数据库表的更新 spring.jpa.hibernate.ddl-auto=update #表示使用的数据库方言是MySQL57Dialect #spring.jpa.hibernate.naming.physical-strategy=org.hibernate.dialect.MySQL57Dialect
创建实体
省略get和se方法了,自己加上。
@Entity(name = "bookinfo") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "name",nullable = false) private String name; @Column(name = "author",nullable = false) private String author; @Column(name = "price",nullable = true) private Float price; @Transient private String description; }
创建一个BookDao的接口
/** * @program: jpa * @description: 这是一个BOOKDao接口 * @author: zjc **/ public interface BookDao extends JpaRepository<Book,Integer> { List<Book> getBooksByAuthorStartingWith(String author); List<Book> getBooksByPriceGreaterThan(Float price); @Query(value = "select * from bookinfo where id=(select max(id) from bookinfo)",nativeQuery = true) Book getMaxIdBook(); @Query("select b from bookinfo b where b.id>:id and b.author=:author") List<Book> getBookByIdAndAuthor(@Param("id") Integer id,@Param("author") String author); @Query("select b from bookinfo b where b.id<?1 and b.name like %?2%") List<Book> getBookByIdAndName(@Param("id") Integer id,@Param("name") String name); }
一定要注意sql语句传递参数的顺序,这里的?1和?2就是表示传参数的顺序。
创建BookService业务逻辑层
/** * @program: jpa * @description: 这是一个BOOKsERVICE * @author: zjc **/ @Service public class BookService { @Autowired BookDao bookDao; public void addBook(Book book){ bookDao.save(book); } public Page<Book> getBookByPage(Pageable pageable){ return bookDao.findAll(pageable); } public List<Book> getBooksByAuthorStartingWith(String author){ return bookDao.getBooksByAuthorStartingWith(author); } public List<Book> getBooksByPriceGeneraterThan(Float price){ return bookDao.getBooksByPriceGreaterThan(price); } public Book getMaxIdBook(){ return bookDao.getMaxIdBook(); } public List<Book> getBookIdAndAuthor(Integer id,String author){ return bookDao.getBookByIdAndAuthor(id,author); } public List<Book> getBooksByIdAndName(Integer id,String name){ return bookDao.getBookByIdAndName(id,name); } }
最后我们创建一个controller层进行测试。
创建Controller控制层
/** * @program: jpa * @description: 这是一个简单的BookController * @author: zjc **/ @RestController public class BookController { @Autowired BookService bookService; @GetMapping("/findAll") public void findAll(){ PageRequest pageable = PageRequest.of(2,3); Page<Book> page = bookService.getBookByPage(pageable); System.out.println("总页数----------:"+page.getTotalPages()); System.out.println("总记录数----------:"+page.getTotalElements()); System.out.println("查询结果----------:"+page.getContent()); System.out.println("当前页数----------:"+(page.getNumber()+1)); System.out.println("当前页记录数----------:"+page.getNumberOfElements()); System.out.println("每页记录数----------:"+page.getSize()); } @GetMapping("/search") public void search(){ List<Book> ba1 = bookService.getBookIdAndAuthor(1,"鲁迅"); List<Book> ba2 = bookService.getBooksByAuthorStartingWith("鲁"); List<Book> ba3 = bookService.getBooksByIdAndName(2,"朝"); List<Book> ba4 = bookService.getBooksByPriceGeneraterThan(30F); Book b = bookService.getMaxIdBook(); System.out.println("ba1"+ba1); System.out.println("ba2"+ba2); //System.out.println("ba3"+ba3); System.out.println("ba4"+ba4); System.out.println("b"+b); } @GetMapping("/save") public void save(){ Book book = new Book(); book.setAuthor("鲁迅"); book.setName("狂人日记"); book.setPrice(23F); bookService.addBook(book); }
到这里就结束啦,整个项目结构就搭建完毕,大家可以结合自己的业务需求进行代码的继续进展和开发啦,搭建成功后的项目结构如图所示:
后面我会附上我的项目源码链接地址
SpringBoot整合持久层技术之搭建并整合Spring Data JPA项目,方便大家进行下载,如果喜欢就点个赞吧,不胜感激哟!!